killbill-memoizeit

junction: add another test for BillCycleDayCalculator Signed-off-by:

7/16/2012 10:43:51 PM

Details

diff --git a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
index d056725..fb8998e 100644
--- a/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
+++ b/junction/src/main/java/com/ning/billing/junction/plumbing/billing/BillCycleDayCalculator.java
@@ -52,7 +52,6 @@ public class BillCycleDayCalculator {
 
     @Inject
     public BillCycleDayCalculator(final CatalogService catalogService, final EntitlementUserApi entitlementApi) {
-        super();
         this.catalogService = catalogService;
         this.entitlementApi = entitlementApi;
     }
@@ -81,6 +80,12 @@ public class BillCycleDayCalculator {
                                        phase.getPhaseType()),
                 transition.getRequestedTransitionTime());
 
+        return calculateBcdForAlignment(alignment, bundle, subscription, account, catalog, plan);
+    }
+
+    @VisibleForTesting
+    BillCycleDay calculateBcdForAlignment(final BillingAlignment alignment, final SubscriptionBundle bundle, final Subscription subscription,
+                                          final Account account, final Catalog catalog, final Plan plan) throws AccountApiException, EntitlementUserApiException, CatalogApiException {
         BillCycleDay result = null;
         switch (alignment) {
             case ACCOUNT:
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
index 8bc0293..b5b327a 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
@@ -16,6 +16,8 @@
 
 package com.ning.billing.junction.plumbing.billing;
 
+import java.util.UUID;
+
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.mockito.Mockito;
@@ -25,14 +27,52 @@ import org.testng.annotations.Test;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
 import com.ning.billing.account.api.BillCycleDay;
+import com.ning.billing.catalog.api.BillingAlignment;
+import com.ning.billing.catalog.api.Catalog;
 import com.ning.billing.catalog.api.CatalogService;
 import com.ning.billing.catalog.api.Plan;
+import com.ning.billing.entitlement.api.user.EffectiveSubscriptionEvent;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 
 public class TestBillCycleDayCalculator {
 
     @Test(groups = "fast")
+    public void testCalculateBCDForAOWithBPCancelledBundleAligned() throws Exception {
+        final DateTimeZone accountTimeZone = DateTimeZone.UTC;
+        final DateTime bpStartDateUTC = new DateTime(2012, 7, 16, 21, 0, 0, DateTimeZone.UTC);
+        final int expectedBCDUTC = 16;
+
+        // Create the calculator
+        final CatalogService catalogService = Mockito.mock(CatalogService.class);
+        final EntitlementUserApi entitlementUserApi = Mockito.mock(EntitlementUserApi.class);
+        final BillCycleDayCalculator billCycleDayCalculator = new BillCycleDayCalculator(catalogService, entitlementUserApi);
+
+        // Create a Bundle associated with a subscription
+        final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
+        final EffectiveSubscriptionEvent previousTransition = Mockito.mock(EffectiveSubscriptionEvent.class);
+        final Subscription subscription = Mockito.mock(Subscription.class);
+        Mockito.when(subscription.getStartDate()).thenReturn(bpStartDateUTC);
+        Mockito.when(subscription.getPreviousTransition()).thenReturn(previousTransition);
+        // subscription.getCurrentPlan() will return null as expected (cancelled BP)
+        Mockito.when(entitlementUserApi.getBaseSubscription(Mockito.<UUID>any())).thenReturn(subscription);
+
+        // Create a the base plan associated with that subscription
+        final Plan plan = Mockito.mock(Plan.class);
+        Mockito.when(plan.dateOfFirstRecurringNonZeroCharge(bpStartDateUTC)).thenReturn(bpStartDateUTC);
+        final Catalog catalog = Mockito.mock(Catalog.class);
+        Mockito.when(catalog.findPlan(Mockito.anyString(), Mockito.<DateTime>any(), Mockito.<DateTime>any())).thenReturn(plan);
+
+        final Account account = Mockito.mock(Account.class);
+        Mockito.when(account.getTimeZone()).thenReturn(accountTimeZone);
+        final BillCycleDay billCycleDay = billCycleDayCalculator.calculateBcdForAlignment(BillingAlignment.BUNDLE, bundle, subscription,
+                                                                                          account, catalog, null);
+
+        Assert.assertEquals(billCycleDay.getDayOfMonthUTC(), expectedBCDUTC);
+    }
+
+    @Test(groups = "fast")
     public void testCalculateBCDWithTimeZoneHST() throws Exception {
         final DateTimeZone accountTimeZone = DateTimeZone.forID("HST");
         final DateTime startDateUTC = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.UTC);