Skip to content

Commit

Permalink
subscription: Move pending cancellation in their correct destination …
Browse files Browse the repository at this point in the history
…test file TestUserApiCancel. See #733
  • Loading branch information
sbrossie committed Apr 15, 2017
1 parent 9d9253d commit dd8b7fb
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 91 deletions.
Expand Up @@ -21,6 +21,7 @@
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;
Expand All @@ -30,6 +31,7 @@
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;
Expand All @@ -46,6 +48,7 @@
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 {

Expand Down Expand Up @@ -426,9 +429,98 @@ public void testCancelUncancelFutureSubscription() throws SubscriptionBaseApiExc
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());
}

}
Expand Up @@ -508,95 +508,4 @@ public void testChangePlanOnPendingSubscription() throws SubscriptionBaseApiExce
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());
}

}

1 comment on commit dd8b7fb

@pierre
Copy link
Member

@pierre pierre commented on dd8b7fb Apr 17, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Please sign in to comment.