killbill-aplcache

invoice: See #501. Adjust the fix f7d3b80 for 0.17.x where api

2/29/2016 11:46:46 PM

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();