Details
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegration.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegration.java
index 37fa59a..acee264 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegration.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestIntegration.java
@@ -676,11 +676,11 @@ public class TestIntegration extends TestIntegrationBase {
// First invoice
- final DefaultEntitlement bpSubscription = createBaseEntitlementAndCheckForCompletion(account.getId(), "bundleKey", "Pistol", ProductCategory.BASE, BillingPeriod.MONTHLY, NextEvent.CREATE, /* NextEvent.BLOCK, */ NextEvent.INVOICE);
+ final DefaultEntitlement bpSubscription = createBaseEntitlementAndCheckForCompletion(account.getId(), "bundleKey", "Pistol", ProductCategory.BASE, BillingPeriod.MONTHLY, NextEvent.CREATE, NextEvent.BLOCK, NextEvent.INVOICE);
// Second invoice -> first recurring for Refurbish-Maintenance
- addAOEntitlementAndCheckForCompletion(bpSubscription.getBundleId(), "Refurbish-Maintenance", ProductCategory.ADD_ON, BillingPeriod.MONTHLY, NextEvent.CREATE, /* NextEvent.BLOCK, */ NextEvent.INVOICE, NextEvent.PAYMENT, NextEvent.INVOICE_PAYMENT);
+ addAOEntitlementAndCheckForCompletion(bpSubscription.getBundleId(), "Refurbish-Maintenance", ProductCategory.ADD_ON, BillingPeriod.MONTHLY, NextEvent.CREATE, NextEvent.BLOCK, NextEvent.INVOICE, NextEvent.PAYMENT, NextEvent.INVOICE_PAYMENT);
final List<ExpectedInvoiceItemCheck> expectedInvoices = new ArrayList<ExpectedInvoiceItemCheck>();
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
index 4c3ed6c..6fc145a 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
import org.joda.time.Period;
import org.killbill.billing.catalog.api.Duration;
@@ -73,9 +74,27 @@ public class DefaultDuration extends ValidatingConfig<StandaloneCatalog> impleme
case YEARS:
return dateTime.plusYears(number);
case UNLIMITED:
- return dateTime.plusYears(100);
default:
- return dateTime;
+ throw new IllegalStateException("Unexpected duration unit " + unit);
+ }
+ }
+
+ @Override
+ public LocalDate addToLocalDate(final LocalDate localDate) {
+ if ((number == null) && (unit != TimeUnit.UNLIMITED)) {
+ return localDate;
+ }
+
+ switch (unit) {
+ case DAYS:
+ return localDate.plusDays(number);
+ case MONTHS:
+ return localDate.plusMonths(number);
+ case YEARS:
+ return localDate.plusYears(number);
+ case UNLIMITED:
+ default:
+ throw new IllegalStateException("Unexpected duration unit " + unit);
}
}
diff --git a/invoice/src/main/java/org/killbill/billing/invoice/generator/FixedAndRecurringInvoiceItemGenerator.java b/invoice/src/main/java/org/killbill/billing/invoice/generator/FixedAndRecurringInvoiceItemGenerator.java
index 1ac8d6a..a733dd1 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/generator/FixedAndRecurringInvoiceItemGenerator.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/generator/FixedAndRecurringInvoiceItemGenerator.java
@@ -257,8 +257,7 @@ public class FixedAndRecurringInvoiceItemGenerator extends InvoiceItemGenerator
firstStartDate = matchItem.getStartDate();
}
- final LocalDate result = addDurationToLocalDate(firstStartDate, thisEvent.getPlanPhase().getDuration());
- return result;
+ return firstStartDate != null ? thisEvent.getPlanPhase().getDuration().addToLocalDate(firstStartDate) : null;
}
private void updatePerSubscriptionNextNotificationDate(final UUID subscriptionId, final LocalDate nextBillingCycleDate, final List<InvoiceItem> newProposedItems, final BillingMode billingMode, final Map<UUID, SubscriptionFutureNotificationDates> perSubscriptionFutureNotificationDates) {
@@ -404,26 +403,4 @@ public class FixedAndRecurringInvoiceItemGenerator extends InvoiceItemGenerator
}
}
}
-
- // That code should belong to Duration/DefaultDuration but requires a change api (not possible for 0.16.3, but will be moreved in 0.17.0)
- private LocalDate addDurationToLocalDate(@Nullable final LocalDate inputDate, final Duration duration) {
-
- if (inputDate == null) {
- return inputDate;
- }
-
- switch (duration.getUnit()) {
- case DAYS:
- return inputDate.plusDays(duration.getNumber());
- case MONTHS:
- return inputDate.plusMonths(duration.getNumber());
- case YEARS:
- return inputDate.plusYears(duration.getNumber());
- case UNLIMITED:
- return inputDate.plusYears(100);
- default:
- throw new IllegalStateException("Unknwon duration " + duration.getUnit());
- }
- }
-
}
diff --git a/overdue/src/main/java/org/killbill/billing/overdue/config/DefaultDuration.java b/overdue/src/main/java/org/killbill/billing/overdue/config/DefaultDuration.java
index 5528e14..d1d73c2 100644
--- a/overdue/src/main/java/org/killbill/billing/overdue/config/DefaultDuration.java
+++ b/overdue/src/main/java/org/killbill/billing/overdue/config/DefaultDuration.java
@@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
import org.joda.time.Period;
import org.killbill.billing.catalog.api.Duration;
@@ -62,13 +63,30 @@ public class DefaultDuration extends ValidatingConfig<DefaultOverdueConfig> impl
case YEARS:
return dateTime.plusYears(number);
case UNLIMITED:
- return dateTime.plusYears(100);
default:
- return dateTime;
+ throw new IllegalStateException("Unexpected duration unit " + unit);
}
}
@Override
+ public LocalDate addToLocalDate(final LocalDate localDate) {
+ if ((number == null) && (unit != TimeUnit.UNLIMITED)) {
+ return localDate;
+ }
+
+ switch (unit) {
+ case DAYS:
+ return localDate.plusDays(number);
+ case MONTHS:
+ return localDate.plusMonths(number);
+ case YEARS:
+ return localDate.plusYears(number);
+ case UNLIMITED:
+ default:
+ throw new IllegalStateException("Unexpected duration unit " + unit);
+ }
+ }
+ @Override
public Period toJodaPeriod() {
if ((number == null) && (unit != TimeUnit.UNLIMITED)) {
return new Period();
@@ -82,9 +100,8 @@ public class DefaultDuration extends ValidatingConfig<DefaultOverdueConfig> impl
case YEARS:
return new Period().withYears(number);
case UNLIMITED:
- return new Period().withYears(100);
default:
- return new Period();
+ throw new IllegalStateException("Unexpected duration unit " + unit);
}
}
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java
index ae0a0b2..d93ee18 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestSubscriptionHelper.java
@@ -26,6 +26,7 @@ import javax.annotation.Nullable;
import javax.inject.Inject;
import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
import org.joda.time.Period;
import org.killbill.billing.account.api.AccountUserApi;
import org.killbill.billing.api.TestApiListener;
@@ -144,9 +145,12 @@ public class TestSubscriptionHelper {
@Override
public DateTime addToDateTime(final DateTime dateTime) {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ return null;
+ }
+ @Override
+ public LocalDate addToLocalDate(final LocalDate localDate) {
+ return null;
}
-
@Override
public Period toJodaPeriod() {
throw new UnsupportedOperationException();