killbill-memoizeit

junction: make BCD calculator not rely on UTC being the default

7/16/2012 6:43:08 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 166c884..eb6978a 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
@@ -123,22 +123,22 @@ public class BillCycleDayCalculator {
 
     private static final class CalculatedBillCycleDay implements BillCycleDay {
 
-        private final DateTime bcdTimeUTC;
+        private final DateTime bcdTime;
         private final DateTimeZone accountTimeZone;
 
-        private CalculatedBillCycleDay(final DateTimeZone accountTimeZone, final DateTime bcdTimeUTC) {
+        private CalculatedBillCycleDay(final DateTimeZone accountTimeZone, final DateTime bcdTime) {
             this.accountTimeZone = accountTimeZone;
-            this.bcdTimeUTC = bcdTimeUTC;
+            this.bcdTime = bcdTime;
         }
 
         @Override
         public int getDayOfMonthUTC() {
-            return bcdTimeUTC.getDayOfMonth();
+            return bcdTime.toDateTime(DateTimeZone.UTC).getDayOfMonth();
         }
 
         @Override
         public int getDayOfMonthLocal() {
-            return bcdTimeUTC.toDateTime(accountTimeZone).getDayOfMonth();
+            return bcdTime.toDateTime(accountTimeZone).getDayOfMonth();
         }
     }
 }
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 1e3104d..8bc0293 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
@@ -82,6 +82,17 @@ public class TestBillCycleDayCalculator {
         verifyBCDCalculation(accountTimeZone, startDateUTC, bcdUTC, bcdLocal);
     }
 
+    @Test(groups = "fast")
+    public void testCalculateBCDWithSubscriptionDateNotInUTC() throws Exception {
+        // Test to verify the computations don't rely implicitly on UTC
+        final DateTimeZone accountTimeZone = DateTimeZone.forID("Asia/Tokyo");
+        final DateTime startDate = new DateTime("2012-07-16T21:17:03.000Z", DateTimeZone.forID("HST"));
+        final int bcdUTC = 16;
+        final int bcdLocal = 17;
+
+        verifyBCDCalculation(accountTimeZone, startDate, bcdUTC, bcdLocal);
+    }
+
     private void verifyBCDCalculation(final DateTimeZone accountTimeZone, final DateTime startDateUTC, final int bcdUTC, final int bcdLocal) throws AccountApiException {
         final BillCycleDayCalculator billCycleDayCalculator = new BillCycleDayCalculator(Mockito.mock(CatalogService.class), Mockito.mock(EntitlementUserApi.class));