diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiCancel.java b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiCancel.java
index be86546..72dd488 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiCancel.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiCancel.java
@@ -21,6 +21,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
import org.joda.time.Interval;
import org.joda.time.LocalDate;
+import org.killbill.billing.ErrorCode;
import org.killbill.billing.api.TestApiListener.NextEvent;
import org.killbill.billing.catalog.api.BillingActionPolicy;
import org.killbill.billing.catalog.api.BillingPeriod;
@@ -30,6 +31,7 @@ import org.killbill.billing.catalog.api.Plan;
import org.killbill.billing.catalog.api.PlanPhase;
import org.killbill.billing.catalog.api.PriceListSet;
import org.killbill.billing.catalog.api.ProductCategory;
+import org.killbill.billing.entitlement.api.Entitlement;
import org.killbill.billing.entitlement.api.Entitlement.EntitlementState;
import org.killbill.billing.entity.EntityPersistenceException;
import org.killbill.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
@@ -46,6 +48,7 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
@@ -426,9 +429,98 @@ public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
clock.addMonths(1);
assertListenerStatus();
+ }
+
+
+ @Test(groups = "slow")
+ public void testCancelPlanOnPendingSubscription1() throws SubscriptionBaseApiException {
+
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+ final DateTime startDate = clock.getUTCNow().plusDays(5);
+
+ final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList, startDate);
+ assertEquals(subscription.getState(), Entitlement.EntitlementState.PENDING);
+ assertEquals(subscription.getStartDate().compareTo(startDate), 0);
+
+ // The code will be smart to infer the cancelation date as being the future startDate
+ subscription.cancel(callContext);
+
+ testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.CANCEL);
+ clock.addDays(5);
+ assertListenerStatus();
+ final DefaultSubscriptionBase subscription2 = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ assertEquals(subscription2.getStartDate().compareTo(startDate), 0);
+ assertEquals(subscription2.getState(), Entitlement.EntitlementState.CANCELLED);
+ assertNull(subscription2.getCurrentPlan());
}
+ @Test(groups = "slow")
+ public void testCancelPlanOnPendingSubscription2() throws SubscriptionBaseApiException {
+
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ final DateTime startDate = clock.getUTCNow().plusDays(5);
+
+ final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList, startDate);
+ assertEquals(subscription.getState(), Entitlement.EntitlementState.PENDING);
+ assertEquals(subscription.getStartDate().compareTo(startDate), 0);
+
+ try {
+ subscription.cancelWithDate(null, callContext);
+ fail("Cancel plan should have failed : subscription PENDING");
+ } catch (SubscriptionBaseApiException e) {
+ assertEquals(e.getCode(), ErrorCode.SUB_INVALID_REQUESTED_DATE.getCode());
+ }
+
+ try {
+ subscription.cancelWithDate(startDate.minusDays(1), callContext);
+ fail("Cancel plan should have failed : subscription PENDING");
+ } catch (SubscriptionBaseApiException e) {
+ assertEquals(e.getCode(), ErrorCode.SUB_INVALID_REQUESTED_DATE.getCode());
+ }
+
+ subscription.cancelWithDate(startDate, callContext);
+
+ testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.CANCEL);
+ clock.addDays(5);
+ assertListenerStatus();
+
+ final DefaultSubscriptionBase subscription2 = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ assertEquals(subscription2.getStartDate().compareTo(startDate), 0);
+ assertEquals(subscription2.getState(), Entitlement.EntitlementState.CANCELLED);
+ assertNull(subscription2.getCurrentPlan());
+ }
+
+
+ @Test(groups = "slow")
+ public void testCancelPlanOnPendingSubscription3() throws SubscriptionBaseApiException {
+
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ final DateTime startDate = clock.getUTCNow().plusDays(5);
+
+ final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList, startDate);
+ assertEquals(subscription.getState(), Entitlement.EntitlementState.PENDING);
+ assertEquals(subscription.getStartDate().compareTo(startDate), 0);
+
+ subscription.cancelWithPolicy(BillingActionPolicy.IMMEDIATE, null, 1, callContext);
+
+ testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.CANCEL);
+ clock.addDays(5);
+ assertListenerStatus();
+
+ final DefaultSubscriptionBase subscription2 = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ assertEquals(subscription2.getStartDate().compareTo(startDate), 0);
+ assertEquals(subscription2.getState(), Entitlement.EntitlementState.CANCELLED);
+ assertNull(subscription2.getCurrentPlan());
+ }
}
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiChangePlan.java b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiChangePlan.java
index 1754d0d..eb5a01d 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiChangePlan.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiChangePlan.java
@@ -508,95 +508,4 @@ public class TestUserApiChangePlan extends SubscriptionTestSuiteWithEmbeddedDB {
assertEquals(subscription2.getCurrentPlan().getProduct().getName(), "Pistol");
}
- @Test(groups = "slow")
- public void testCancelPlanOnPendingSubscription1() throws SubscriptionBaseApiException {
-
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- final DateTime startDate = clock.getUTCNow().plusDays(5);
-
- final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList, startDate);
- assertEquals(subscription.getState(), Entitlement.EntitlementState.PENDING);
- assertEquals(subscription.getStartDate().compareTo(startDate), 0);
-
- // The code will be smart to infer the cancelation date as being the future startDate
- subscription.cancel(callContext);
-
- testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.CANCEL);
- clock.addDays(5);
- assertListenerStatus();
-
- final DefaultSubscriptionBase subscription2 = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- assertEquals(subscription2.getStartDate().compareTo(startDate), 0);
- assertEquals(subscription2.getState(), Entitlement.EntitlementState.CANCELLED);
- assertNull(subscription2.getCurrentPlan());
- }
-
- @Test(groups = "slow")
- public void testCancelPlanOnPendingSubscription2() throws SubscriptionBaseApiException {
-
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- final DateTime startDate = clock.getUTCNow().plusDays(5);
-
- final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList, startDate);
- assertEquals(subscription.getState(), Entitlement.EntitlementState.PENDING);
- assertEquals(subscription.getStartDate().compareTo(startDate), 0);
-
- try {
- subscription.cancelWithDate(null, callContext);
- fail("Cancel plan should have failed : subscription PENDING");
- } catch (SubscriptionBaseApiException e) {
- assertEquals(e.getCode(), ErrorCode.SUB_INVALID_REQUESTED_DATE.getCode());
- }
-
- try {
- subscription.cancelWithDate(startDate.minusDays(1), callContext);
- fail("Cancel plan should have failed : subscription PENDING");
- } catch (SubscriptionBaseApiException e) {
- assertEquals(e.getCode(), ErrorCode.SUB_INVALID_REQUESTED_DATE.getCode());
- }
-
- subscription.cancelWithDate(startDate, callContext);
-
- testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.CANCEL);
- clock.addDays(5);
- assertListenerStatus();
-
- final DefaultSubscriptionBase subscription2 = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- assertEquals(subscription2.getStartDate().compareTo(startDate), 0);
- assertEquals(subscription2.getState(), Entitlement.EntitlementState.CANCELLED);
- assertNull(subscription2.getCurrentPlan());
- }
-
-
- @Test(groups = "slow")
- public void testCancelPlanOnPendingSubscription3() throws SubscriptionBaseApiException {
-
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- final DateTime startDate = clock.getUTCNow().plusDays(5);
-
- final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList, startDate);
- assertEquals(subscription.getState(), Entitlement.EntitlementState.PENDING);
- assertEquals(subscription.getStartDate().compareTo(startDate), 0);
-
- subscription.cancelWithPolicy(BillingActionPolicy.IMMEDIATE, null, 1, callContext);
-
- testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.CANCEL);
- clock.addDays(5);
- assertListenerStatus();
-
- final DefaultSubscriptionBase subscription2 = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- assertEquals(subscription2.getStartDate().compareTo(startDate), 0);
- assertEquals(subscription2.getState(), Entitlement.EntitlementState.CANCELLED);
- assertNull(subscription2.getCurrentPlan());
- }
-
}