killbill-aplcache

entitlement: fix billing policy bug in cancellation API We

10/18/2013 10:48:21 AM

Details

diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
index c15bbe6..7eb1882 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
@@ -197,7 +197,7 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
     @Override
     public Entitlement cancelEntitlementWithPolicy(final EntitlementActionPolicy entitlementPolicy, final CallContext callContext) throws EntitlementApiException {
         final LocalDate cancellationDate = getLocalDateFromEntitlementPolicy(entitlementPolicy);
-        return cancelEntitlementWithDate(cancellationDate, true, callContext);
+        return cancelEntitlementWithDate(cancellationDate, false, callContext);
     }
 
     @Override
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlement.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlement.java
index d3c8e68..c04e6cd 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlement.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlement.java
@@ -132,6 +132,42 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
     }
 
     @Test(groups = "slow")
+    public void testCancelWithEntitlementPolicyIMMAndCTD() throws AccountApiException, EntitlementApiException, SubscriptionApiException {
+        final LocalDate initialDate = new LocalDate(2013, 8, 7);
+        clock.setDay(initialDate);
+
+        final Account account = accountApi.createAccount(getAccountData(7), callContext);
+
+        final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+
+        // Create entitlement and check each field
+        final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+
+        final DateTime ctd = clock.getUTCNow().plusDays(30).plusMonths(1);
+        testListener.pushExpectedEvent(NextEvent.PHASE);
+        // Go to 2013-09-08
+        clock.addDays(32);
+        // Set manually since no invoice
+        subscriptionInternalApi.setChargedThroughDate(entitlement.getId(), ctd, internalCallContext);
+        assertTrue(testListener.isCompleted(5000));
+
+        final Entitlement entitlement2 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
+        final Entitlement entitlement3 = entitlement2.cancelEntitlementWithPolicy(EntitlementActionPolicy.IMMEDIATE, callContext);
+        assertEquals(entitlement3.getState(), EntitlementState.CANCELLED);
+        assertEquals(entitlement3.getEffectiveEndDate(), new LocalDate(2013, 9, 8));
+
+        // Entitlement started in trial on 2013-08-07. The phase occurs at 2013-09-06. The CTD is 2013-10-06 which is when we want the billing cancellation to occur
+        final Subscription subscription = subscriptionApi.getSubscriptionForEntitlementId(entitlement.getBaseEntitlementId(), callContext);
+        assertEquals(subscription.getBillingEndDate(), new LocalDate(2013, 10, 6));
+
+        clock.addMonths(1);
+
+        final Entitlement entitlement4 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
+        assertEquals(entitlement4.getState(), EntitlementState.CANCELLED);
+        assertEquals(entitlement4.getEffectiveEndDate(), new LocalDate(2013, 9, 8));
+    }
+
+    @Test(groups = "slow")
     public void testCancelWithEntitlementPolicyEOTAndCTD() throws AccountApiException, EntitlementApiException, SubscriptionApiException {
         final LocalDate initialDate = new LocalDate(2013, 8, 7);
         clock.setDay(initialDate);