killbill-memoizeit
Changes
api/src/main/java/org/killbill/billing/overdue/applicator/formatters/BillingStateFormatter.java 6(+4 -2)
entitlement/src/main/java/org/killbill/billing/entitlement/api/EntitlementDateHelper.java 21(+2 -19)
entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java 11(+2 -9)
entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java 10(+3 -7)
entitlement/src/test/java/org/killbill/billing/entitlement/api/TestEntitlementDateHelper.java 17(+16 -1)
junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java 11(+4 -7)
junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultBillingEvent.java 22(+5 -17)
junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java 2(+1 -1)
junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java 4(+2 -2)
junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestDefaultBillingEvent.java 2(+1 -1)
overdue/src/test/java/org/killbill/billing/overdue/applicator/formatters/TestDefaultBillingStateFormatter.java 6(+4 -2)
Details
diff --git a/api/src/main/java/org/killbill/billing/entitlement/EventsStream.java b/api/src/main/java/org/killbill/billing/entitlement/EventsStream.java
index be4eac4..f29f04e 100644
--- a/api/src/main/java/org/killbill/billing/entitlement/EventsStream.java
+++ b/api/src/main/java/org/killbill/billing/entitlement/EventsStream.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -20,9 +22,7 @@ import java.util.Collection;
import java.util.UUID;
import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
-
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.entitlement.api.BlockingState;
import org.killbill.billing.entitlement.api.Entitlement.EntitlementState;
@@ -32,8 +32,6 @@ public interface EventsStream {
UUID getAccountId();
- DateTimeZone getAccountTimeZone();
-
UUID getBundleId();
String getBundleExternalKey();
diff --git a/api/src/main/java/org/killbill/billing/junction/BillingEvent.java b/api/src/main/java/org/killbill/billing/junction/BillingEvent.java
index 4e32345..dfbe4f6 100644
--- a/api/src/main/java/org/killbill/billing/junction/BillingEvent.java
+++ b/api/src/main/java/org/killbill/billing/junction/BillingEvent.java
@@ -1,7 +1,9 @@
/*
- * Copyright 2010-2011 Ning, Inc.
+ * Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -18,22 +20,16 @@ package org.killbill.billing.junction;
import java.math.BigDecimal;
import java.util.List;
-import java.util.Set;
import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-
-import org.joda.time.LocalDate;
-import org.killbill.billing.account.api.Account;
-import org.killbill.billing.catalog.api.BillingMode;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.catalog.api.Plan;
import org.killbill.billing.catalog.api.PlanPhase;
import org.killbill.billing.catalog.api.Usage;
-import org.killbill.billing.subscription.api.SubscriptionBaseTransitionType;
import org.killbill.billing.subscription.api.SubscriptionBase;
+import org.killbill.billing.subscription.api.SubscriptionBaseTransitionType;
public interface BillingEvent extends Comparable<BillingEvent> {
@@ -101,11 +97,6 @@ public interface BillingEvent extends Comparable<BillingEvent> {
Long getTotalOrdering();
/**
- * @return the TimeZone of the account
- */
- DateTimeZone getTimeZone();
-
- /**
*
* @return the list of {@code Usage} section
*/
diff --git a/api/src/main/java/org/killbill/billing/overdue/applicator/formatters/BillingStateFormatter.java b/api/src/main/java/org/killbill/billing/overdue/applicator/formatters/BillingStateFormatter.java
index cfa2705..e33c7ba 100644
--- a/api/src/main/java/org/killbill/billing/overdue/applicator/formatters/BillingStateFormatter.java
+++ b/api/src/main/java/org/killbill/billing/overdue/applicator/formatters/BillingStateFormatter.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -22,7 +24,7 @@ public abstract class BillingStateFormatter extends BillingState {
public BillingStateFormatter(final BillingState billingState) {
super(billingState.getObjectId(), billingState.getNumberOfUnpaidInvoices(), billingState.getBalanceOfUnpaidInvoices(),
- billingState.getDateOfEarliestUnpaidInvoice(), billingState.getAccountTimeZone(), billingState.getIdOfEarliestUnpaidInvoice(),
+ billingState.getDateOfEarliestUnpaidInvoice(), billingState.getIdOfEarliestUnpaidInvoice(),
billingState.getResponseForLastFailedPayment(), billingState.getTags());
}
diff --git a/api/src/main/java/org/killbill/billing/overdue/config/api/BillingState.java b/api/src/main/java/org/killbill/billing/overdue/config/api/BillingState.java
index dfdc986..fa78e0f 100644
--- a/api/src/main/java/org/killbill/billing/overdue/config/api/BillingState.java
+++ b/api/src/main/java/org/killbill/billing/overdue/config/api/BillingState.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014-2016 Groupon, Inc
- * Copyright 2014-2016 The Billing Project, LLC
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -22,9 +22,7 @@ import java.math.BigDecimal;
import java.util.Arrays;
import java.util.UUID;
-import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
-
import org.killbill.billing.payment.api.PaymentResponse;
import org.killbill.billing.util.tag.Tag;
@@ -34,7 +32,6 @@ public class BillingState {
private final int numberOfUnpaidInvoices;
private final BigDecimal balanceOfUnpaidInvoices;
private final LocalDate dateOfEarliestUnpaidInvoice;
- private final DateTimeZone accountTimeZone;
private final UUID idOfEarliestUnpaidInvoice;
private final PaymentResponse responseForLastFailedPayment;
private final Tag[] tags;
@@ -43,7 +40,6 @@ public class BillingState {
final int numberOfUnpaidInvoices,
final BigDecimal balanceOfUnpaidInvoices,
final LocalDate dateOfEarliestUnpaidInvoice,
- final DateTimeZone accountTimeZone,
final UUID idOfEarliestUnpaidInvoice,
final PaymentResponse responseForLastFailedPayment,
final Tag[] tags) {
@@ -51,7 +47,6 @@ public class BillingState {
this.numberOfUnpaidInvoices = numberOfUnpaidInvoices;
this.balanceOfUnpaidInvoices = balanceOfUnpaidInvoices;
this.dateOfEarliestUnpaidInvoice = dateOfEarliestUnpaidInvoice;
- this.accountTimeZone = accountTimeZone;
this.idOfEarliestUnpaidInvoice = idOfEarliestUnpaidInvoice;
this.responseForLastFailedPayment = responseForLastFailedPayment;
this.tags = tags;
@@ -85,10 +80,6 @@ public class BillingState {
return tags;
}
- public DateTimeZone getAccountTimeZone() {
- return accountTimeZone;
- }
-
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("BillingState{");
@@ -96,7 +87,6 @@ public class BillingState {
sb.append(", numberOfUnpaidInvoices=").append(numberOfUnpaidInvoices);
sb.append(", balanceOfUnpaidInvoices=").append(balanceOfUnpaidInvoices);
sb.append(", dateOfEarliestUnpaidInvoice=").append(dateOfEarliestUnpaidInvoice);
- sb.append(", accountTimeZone=").append(accountTimeZone);
sb.append(", idOfEarliestUnpaidInvoice=").append(idOfEarliestUnpaidInvoice);
sb.append(", responseForLastFailedPayment=").append(responseForLastFailedPayment);
sb.append(", tags=").append(Arrays.toString(tags));
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlement.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlement.java
index 95cad6d..ad4fcc5 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlement.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlement.java
@@ -297,7 +297,7 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
// Get the latest state from disk - required to have the latest CTD
refresh(callContext);
- final LocalDate cancellationDate = getLocalDateFromEntitlementPolicy(entitlementPolicy);
+ final LocalDate cancellationDate = getLocalDateFromEntitlementPolicy(entitlementPolicy, callContext);
return cancelEntitlementWithDate(cancellationDate, false, properties, callContext);
}
@@ -450,7 +450,7 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
// Get the latest state from disk - required to have the latest CTD
refresh(callContext);
- final LocalDate cancellationDate = getLocalDateFromEntitlementPolicy(entitlementPolicy);
+ final LocalDate cancellationDate = getLocalDateFromEntitlementPolicy(entitlementPolicy, callContext);
return cancelEntitlementWithDateOverrideBillingPolicy(cancellationDate, billingPolicy, properties, callContext);
}
@@ -515,18 +515,19 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
return pluginExecution.executeWithPlugin(cancelEntitlementWithPlugin, pluginContext);
}
- private LocalDate getLocalDateFromEntitlementPolicy(final EntitlementActionPolicy entitlementPolicy) {
+ private LocalDate getLocalDateFromEntitlementPolicy(final EntitlementActionPolicy entitlementPolicy, final TenantContext tenantContext) {
+ final InternalTenantContext internalTenantContext = internalCallContextFactory.createInternalTenantContext(getAccountId(), tenantContext);
final LocalDate cancellationDate;
switch (entitlementPolicy) {
case IMMEDIATE:
- cancellationDate = clock.getToday(eventsStream.getAccountTimeZone());
+ cancellationDate = internalTenantContext.toLocalDate(clock.getUTCNow());
break;
case END_OF_TERM:
if (getSubscriptionBase().getChargedThroughDate() != null) {
cancellationDate = internalTenantContext.toLocalDate(getSubscriptionBase().getChargedThroughDate());
} else {
- cancellationDate = clock.getToday(eventsStream.getAccountTimeZone());
+ cancellationDate = internalTenantContext.toLocalDate(clock.getUTCNow());
}
break;
default:
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultSubscriptionApi.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultSubscriptionApi.java
index 1ea62df..9035ffe 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultSubscriptionApi.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultSubscriptionApi.java
@@ -280,7 +280,7 @@ public class DefaultSubscriptionApi implements SubscriptionApi {
}
- final LocalDate effectiveDate = new LocalDate(clock.getUTCNow(), account.getTimeZone());
+ final LocalDate effectiveDate = internalCallContext.toLocalDate(clock.getUTCNow());
final BaseEntitlementWithAddOnsSpecifier baseEntitlementWithAddOnsSpecifier = new DefaultBaseEntitlementWithAddOnsSpecifier(
bundleId,
newExternalKey,
@@ -425,11 +425,11 @@ public class DefaultSubscriptionApi implements SubscriptionApi {
}
}) : filteredByTypes;
- final LocalDate localDateNowInAccountTimezone = new LocalDate(clock.getUTCNow(), account.getTimeZone());
+ final LocalDate localDateNowInAccountTimezone = internalTenantContextWithValidAccountRecordId.toLocalDate(clock.getUTCNow());
final List<BlockingState> result = new ArrayList<BlockingState>();
for (final BlockingState cur : filteredByTypesAndSvcs) {
- final LocalDate eventDate = new LocalDate(cur.getEffectiveDate(), account.getTimeZone());
+ final LocalDate eventDate = internalTenantContextWithValidAccountRecordId.toLocalDate(cur.getEffectiveDate());
final int comp = eventDate.compareTo(localDateNowInAccountTimezone);
if ((comp <= 1 && ((timeFilter & SubscriptionApi.PAST_EVENTS) == SubscriptionApi.PAST_EVENTS)) ||
(comp == 0 && ((timeFilter & SubscriptionApi.PRESENT_EVENTS) == SubscriptionApi.PRESENT_EVENTS)) ||
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/EntitlementDateHelper.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/EntitlementDateHelper.java
index 21845a5..2f52230 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/EntitlementDateHelper.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/EntitlementDateHelper.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014-2016 Groupon, Inc
- * Copyright 2014-2016 The Billing Project, LLC
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -21,7 +21,6 @@ package org.killbill.billing.entitlement.api;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.clock.Clock;
@@ -38,24 +37,8 @@ public class EntitlementDateHelper {
return requestedDate == null ? clock.getUTCNow() : callContext.toUTCDateTime(requestedDate);
}
-
public DateTime fromLocalDateAndReferenceTimeWithMinimum(@Nullable final LocalDate requestedDate, final DateTime min, final InternalTenantContext callContext) throws EntitlementApiException {
final DateTime candidate = fromLocalDateAndReferenceTime(requestedDate, callContext);
return candidate.compareTo(min) < 0 ? min : candidate;
}
-
- /**
- * Check if the date portion of a date/time is before or equals at now (as returned by the clock).
- *
- * @param inputDate the fully qualified DateTime
- * @param accountTimeZone the account timezone
- * @param internalTenantContext the context
- * @return true if the inputDate, once converted into a LocalDate using account timezone is less or equals than today
- */
- // TODO Move to ClockUtils
- public boolean isBeforeOrEqualsToday(final DateTime inputDate, final DateTimeZone accountTimeZone, final InternalTenantContext internalTenantContext) {
- final LocalDate localDateNowInAccountTimezone = clock.getToday(accountTimeZone);
- final LocalDate targetDateInAccountTimezone = internalTenantContext.toLocalDate(inputDate);
- return targetDateInAccountTimezone.compareTo(localDateNowInAccountTimezone) <= 0;
- }
}
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java
index 3dedd89..de22aaf 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/svcs/DefaultEntitlementInternalApi.java
@@ -32,7 +32,6 @@ import javax.annotation.Nullable;
import javax.inject.Inject;
import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.AccountInternalApi;
@@ -102,15 +101,13 @@ public class DefaultEntitlementInternalApi extends DefaultEntitlementApiBase imp
return;
}
- int bcd = 0;
- DateTimeZone accountTimeZone = null;
+ int bcd;
try {
bcd = accountApi.getBCD(entitlements.iterator().next().getAccountId(), internalCallContext);
- accountTimeZone = accountApi.getImmutableAccountDataByRecordId(internalCallContext. getAccountRecordId(), internalCallContext).getTimeZone();
} catch (final AccountApiException e) {
throw new EntitlementApiException(e);
}
- Preconditions.checkState(bcd > 0 && accountTimeZone != null, "Unexpected condition where account info could not be retrieved");
+ Preconditions.checkState(bcd > 0, "Unexpected condition where account info could not be retrieved");
final CallContext callContext = internalCallContextFactory.createCallContext(internalCallContext);
@@ -157,7 +154,6 @@ public class DefaultEntitlementInternalApi extends DefaultEntitlementApiBase imp
final Callable<Void> preCallbacksCallback = new BulkSubscriptionBaseCancellation(subscriptions,
billingPolicy,
- accountTimeZone,
bcd,
internalCallContext);
@@ -190,18 +186,15 @@ public class DefaultEntitlementInternalApi extends DefaultEntitlementApiBase imp
private final Iterable<SubscriptionBase> subscriptions;
private final BillingActionPolicy billingPolicy;
- private final DateTimeZone accountTimeZone;
private final int accountBillCycleDayLocal;
private final InternalCallContext callContext;
public BulkSubscriptionBaseCancellation(final Iterable<SubscriptionBase> subscriptions,
final BillingActionPolicy billingPolicy,
- final DateTimeZone accountTimeZone,
final int accountBillCycleDayLocal,
final InternalCallContext callContext) {
this.subscriptions = subscriptions;
this.billingPolicy = billingPolicy;
- this.accountTimeZone = accountTimeZone;
this.accountBillCycleDayLocal = accountBillCycleDayLocal;
this.callContext = callContext;
}
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java b/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
index eded306..27d9591 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/engine/core/DefaultEventsStream.java
@@ -27,7 +27,6 @@ import java.util.UUID;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.killbill.billing.account.api.ImmutableAccountData;
import org.killbill.billing.callcontext.InternalTenantContext;
@@ -70,6 +69,7 @@ public class DefaultEventsStream implements EventsStream {
private final List<SubscriptionBase> allSubscriptionsForBundle;
private final InternalTenantContext internalTenantContext;
private final DateTime utcNow;
+ private final LocalDate utcToday;
private final int defaultBillCycleDayLocal;
private BlockingAggregator blockingAggregator;
@@ -100,16 +100,12 @@ public class DefaultEventsStream implements EventsStream {
this.defaultBillCycleDayLocal = defaultBillCycleDayLocal;
this.internalTenantContext = contextWithValidAccountRecordId;
this.utcNow = utcNow;
+ this.utcToday = contextWithValidAccountRecordId.toLocalDate(utcNow);
setup();
}
@Override
- public DateTimeZone getAccountTimeZone() {
- return account.getTimeZone();
- }
-
- @Override
public UUID getAccountId() {
return account.getId();
}
@@ -462,7 +458,7 @@ public class DefaultEventsStream implements EventsStream {
if (entitlementEffectiveEndDate != null && entitlementEffectiveEndDate.compareTo(internalTenantContext.toLocalDate(utcNow)) <= 0) {
entitlementState = EntitlementState.CANCELLED;
} else {
- if (entitlementEffectiveStartDate.compareTo(new LocalDate(utcNow, account.getTimeZone())) > 0) {
+ if (entitlementEffectiveStartDate.compareTo(utcToday) > 0) {
entitlementState = EntitlementState.PENDING;
} else {
// Gather states across all services and check if one of them is set to 'blockEntitlement'
diff --git a/entitlement/src/test/java/org/killbill/billing/entitlement/api/TestEntitlementDateHelper.java b/entitlement/src/test/java/org/killbill/billing/entitlement/api/TestEntitlementDateHelper.java
index 07ddabf..3c4b79f 100644
--- a/entitlement/src/test/java/org/killbill/billing/entitlement/api/TestEntitlementDateHelper.java
+++ b/entitlement/src/test/java/org/killbill/billing/entitlement/api/TestEntitlementDateHelper.java
@@ -26,6 +26,7 @@ import org.joda.time.LocalDate;
import org.killbill.billing.GuicyKillbillTestSuiteNoDB;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountApiException;
+import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.entitlement.EntitlementTestSuiteNoDB;
import org.killbill.billing.mock.MockAccountBuilder;
import org.testng.Assert;
@@ -124,7 +125,21 @@ public class TestEntitlementDateHelper extends EntitlementTestSuiteNoDB {
// Check that our input date is greater than now
assertTrue(inputDateEquals.compareTo(clock.getUTCNow()) > 0);
// And yet since the LocalDate match the function returns true
- assertTrue(dateHelper.isBeforeOrEqualsToday(inputDateEquals, timeZoneUtcMinus8, internalCallContext));
+ assertTrue(isBeforeOrEqualsToday(inputDateEquals, timeZoneUtcMinus8, internalCallContext));
+ }
+
+ /**
+ * Check if the date portion of a date/time is before or equals at now (as returned by the clock).
+ *
+ * @param inputDate the fully qualified DateTime
+ * @param accountTimeZone the account timezone
+ * @param internalTenantContext the context
+ * @return true if the inputDate, once converted into a LocalDate using account timezone is less or equals than today
+ */
+ private boolean isBeforeOrEqualsToday(final DateTime inputDate, final DateTimeZone accountTimeZone, final InternalTenantContext internalTenantContext) {
+ final LocalDate localDateNowInAccountTimezone = clock.getToday(accountTimeZone);
+ final LocalDate targetDateInAccountTimezone = internalTenantContext.toLocalDate(inputDate);
+ return targetDateInAccountTimezone.compareTo(localDateNowInAccountTimezone) <= 0;
}
private void createAccount(final DateTimeZone dateTimeZone, final DateTime referenceDateTime) throws AccountApiException {
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/TestInvoiceHelper.java b/invoice/src/test/java/org/killbill/billing/invoice/TestInvoiceHelper.java
index 06ee314..dc90d85 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/TestInvoiceHelper.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/TestInvoiceHelper.java
@@ -408,11 +408,6 @@ public class TestInvoiceHelper {
}
@Override
- public DateTimeZone getTimeZone() {
- return DateTimeZone.UTC;
- }
-
- @Override
public List<Usage> getUsages() {
return Collections.emptyList();
}
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/usage/TestUsageInArrearBase.java b/invoice/src/test/java/org/killbill/billing/invoice/usage/TestUsageInArrearBase.java
index d766b3a..a5a3275 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/usage/TestUsageInArrearBase.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/usage/TestUsageInArrearBase.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2016 Groupon, Inc
- * Copyright 2014-2016 The Billing Project, LLC
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -136,7 +136,6 @@ public abstract class TestUsageInArrearBase extends InvoiceTestSuiteNoDB {
final BillingEvent result = Mockito.mock(BillingEvent.class);
Mockito.when(result.getCurrency()).thenReturn(Currency.BTC);
Mockito.when(result.getBillCycleDayLocal()).thenReturn(BCD);
- Mockito.when(result.getTimeZone()).thenReturn(DateTimeZone.UTC);
Mockito.when(result.getEffectiveDate()).thenReturn(effectiveDate);
Mockito.when(result.getBillingPeriod()).thenReturn(billingPeriod);
diff --git a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java
index cf7507e..724e307 100644
--- a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java
+++ b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/BlockingCalculator.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2016 Groupon, Inc
- * Copyright 2014-2016 The Billing Project, LLC
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -33,7 +33,6 @@ import java.util.concurrent.atomic.AtomicLong;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
import org.joda.time.Days;
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.catalog.api.BillingPeriod;
@@ -274,12 +273,11 @@ public class BlockingCalculator {
final String description = "";
final SubscriptionBaseTransitionType type = SubscriptionBaseTransitionType.START_BILLING_DISABLED;
final Long totalOrdering = globaltotalOrder.getAndIncrement();
- final DateTimeZone tz = previousEvent.getTimeZone();
return new DefaultBillingEvent(subscription, effectiveDate, true, plan, planPhase, fixedPrice,
currency,
billingPeriod, billCycleDay,
- description, totalOrdering, type, tz, catalog, true);
+ description, totalOrdering, type, catalog, true);
}
protected BillingEvent createNewReenableEvent(final DateTime odEventTime, final BillingEvent previousEvent, final Catalog catalog, final InternalTenantContext context) throws CatalogApiException {
@@ -295,12 +293,11 @@ public class BlockingCalculator {
final BillingPeriod billingPeriod = previousEvent.getBillingPeriod();
final SubscriptionBaseTransitionType type = SubscriptionBaseTransitionType.END_BILLING_DISABLED;
final Long totalOrdering = globaltotalOrder.getAndIncrement();
- final DateTimeZone tz = previousEvent.getTimeZone();
return new DefaultBillingEvent(subscription, effectiveDate, true, plan, planPhase, fixedPrice,
currency,
billingPeriod, billCycleDay,
- description, totalOrdering, type, tz, catalog, false);
+ description, totalOrdering, type, catalog, false);
}
protected Hashtable<UUID, List<SubscriptionBase>> createBundleSubscriptionMap(final SortedSet<BillingEvent> billingEvents) {
diff --git a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultBillingEvent.java b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultBillingEvent.java
index 9b500aa..5c66e3c 100644
--- a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultBillingEvent.java
+++ b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultBillingEvent.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -22,8 +24,6 @@ import java.util.List;
import javax.annotation.Nullable;
import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.killbill.billing.account.api.ImmutableAccountData;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogApiException;
@@ -52,7 +52,6 @@ public class DefaultBillingEvent implements BillingEvent {
private final BillingPeriod billingPeriod;
private final SubscriptionBaseTransitionType type;
private final Long totalOrdering;
- private final DateTimeZone timeZone;
private final List<Usage> usages;
@@ -60,7 +59,7 @@ public class DefaultBillingEvent implements BillingEvent {
private final boolean isDisableEvent;
private final PlanPhase nextPlanPhase;
- public DefaultBillingEvent(final ImmutableAccountData account, final EffectiveSubscriptionInternalEvent transition, final SubscriptionBase subscription, final int billCycleDayLocal, final Currency currency, final Catalog catalog) throws CatalogApiException {
+ public DefaultBillingEvent(final EffectiveSubscriptionInternalEvent transition, final SubscriptionBase subscription, final int billCycleDayLocal, final Currency currency, final Catalog catalog) throws CatalogApiException {
this.catalog = catalog;
@@ -87,7 +86,6 @@ public class DefaultBillingEvent implements BillingEvent {
this.billingPeriod = getRecurringBillingPeriod(isActive ? nextPlanPhase : prevPlanPhase);
this.type = transition.getTransitionType();
this.totalOrdering = transition.getTotalOrdering();
- this.timeZone = account.getTimeZone();
this.usages = initializeUsage(isActive);
this.isDisableEvent = false;
}
@@ -96,7 +94,7 @@ public class DefaultBillingEvent implements BillingEvent {
final Plan plan, final PlanPhase planPhase, final BigDecimal fixedPrice,
final Currency currency,
final BillingPeriod billingPeriod, final int billCycleDayLocal,
- final String description, final long totalOrdering, final SubscriptionBaseTransitionType type, final DateTimeZone timeZone,
+ final String description, final long totalOrdering, final SubscriptionBaseTransitionType type,
final Catalog catalog,
final boolean isDisableEvent) {
this.catalog = catalog;
@@ -111,7 +109,6 @@ public class DefaultBillingEvent implements BillingEvent {
this.description = description;
this.type = type;
this.totalOrdering = totalOrdering;
- this.timeZone = timeZone;
this.usages = initializeUsage(isActive);
this.isDisableEvent = isDisableEvent;
this.nextPlanPhase = isDisableEvent ? null : planPhase;
@@ -228,11 +225,6 @@ public class DefaultBillingEvent implements BillingEvent {
}
@Override
- public DateTimeZone getTimeZone() {
- return timeZone;
- }
-
- @Override
public List<Usage> getUsages() {
return usages;
}
@@ -290,9 +282,6 @@ public class DefaultBillingEvent implements BillingEvent {
if (subscription != null ? !subscription.equals(that.subscription) : that.subscription != null) {
return false;
}
- if (timeZone != null ? !timeZone.equals(that.timeZone) : that.timeZone != null) {
- return false;
- }
if (totalOrdering != null ? !totalOrdering.equals(that.totalOrdering) : that.totalOrdering != null) {
return false;
}
@@ -316,7 +305,6 @@ public class DefaultBillingEvent implements BillingEvent {
result = 31 * result + (billingPeriod != null ? billingPeriod.hashCode() : 0);
result = 31 * result + (type != null ? type.hashCode() : 0);
result = 31 * result + (totalOrdering != null ? totalOrdering.hashCode() : 0);
- result = 31 * result + (timeZone != null ? timeZone.hashCode() : 0);
return result;
}
diff --git a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
index e2d15e5..9931316 100644
--- a/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
+++ b/junction/src/main/java/org/killbill/billing/junction/plumbing/billing/DefaultInternalBillingApi.java
@@ -218,7 +218,7 @@ public class DefaultInternalBillingApi implements BillingInternalApi {
updatedAccountBCD = true;
}
- final BillingEvent event = new DefaultBillingEvent(account, transition, subscription, bcdLocal, account.getCurrency(), catalog);
+ final BillingEvent event = new DefaultBillingEvent(transition, subscription, bcdLocal, account.getCurrency(), catalog);
result.add(event);
}
}
diff --git a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java
index e8f80d2..2d17bdc 100644
--- a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java
+++ b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBlockingCalculator.java
@@ -560,7 +560,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
return new DefaultBillingEvent(subscription, effectiveDate, true, plan, planPhase, fixedPrice,
currency,
billingPeriod, billCycleDay,
- description, totalOrdering, type, tz, null, false);
+ description, totalOrdering, type, null, false);
} catch (final CatalogApiException e) {
Assert.fail("", e);
@@ -633,7 +633,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
public MockBillingEvent() {
super(subscription1, clock.getUTCNow(), true, null, null, BigDecimal.ZERO, Currency.USD, BillingPeriod.ANNUAL,
- 4, "", 3L, SubscriptionBaseTransitionType.CREATE, DateTimeZone.UTC, null, false);
+ 4, "", 3L, SubscriptionBaseTransitionType.CREATE, null, false);
}
}
diff --git a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestDefaultBillingEvent.java b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
index 98252a9..e146464 100644
--- a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
+++ b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
@@ -189,7 +189,7 @@ public class TestDefaultBillingEvent extends JunctionTestSuiteNoDB {
return new DefaultBillingEvent(sub, effectiveDate, true,
shotgun, shotgunMonthly, BigDecimal.ZERO,
Currency.USD, BillingPeriod.NO_BILLING_PERIOD, billCycleDay,
- "Test Event 1", totalOrdering, type, DateTimeZone.UTC, null, false);
+ "Test Event 1", totalOrdering, type, null, false);
}
private MockPlanPhase createMockMonthlyPlanPhase(@Nullable final BigDecimal recurringRate,
diff --git a/overdue/src/main/java/org/killbill/billing/overdue/calculator/BillingStateCalculator.java b/overdue/src/main/java/org/killbill/billing/overdue/calculator/BillingStateCalculator.java
index d1bec8d..5c2a254 100644
--- a/overdue/src/main/java/org/killbill/billing/overdue/calculator/BillingStateCalculator.java
+++ b/overdue/src/main/java/org/killbill/billing/overdue/calculator/BillingStateCalculator.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -25,7 +27,6 @@ import java.util.SortedSet;
import java.util.TreeSet;
import java.util.UUID;
-import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.ImmutableAccountData;
@@ -68,7 +69,7 @@ public class BillingStateCalculator {
}
public BillingState calculateBillingState(final ImmutableAccountData account, final InternalTenantContext context) throws OverdueException {
- final SortedSet<Invoice> unpaidInvoices = unpaidInvoicesForAccount(account.getId(), account.getTimeZone(), context);
+ final SortedSet<Invoice> unpaidInvoices = unpaidInvoicesForAccount(account.getId(), context);
final int numberOfUnpaidInvoices = unpaidInvoices.size();
final BigDecimal unpaidInvoiceBalance = sumBalance(unpaidInvoices);
@@ -83,7 +84,7 @@ public class BillingStateCalculator {
final List<Tag> accountTags = tagApi.getTags(account.getId(), ObjectType.ACCOUNT, context);
final Tag[] tags = accountTags.toArray(new Tag[accountTags.size()]);
- return new BillingState(account.getId(), numberOfUnpaidInvoices, unpaidInvoiceBalance, dateOfEarliestUnpaidInvoice, account.getTimeZone(), idOfEarliestUnpaidInvoice, responseForLastFailedPayment, tags);
+ return new BillingState(account.getId(), numberOfUnpaidInvoices, unpaidInvoiceBalance, dateOfEarliestUnpaidInvoice, idOfEarliestUnpaidInvoice, responseForLastFailedPayment, tags);
}
// Package scope for testing
@@ -103,8 +104,8 @@ public class BillingStateCalculator {
return sum;
}
- SortedSet<Invoice> unpaidInvoicesForAccount(final UUID accountId, final DateTimeZone accountTimeZone, final InternalTenantContext context) {
- final Collection<Invoice> invoices = invoiceApi.getUnpaidInvoicesByAccountId(accountId, clock.getToday(accountTimeZone), context);
+ SortedSet<Invoice> unpaidInvoicesForAccount(final UUID accountId, final InternalTenantContext context) {
+ final Collection<Invoice> invoices = invoiceApi.getUnpaidInvoicesByAccountId(accountId, context.toLocalDate(clock.getUTCNow()), context);
final SortedSet<Invoice> sortedInvoices = new TreeSet<Invoice>(new InvoiceDateComparator());
sortedInvoices.addAll(invoices);
return sortedInvoices;
diff --git a/overdue/src/main/java/org/killbill/billing/overdue/wrapper/OverdueWrapper.java b/overdue/src/main/java/org/killbill/billing/overdue/wrapper/OverdueWrapper.java
index 56db945..11481f9 100644
--- a/overdue/src/main/java/org/killbill/billing/overdue/wrapper/OverdueWrapper.java
+++ b/overdue/src/main/java/org/killbill/billing/overdue/wrapper/OverdueWrapper.java
@@ -104,7 +104,7 @@ public class OverdueWrapper {
final BlockingState blockingStateForService = api.getBlockingStateForService(overdueable.getId(), BlockingStateType.ACCOUNT, OverdueService.OVERDUE_SERVICE_NAME, context);
final String previousOverdueStateName = blockingStateForService != null ? blockingStateForService.getStateName() : OverdueWrapper.CLEAR_STATE_NAME;
final OverdueState currentOverdueState = overdueStateSet.findState(previousOverdueStateName);
- final OverdueState nextOverdueState = overdueStateSet.calculateOverdueState(billingState, clock.getToday(billingState.getAccountTimeZone()));
+ final OverdueState nextOverdueState = overdueStateSet.calculateOverdueState(billingState, context.toLocalDate(clock.getUTCNow()));
overdueStateApplicator.apply(effectiveDate, overdueStateSet, billingState, overdueable, currentOverdueState, nextOverdueState, context);
diff --git a/overdue/src/test/java/org/killbill/billing/overdue/applicator/formatters/TestDefaultBillingStateFormatter.java b/overdue/src/test/java/org/killbill/billing/overdue/applicator/formatters/TestDefaultBillingStateFormatter.java
index 4894535..8a2746f 100644
--- a/overdue/src/test/java/org/killbill/billing/overdue/applicator/formatters/TestDefaultBillingStateFormatter.java
+++ b/overdue/src/test/java/org/killbill/billing/overdue/applicator/formatters/TestDefaultBillingStateFormatter.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -32,7 +34,7 @@ public class TestDefaultBillingStateFormatter extends OverdueTestSuiteNoDB {
@Test(groups = "fast")
public void testBalanceFormatting() throws Exception {
final BillingState billingState = new BillingState(UUID.randomUUID(), 2, BigDecimal.TEN,
- new LocalDate(), DateTimeZone.UTC, UUID.randomUUID(),
+ new LocalDate(), UUID.randomUUID(),
null, null);
final DefaultBillingStateFormatter formatter = new DefaultBillingStateFormatter(billingState);
Assert.assertEquals(formatter.getFormattedBalanceOfUnpaidInvoices(), "10.00");
diff --git a/overdue/src/test/java/org/killbill/billing/overdue/calculator/TestBillingStateCalculator.java b/overdue/src/test/java/org/killbill/billing/overdue/calculator/TestBillingStateCalculator.java
index a5db764..0ac1feb 100644
--- a/overdue/src/test/java/org/killbill/billing/overdue/calculator/TestBillingStateCalculator.java
+++ b/overdue/src/test/java/org/killbill/billing/overdue/calculator/TestBillingStateCalculator.java
@@ -82,7 +82,7 @@ public class TestBillingStateCalculator extends OverdueTestSuiteNoDB {
@Test(groups = "fast")
public void testUnpaidInvoices() {
final BillingStateCalculator calc = createBSCalc();
- final SortedSet<Invoice> invoices = calc.unpaidInvoicesForAccount(new UUID(0L, 0L), DateTimeZone.UTC, internalCallContext);
+ final SortedSet<Invoice> invoices = calc.unpaidInvoicesForAccount(new UUID(0L, 0L), internalCallContext);
Assert.assertEquals(invoices.size(), 3);
Assert.assertEquals(BigDecimal.ZERO.compareTo(invoices.first().getBalance()), 0);
@@ -92,14 +92,14 @@ public class TestBillingStateCalculator extends OverdueTestSuiteNoDB {
@Test(groups = "fast")
public void testSum() {
final BillingStateCalculator calc = createBSCalc();
- final SortedSet<Invoice> invoices = calc.unpaidInvoicesForAccount(new UUID(0L, 0L), DateTimeZone.UTC, internalCallContext);
+ final SortedSet<Invoice> invoices = calc.unpaidInvoicesForAccount(new UUID(0L, 0L), internalCallContext);
Assert.assertEquals(new BigDecimal("110.0").compareTo(calc.sumBalance(invoices)), 0);
}
@Test(groups = "fast")
public void testEarliest() {
final BillingStateCalculator calc = createBSCalc();
- final SortedSet<Invoice> invoices = calc.unpaidInvoicesForAccount(new UUID(0L, 0L), DateTimeZone.UTC, internalCallContext);
+ final SortedSet<Invoice> invoices = calc.unpaidInvoicesForAccount(new UUID(0L, 0L), internalCallContext);
Assert.assertEquals(calc.earliest(invoices).getInvoiceDate(), now);
}
}
diff --git a/overdue/src/test/java/org/killbill/billing/overdue/config/TestCondition.java b/overdue/src/test/java/org/killbill/billing/overdue/config/TestCondition.java
index 99efef6..7eec4dd 100644
--- a/overdue/src/test/java/org/killbill/billing/overdue/config/TestCondition.java
+++ b/overdue/src/test/java/org/killbill/billing/overdue/config/TestCondition.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -54,11 +56,11 @@ public class TestCondition extends OverdueTestSuiteNoDB {
final UUID unpaidInvoiceId = UUID.randomUUID();
final BillingState state0 = new BillingState(new UUID(0L, 1L), 0, BigDecimal.ZERO, new LocalDate(),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
final BillingState state1 = new BillingState(new UUID(0L, 1L), 1, BigDecimal.ZERO, new LocalDate(),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
final BillingState state2 = new BillingState(new UUID(0L, 1L), 2, BigDecimal.ZERO, new LocalDate(),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
Assert.assertTrue(!c.evaluate(state0, new LocalDate()));
Assert.assertTrue(c.evaluate(state1, new LocalDate()));
@@ -76,11 +78,11 @@ public class TestCondition extends OverdueTestSuiteNoDB {
final UUID unpaidInvoiceId = UUID.randomUUID();
final BillingState state0 = new BillingState(new UUID(0L, 1L), 0, BigDecimal.ZERO, new LocalDate(),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
final BillingState state1 = new BillingState(new UUID(0L, 1L), 1, new BigDecimal("100.00"), new LocalDate(),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
final BillingState state2 = new BillingState(new UUID(0L, 1L), 1, new BigDecimal("200.00"), new LocalDate(),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
Assert.assertTrue(!c.evaluate(state0, new LocalDate()));
Assert.assertTrue(c.evaluate(state1, new LocalDate()));
@@ -100,11 +102,11 @@ public class TestCondition extends OverdueTestSuiteNoDB {
final LocalDate now = new LocalDate();
final BillingState state0 = new BillingState(new UUID(0L, 1L), 0, BigDecimal.ZERO, null,
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
final BillingState state1 = new BillingState(new UUID(0L, 1L), 1, new BigDecimal("100.00"), now.minusDays(10),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
final BillingState state2 = new BillingState(new UUID(0L, 1L), 1, new BigDecimal("200.00"), now.minusDays(20),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
Assert.assertTrue(!c.evaluate(state0, now));
Assert.assertTrue(c.evaluate(state1, now));
@@ -124,11 +126,11 @@ public class TestCondition extends OverdueTestSuiteNoDB {
final LocalDate now = new LocalDate();
final BillingState state0 = new BillingState(new UUID(0L, 1L), 0, BigDecimal.ZERO, null,
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.LOST_OR_STOLEN_CARD, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.LOST_OR_STOLEN_CARD, new Tag[]{});
final BillingState state1 = new BillingState(new UUID(0L, 1L), 1, new BigDecimal("100.00"), now.minusDays(10),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS, new Tag[]{});
final BillingState state2 = new BillingState(new UUID(0L, 1L), 1, new BigDecimal("200.00"), now.minusDays(20),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.DO_NOT_HONOR, new Tag[]{});
+ unpaidInvoiceId, PaymentResponse.DO_NOT_HONOR, new Tag[]{});
Assert.assertTrue(!c.evaluate(state0, now));
Assert.assertTrue(c.evaluate(state1, now));
@@ -151,16 +153,16 @@ public class TestCondition extends OverdueTestSuiteNoDB {
final UUID objectId = new UUID(0L, 1L);
final BillingState state0 = new BillingState(objectId, 0, BigDecimal.ZERO, null,
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.LOST_OR_STOLEN_CARD,
+ unpaidInvoiceId, PaymentResponse.LOST_OR_STOLEN_CARD,
new Tag[]{new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF, objectType, objectId, clock.getUTCNow()),
new DescriptiveTag(UUID.randomUUID(), objectType, objectId, clock.getUTCNow())});
final BillingState state1 = new BillingState(objectId, 1, new BigDecimal("100.00"), now.minusDays(10),
- DateTimeZone.UTC, unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS,
+ unpaidInvoiceId, PaymentResponse.INSUFFICIENT_FUNDS,
new Tag[]{new DefaultControlTag(ControlTagType.OVERDUE_ENFORCEMENT_OFF, objectType, objectId, clock.getUTCNow())});
final BillingState state2 = new BillingState(objectId, 1, new BigDecimal("200.00"), now.minusDays(20),
- DateTimeZone.UTC, unpaidInvoiceId,
+ unpaidInvoiceId,
PaymentResponse.DO_NOT_HONOR,
new Tag[]{new DefaultControlTag(ControlTagType.OVERDUE_ENFORCEMENT_OFF, objectType, objectId, clock.getUTCNow()),
new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF, objectType, objectId, clock.getUTCNow()),
diff --git a/util/src/test/java/org/killbill/billing/util/bcd/TestBillCycleDayCalculator.java b/util/src/test/java/org/killbill/billing/util/bcd/TestBillCycleDayCalculator.java
index 0c157dd..4e0fb54 100644
--- a/util/src/test/java/org/killbill/billing/util/bcd/TestBillCycleDayCalculator.java
+++ b/util/src/test/java/org/killbill/billing/util/bcd/TestBillCycleDayCalculator.java
@@ -22,12 +22,15 @@ import java.util.UUID;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
+import org.killbill.billing.GuicyKillbillTestSuiteNoDB;
+import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.account.api.ImmutableAccountData;
import org.killbill.billing.catalog.api.BillingAlignment;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.Plan;
+import org.killbill.billing.mock.MockAccountBuilder;
import org.killbill.billing.subscription.api.SubscriptionBase;
import org.killbill.billing.subscription.api.user.SubscriptionBaseBundle;
import org.killbill.billing.util.UtilTestSuiteNoDB;
@@ -68,6 +71,8 @@ public class TestBillCycleDayCalculator extends UtilTestSuiteNoDB {
final DateTime startDateUTC = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.UTC);
final int bcdLocal = 16;
+ createAccountAndRefreshTimeAwareContext(accountTimeZone, startDateUTC);
+
verifyBCDCalculation(accountTimeZone, startDateUTC, bcdLocal);
}
@@ -77,6 +82,8 @@ public class TestBillCycleDayCalculator extends UtilTestSuiteNoDB {
final DateTime startDateUTC = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.UTC);
final int bcdLocal = 16;
+ createAccountAndRefreshTimeAwareContext(accountTimeZone, startDateUTC);
+
verifyBCDCalculation(accountTimeZone, startDateUTC, bcdLocal);
}
@@ -86,6 +93,8 @@ public class TestBillCycleDayCalculator extends UtilTestSuiteNoDB {
final DateTime startDateUTC = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.UTC);
final int bcdLocal = 16;
+ createAccountAndRefreshTimeAwareContext(accountTimeZone, startDateUTC);
+
verifyBCDCalculation(accountTimeZone, startDateUTC, bcdLocal);
}
@@ -95,6 +104,8 @@ public class TestBillCycleDayCalculator extends UtilTestSuiteNoDB {
final DateTime startDateUTC = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.UTC);
final int bcdLocal = 17;
+ createAccountAndRefreshTimeAwareContext(accountTimeZone, startDateUTC);
+
verifyBCDCalculation(accountTimeZone, startDateUTC, bcdLocal);
}
@@ -104,6 +115,8 @@ public class TestBillCycleDayCalculator extends UtilTestSuiteNoDB {
final DateTime startDateUTC = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.UTC);
final int bcdLocal = 17;
+ createAccountAndRefreshTimeAwareContext(accountTimeZone, startDateUTC);
+
verifyBCDCalculation(accountTimeZone, startDateUTC, bcdLocal);
}
@@ -114,6 +127,8 @@ public class TestBillCycleDayCalculator extends UtilTestSuiteNoDB {
final DateTime startDate = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.forID("HST"));
final int bcdLocal = 17;
+ createAccountAndRefreshTimeAwareContext(accountTimeZone, startDate);
+
verifyBCDCalculation(accountTimeZone, startDate, bcdLocal);
}
@@ -128,4 +143,21 @@ public class TestBillCycleDayCalculator extends UtilTestSuiteNoDB {
final Integer bcd = BillCycleDayCalculator.calculateBcdForAlignment(new HashMap<UUID, Integer>(), subscription, subscription, BillingAlignment.SUBSCRIPTION, internalCallContext, 0);
Assert.assertEquals(bcd, (Integer) bcdLocal);
}
+
+ private void createAccountAndRefreshTimeAwareContext(final DateTimeZone dateTimeZone, final DateTime referenceDateTime) throws AccountApiException {
+ final Account accountData = new MockAccountBuilder().externalKey(UUID.randomUUID().toString())
+ .timeZone(dateTimeZone)
+ .createdDate(referenceDateTime)
+ .build();
+
+ GuicyKillbillTestSuiteNoDB.createMockAccount(accountData,
+ accountUserApi,
+ accountInternalApi,
+ immutableAccountInternalApi,
+ nonEntityDao,
+ clock,
+ internalCallContextFactory,
+ callContext,
+ internalCallContext);
+ }
}
diff --git a/util/src/test/java/org/killbill/billing/util/UtilTestSuiteNoDB.java b/util/src/test/java/org/killbill/billing/util/UtilTestSuiteNoDB.java
index ad802db..920e5cb 100644
--- a/util/src/test/java/org/killbill/billing/util/UtilTestSuiteNoDB.java
+++ b/util/src/test/java/org/killbill/billing/util/UtilTestSuiteNoDB.java
@@ -25,6 +25,9 @@ import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.util.Factory;
import org.apache.shiro.util.ThreadContext;
import org.killbill.billing.GuicyKillbillTestSuiteNoDB;
+import org.killbill.billing.account.api.AccountInternalApi;
+import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.account.api.ImmutableAccountInternalApi;
import org.killbill.billing.security.Permission;
import org.killbill.billing.security.api.SecurityApi;
import org.killbill.billing.util.api.AuditUserApi;
@@ -63,6 +66,12 @@ public class UtilTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
protected SecurityApi securityApi;
@Inject
protected KillBillJndiLdapRealm killBillJndiLdapRealm;
+ @Inject
+ protected AccountUserApi accountUserApi;
+ @Inject
+ protected AccountInternalApi accountInternalApi;
+ @Inject
+ protected ImmutableAccountInternalApi immutableAccountInternalApi;
@BeforeClass(groups = "fast")
public void beforeClass() throws Exception {