killbill-memoizeit
subscription: trivial cleanups in tests No functional change. Signed-off-by: …
Changes
subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java 506(+237 -269)
subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java 8(+3 -5)
subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java 13(+6 -7)
subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java 4(+2 -2)
subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java 138(+56 -82)
subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java 36(+15 -21)
subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java 901(+426 -475)
subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java 373(+176 -197)
subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java 615(+293 -322)
subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java 389(+175 -214)
subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java 163(+54 -109)
subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java 33(+9 -24)
subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java 16(+7 -9)
subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java 14(+7 -7)
subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java 2(+1 -1)
Details
diff --git a/subscription/src/test/java/com/ning/billing/subscription/alignment/TestPlanAligner.java b/subscription/src/test/java/com/ning/billing/subscription/alignment/TestPlanAligner.java
index 1dcdb85..09cb69f 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/alignment/TestPlanAligner.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/alignment/TestPlanAligner.java
@@ -175,10 +175,10 @@ public class TestPlanAligner extends SubscriptionTestSuiteNoDB {
// Create the transitions
final DefaultSubscriptionBase defaultSubscriptionBase = new DefaultSubscriptionBase(builder, null, clock);
final SubscriptionBaseEvent event = createSubscriptionEvent(builder.getAlignStartDate(),
- productName,
- phaseType,
- ApiEventType.CREATE,
- defaultSubscriptionBase.getActiveVersion());
+ productName,
+ phaseType,
+ ApiEventType.CREATE,
+ defaultSubscriptionBase.getActiveVersion());
defaultSubscriptionBase.rebuildTransitions(ImmutableList.<SubscriptionBaseEvent>of(event), catalogService.getFullCatalog());
Assert.assertEquals(defaultSubscriptionBase.getAllTransitions().size(), 1);
@@ -194,15 +194,15 @@ public class TestPlanAligner extends SubscriptionTestSuiteNoDB {
final String newProductName,
final PhaseType commonPhaseType) {
final SubscriptionBaseEvent previousEvent = createSubscriptionEvent(defaultSubscriptionBase.getStartDate(),
- previousProductName,
- commonPhaseType,
- ApiEventType.CREATE,
- defaultSubscriptionBase.getActiveVersion());
+ previousProductName,
+ commonPhaseType,
+ ApiEventType.CREATE,
+ defaultSubscriptionBase.getActiveVersion());
final SubscriptionBaseEvent event = createSubscriptionEvent(effectiveChangeDate,
- newProductName,
- commonPhaseType,
- ApiEventType.CHANGE,
- defaultSubscriptionBase.getActiveVersion());
+ newProductName,
+ commonPhaseType,
+ ApiEventType.CHANGE,
+ defaultSubscriptionBase.getActiveVersion());
defaultSubscriptionBase.rebuildTransitions(ImmutableList.<SubscriptionBaseEvent>of(previousEvent, event), catalogService.getFullCatalog());
@@ -214,10 +214,10 @@ public class TestPlanAligner extends SubscriptionTestSuiteNoDB {
}
private SubscriptionBaseEvent createSubscriptionEvent(final DateTime effectiveDate,
- final String productName,
- final PhaseType phaseType,
- final ApiEventType apiEventType,
- final long activeVersion) {
+ final String productName,
+ final PhaseType phaseType,
+ final ApiEventType apiEventType,
+ final long activeVersion) {
final ApiEventBuilder eventBuilder = new ApiEventBuilder();
eventBuilder.setEffectiveDate(effectiveDate);
eventBuilder.setEventPlan(productName);
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java b/subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java
index 1a4b0fe..87cb560 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/migration/TestMigration.java
@@ -20,7 +20,6 @@ import java.util.List;
import org.joda.time.DateTime;
import org.joda.time.Interval;
-import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.api.TestApiListener.NextEvent;
@@ -28,307 +27,276 @@ import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.AccountMigration;
import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
import com.ning.billing.subscription.api.user.SubscriptionBaseBundle;
import com.ning.billing.subscription.api.user.SubscriptionBaseTransition;
import com.ning.billing.subscription.api.user.SubscriptionBaseTransitionData;
import com.ning.billing.subscription.events.user.ApiEventType;
-import com.ning.billing.subscription.api.SubscriptionBase;
-import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
-
public class TestMigration extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
- public void testSingleBasePlan() {
- try {
- final DateTime startDate = clock.getUTCNow().minusMonths(2);
- final DateTime beforeMigration = clock.getUTCNow();
- final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
- final DateTime afterMigration = clock.getUTCNow();
-
- testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
- migrationApi.migrate(toBeMigrated, callContext);
- assertListenerStatus();
-
- final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
- assertEquals(bundles.size(), 1);
- final SubscriptionBaseBundle bundle = bundles.get(0);
-
- final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
- assertEquals(subscriptions.size(), 1);
- final SubscriptionBase subscription = subscriptions.get(0);
- assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
- assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertEquals(subscription.getState(), EntitlementState.ACTIVE);
- assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
- assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
-
- assertListenerStatus();
- } catch (SubscriptionBaseMigrationApiException e) {
- Assert.fail("", e);
- }
+ public void testSingleBasePlan() throws SubscriptionBaseMigrationApiException {
+ final DateTime startDate = clock.getUTCNow().minusMonths(2);
+ final DateTime beforeMigration = clock.getUTCNow();
+ final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
+ final DateTime afterMigration = clock.getUTCNow();
+
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+ migrationApi.migrate(toBeMigrated, callContext);
+ assertListenerStatus();
+
+ final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+ assertEquals(bundles.size(), 1);
+ final SubscriptionBaseBundle bundle = bundles.get(0);
+
+ final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+ assertEquals(subscriptions.size(), 1);
+ final SubscriptionBase subscription = subscriptions.get(0);
+ assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
+ assertEquals(subscription.getEndDate(), null);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+ assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
+ assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testPlanWithAddOn() {
- try {
- final DateTime beforeMigration = clock.getUTCNow();
- final DateTime initalBPStart = clock.getUTCNow().minusMonths(3);
- final DateTime initalAddonStart = clock.getUTCNow().minusMonths(1).plusDays(7);
- final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlanAndAddons(initalBPStart, initalAddonStart);
- final DateTime afterMigration = clock.getUTCNow();
-
- testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
- testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
- migrationApi.migrate(toBeMigrated, callContext);
- assertListenerStatus();
-
- final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
- assertEquals(bundles.size(), 1);
- final SubscriptionBaseBundle bundle = bundles.get(0);
-
- final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
- assertEquals(subscriptions.size(), 2);
-
- final SubscriptionBase baseSubscription = (subscriptions.get(0).getCurrentPlan().getProduct().getCategory() == ProductCategory.BASE) ?
+ public void testPlanWithAddOn() throws SubscriptionBaseMigrationApiException {
+ final DateTime beforeMigration = clock.getUTCNow();
+ final DateTime initalBPStart = clock.getUTCNow().minusMonths(3);
+ final DateTime initalAddonStart = clock.getUTCNow().minusMonths(1).plusDays(7);
+ final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlanAndAddons(initalBPStart, initalAddonStart);
+ final DateTime afterMigration = clock.getUTCNow();
+
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+ migrationApi.migrate(toBeMigrated, callContext);
+ assertListenerStatus();
+
+ final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+ assertEquals(bundles.size(), 1);
+ final SubscriptionBaseBundle bundle = bundles.get(0);
+
+ final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+ assertEquals(subscriptions.size(), 2);
+
+ final SubscriptionBase baseSubscription = (subscriptions.get(0).getCurrentPlan().getProduct().getCategory() == ProductCategory.BASE) ?
subscriptions.get(0) : subscriptions.get(1);
- assertTrue(baseSubscription.getStartDate().compareTo(initalBPStart) == 0);
- assertEquals(baseSubscription.getEndDate(), null);
- assertEquals(baseSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(baseSubscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
- assertEquals(baseSubscription.getCurrentPlan().getName(), "shotgun-annual");
- assertEquals(baseSubscription.getChargedThroughDate(), initalBPStart.plusYears(1));
-
- final SubscriptionBase aoSubscription = (subscriptions.get(0).getCurrentPlan().getProduct().getCategory() == ProductCategory.ADD_ON) ?
+ assertTrue(baseSubscription.getStartDate().compareTo(initalBPStart) == 0);
+ assertEquals(baseSubscription.getEndDate(), null);
+ assertEquals(baseSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(baseSubscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+ assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(baseSubscription.getCurrentPlan().getName(), "shotgun-annual");
+ assertEquals(baseSubscription.getChargedThroughDate(), initalBPStart.plusYears(1));
+
+ final SubscriptionBase aoSubscription = (subscriptions.get(0).getCurrentPlan().getProduct().getCategory() == ProductCategory.ADD_ON) ?
subscriptions.get(0) : subscriptions.get(1);
- // initalAddonStart.plusMonths(1).minusMonths(1) may be different from initalAddonStart, depending on exact date
- // e.g : March 31 + 1 month => April 30 and April 30 - 1 month = March 30 which is != March 31 !!!!
- assertEquals(aoSubscription.getStartDate(), initalAddonStart.plusMonths(1).minusMonths(1));
- assertEquals(aoSubscription.getEndDate(), null);
- assertEquals(aoSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(aoSubscription.getCurrentPhase().getPhaseType(), PhaseType.DISCOUNT);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
- assertEquals(aoSubscription.getCurrentPlan().getName(), "telescopic-scope-monthly");
- assertEquals(aoSubscription.getChargedThroughDate(), initalAddonStart.plusMonths(1));
-
- assertListenerStatus();
- } catch (SubscriptionBaseMigrationApiException e) {
- Assert.fail("", e);
- }
+ // initalAddonStart.plusMonths(1).minusMonths(1) may be different from initalAddonStart, depending on exact date
+ // e.g : March 31 + 1 month => April 30 and April 30 - 1 month = March 30 which is != March 31 !!!!
+ assertEquals(aoSubscription.getStartDate(), initalAddonStart.plusMonths(1).minusMonths(1));
+ assertEquals(aoSubscription.getEndDate(), null);
+ assertEquals(aoSubscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(aoSubscription.getCurrentPhase().getPhaseType(), PhaseType.DISCOUNT);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(aoSubscription.getCurrentPlan().getName(), "telescopic-scope-monthly");
+ assertEquals(aoSubscription.getChargedThroughDate(), initalAddonStart.plusMonths(1));
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testSingleBasePlanFutureCancelled() {
-
- try {
- final DateTime startDate = clock.getUTCNow().minusMonths(1);
- final DateTime beforeMigration = clock.getUTCNow();
- final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlanFutreCancelled(startDate);
- final DateTime afterMigration = clock.getUTCNow();
-
- testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
- migrationApi.migrate(toBeMigrated, callContext);
- assertListenerStatus();
-
- final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
- assertEquals(bundles.size(), 1);
- final SubscriptionBaseBundle bundle = bundles.get(0);
- //assertEquals(bundle.getStartDate(), effectiveDate);
-
- final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
- assertEquals(subscriptions.size(), 1);
- final SubscriptionBase subscription = subscriptions.get(0);
- assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
- assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertEquals(subscription.getState(), EntitlementState.ACTIVE);
- assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-annual");
- assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
-
- // The MIGRATE_BILLING will not be there because the subscription is cancelled at the same date so no BILLING should occur
- //testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
- testListener.pushExpectedEvent(NextEvent.CANCEL);
-
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusYears(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
- assertNotNull(subscription.getEndDate());
- assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(subscription.getCurrentPhase(), null);
- assertEquals(subscription.getState(), EntitlementState.CANCELLED);
- assertNull(subscription.getCurrentPlan());
-
- assertListenerStatus();
- } catch (SubscriptionBaseMigrationApiException e) {
- Assert.fail("", e);
- }
+ public void testSingleBasePlanFutureCancelled() throws SubscriptionBaseMigrationApiException {
+ final DateTime startDate = clock.getUTCNow().minusMonths(1);
+ final DateTime beforeMigration = clock.getUTCNow();
+ final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlanFutreCancelled(startDate);
+ final DateTime afterMigration = clock.getUTCNow();
+
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+ migrationApi.migrate(toBeMigrated, callContext);
+ assertListenerStatus();
+
+ final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+ assertEquals(bundles.size(), 1);
+ final SubscriptionBaseBundle bundle = bundles.get(0);
+ //assertEquals(bundle.getStartDate(), effectiveDate);
+
+ final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+ assertEquals(subscriptions.size(), 1);
+ final SubscriptionBase subscription = subscriptions.get(0);
+ assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+ assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-annual");
+ assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
+
+ // The MIGRATE_BILLING will not be there because the subscription is cancelled at the same date so no BILLING should occur
+ //testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusYears(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ assertTrue(subscription.getStartDate().compareTo(startDate) == 0);
+ assertNotNull(subscription.getEndDate());
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPhase(), null);
+ assertEquals(subscription.getState(), EntitlementState.CANCELLED);
+ assertNull(subscription.getCurrentPlan());
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testSingleBasePlanWithPendingPhase() {
- try {
- final DateTime trialDate = clock.getUTCNow().minusDays(10);
- final AccountMigration toBeMigrated = testUtil.createAccountForMigrationFuturePendingPhase(trialDate);
-
- testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
- migrationApi.migrate(toBeMigrated, callContext);
- assertListenerStatus();
-
- final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
- assertEquals(bundles.size(), 1);
- final SubscriptionBaseBundle bundle = bundles.get(0);
-
- final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
- assertEquals(subscriptions.size(), 1);
- final SubscriptionBase subscription = subscriptions.get(0);
-
- assertEquals(subscription.getStartDate(), trialDate);
- assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
- assertEquals(subscription.getState(), EntitlementState.ACTIVE);
- assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
- assertEquals(subscription.getChargedThroughDate(), trialDate.plusDays(30));
-
- testListener.pushExpectedEvent(NextEvent.PHASE);
- testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
-
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- assertEquals(subscription.getStartDate(), trialDate);
- assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertEquals(subscription.getState(), EntitlementState.ACTIVE);
- assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
- assertEquals(subscription.getCurrentPhase().getName(), "assault-rifle-monthly-evergreen");
-
- assertListenerStatus();
- } catch (SubscriptionBaseMigrationApiException e) {
- Assert.fail("", e);
- }
+ public void testSingleBasePlanWithPendingPhase() throws SubscriptionBaseMigrationApiException {
+ final DateTime trialDate = clock.getUTCNow().minusDays(10);
+ final AccountMigration toBeMigrated = testUtil.createAccountForMigrationFuturePendingPhase(trialDate);
+
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+ migrationApi.migrate(toBeMigrated, callContext);
+ assertListenerStatus();
+
+ final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+ assertEquals(bundles.size(), 1);
+ final SubscriptionBaseBundle bundle = bundles.get(0);
+
+ final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+ assertEquals(subscriptions.size(), 1);
+ final SubscriptionBase subscription = subscriptions.get(0);
+
+ assertEquals(subscription.getStartDate(), trialDate);
+ assertEquals(subscription.getEndDate(), null);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
+ assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
+ assertEquals(subscription.getChargedThroughDate(), trialDate.plusDays(30));
+
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
+
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ assertEquals(subscription.getStartDate(), trialDate);
+ assertEquals(subscription.getEndDate(), null);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+ assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
+ assertEquals(subscription.getCurrentPhase().getName(), "assault-rifle-monthly-evergreen");
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testSingleBasePlanWithPendingChange() {
- try {
- final DateTime beforeMigration = clock.getUTCNow();
- final AccountMigration toBeMigrated = testUtil.createAccountForMigrationFuturePendingChange();
- final DateTime afterMigration = clock.getUTCNow();
-
- testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
- migrationApi.migrate(toBeMigrated, callContext);
- assertListenerStatus();
-
- final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
- assertEquals(bundles.size(), 1);
- final SubscriptionBaseBundle bundle = bundles.get(0);
-
- final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
- assertEquals(subscriptions.size(), 1);
- final SubscriptionBase subscription = subscriptions.get(0);
- //assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
- assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertEquals(subscription.getState(), EntitlementState.ACTIVE);
- assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
-
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
-
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- //assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
- assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
-
- assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertEquals(subscription.getState(), EntitlementState.ACTIVE);
- assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
-
- assertListenerStatus();
-
- } catch (SubscriptionBaseMigrationApiException e) {
- Assert.fail("", e);
- }
+ public void testSingleBasePlanWithPendingChange() throws SubscriptionBaseMigrationApiException {
+ final DateTime beforeMigration = clock.getUTCNow();
+ final AccountMigration toBeMigrated = testUtil.createAccountForMigrationFuturePendingChange();
+ final DateTime afterMigration = clock.getUTCNow();
+
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+ migrationApi.migrate(toBeMigrated, callContext);
+ assertListenerStatus();
+
+ final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+ assertEquals(bundles.size(), 1);
+ final SubscriptionBaseBundle bundle = bundles.get(0);
+
+ final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+ assertEquals(subscriptions.size(), 1);
+ final SubscriptionBase subscription = subscriptions.get(0);
+ //assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
+ assertEquals(subscription.getEndDate(), null);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+ assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(subscription.getCurrentPlan().getName(), "assault-rifle-monthly");
+
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_BILLING);
+
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ //assertDateWithin(subscription.getStartDate(), beforeMigration, afterMigration);
+ assertEquals(subscription.getEndDate(), null);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+
+ assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+ assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
+
+ assertListenerStatus();
}
@Test(groups = "slow")
public void testChangePriorMigrateBilling() throws Exception {
- try {
- final DateTime startDate = clock.getUTCNow().minusMonths(2);
- final DateTime beforeMigration = clock.getUTCNow();
- final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
- final DateTime afterMigration = clock.getUTCNow();
-
- testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
- migrationApi.migrate(toBeMigrated, callContext);
- assertListenerStatus();
-
- final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
- assertEquals(bundles.size(), 1);
-
- final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundles.get(0).getId(), internalCallContext);
- assertEquals(subscriptions.size(), 1);
- final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptions.get(0);
-
- final List<SubscriptionBaseTransition> transitions = subscription.getAllTransitions();
- assertEquals(transitions.size(), 2);
- final SubscriptionBaseTransitionData initialMigrateBilling = (SubscriptionBaseTransitionData) transitions.get(1);
- assertEquals(initialMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
- assertTrue(initialMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
- assertEquals(initialMigrateBilling.getNextPlan().getName(), "shotgun-annual");
- assertEquals(initialMigrateBilling.getNextPhase().getName(), "shotgun-annual-evergreen");
-
- final List<SubscriptionBaseTransition> billingTransitions = subscription.getBillingTransitions();
- assertEquals(billingTransitions.size(), 1);
- assertEquals(billingTransitions.get(0), initialMigrateBilling);
-
- // Now make an IMMEDIATE change of plan
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlanWithDate("Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
- assertListenerStatus();
-
- final List<SubscriptionBaseTransition> newTransitions = subscription.getAllTransitions();
- assertEquals(newTransitions.size(), 3);
-
- final SubscriptionBaseTransitionData changeTransition = (SubscriptionBaseTransitionData) newTransitions.get(1);
- assertEquals(changeTransition.getApiEventType(), ApiEventType.CHANGE);
-
- final SubscriptionBaseTransitionData newMigrateBilling = (SubscriptionBaseTransitionData) newTransitions.get(2);
- assertEquals(newMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
- assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
- assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(initialMigrateBilling.getEffectiveTransitionTime()) == 0);
- assertEquals(newMigrateBilling.getNextPlan().getName(), "assault-rifle-monthly");
- assertEquals(newMigrateBilling.getNextPhase().getName(), "assault-rifle-monthly-evergreen");
-
-
- final List<SubscriptionBaseTransition> newBillingTransitions = subscription.getBillingTransitions();
- assertEquals(newBillingTransitions.size(), 1);
- assertEquals(newBillingTransitions.get(0), newMigrateBilling);
-
-
- } catch (SubscriptionBaseMigrationApiException e) {
- Assert.fail("", e);
- }
-
+ final DateTime startDate = clock.getUTCNow().minusMonths(2);
+ final DateTime beforeMigration = clock.getUTCNow();
+ final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
+ final DateTime afterMigration = clock.getUTCNow();
+
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+ migrationApi.migrate(toBeMigrated, callContext);
+ assertListenerStatus();
+
+ final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+ assertEquals(bundles.size(), 1);
+
+ final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundles.get(0).getId(), internalCallContext);
+ assertEquals(subscriptions.size(), 1);
+ final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptions.get(0);
+
+ final List<SubscriptionBaseTransition> transitions = subscription.getAllTransitions();
+ assertEquals(transitions.size(), 2);
+ final SubscriptionBaseTransitionData initialMigrateBilling = (SubscriptionBaseTransitionData) transitions.get(1);
+ assertEquals(initialMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
+ assertTrue(initialMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
+ assertEquals(initialMigrateBilling.getNextPlan().getName(), "shotgun-annual");
+ assertEquals(initialMigrateBilling.getNextPhase().getName(), "shotgun-annual-evergreen");
+
+ final List<SubscriptionBaseTransition> billingTransitions = subscription.getBillingTransitions();
+ assertEquals(billingTransitions.size(), 1);
+ assertEquals(billingTransitions.get(0), initialMigrateBilling);
+
+ // Now make an IMMEDIATE change of plan
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ subscription.changePlanWithDate("Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
+ assertListenerStatus();
+
+ final List<SubscriptionBaseTransition> newTransitions = subscription.getAllTransitions();
+ assertEquals(newTransitions.size(), 3);
+
+ final SubscriptionBaseTransitionData changeTransition = (SubscriptionBaseTransitionData) newTransitions.get(1);
+ assertEquals(changeTransition.getApiEventType(), ApiEventType.CHANGE);
+
+ final SubscriptionBaseTransitionData newMigrateBilling = (SubscriptionBaseTransitionData) newTransitions.get(2);
+ assertEquals(newMigrateBilling.getApiEventType(), ApiEventType.MIGRATE_BILLING);
+ assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(subscription.getChargedThroughDate()) == 0);
+ assertTrue(newMigrateBilling.getEffectiveTransitionTime().compareTo(initialMigrateBilling.getEffectiveTransitionTime()) == 0);
+ assertEquals(newMigrateBilling.getNextPlan().getName(), "assault-rifle-monthly");
+ assertEquals(newMigrateBilling.getNextPhase().getName(), "assault-rifle-monthly-evergreen");
+
+ final List<SubscriptionBaseTransition> newBillingTransitions = subscription.getBillingTransitions();
+ assertEquals(newBillingTransitions.size(), 1);
+ assertEquals(newBillingTransitions.get(0), newMigrateBilling);
}
}
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairBP.java b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairBP.java
index 54ce65a..c430a3c 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairBP.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairBP.java
@@ -34,18 +34,18 @@ import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
-import com.ning.billing.subscription.api.user.SubscriptionEvents;
-import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithException;
-import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithExceptionCallback;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
-import com.ning.billing.subscription.api.SubscriptionBase;
-import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
+import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
+import com.ning.billing.subscription.api.user.SubscriptionEvents;
+import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithException;
+import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithExceptionCallback;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java
index 5e457b8..9a6bd0e 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithAO.java
@@ -32,22 +32,20 @@ import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
-import com.ning.billing.subscription.api.user.SubscriptionEvents;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
-import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
+import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
+import com.ning.billing.subscription.api.user.SubscriptionEvents;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
public class TestRepairWithAO extends SubscriptionTestSuiteWithEmbeddedDB {
-
@Test(groups = "slow")
public void testRepairChangeBPWithAddonIncluded() throws Exception {
final String baseProduct = "Shotgun";
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java
index 7423bbe..7a04168 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/timeline/TestRepairWithError.java
@@ -34,17 +34,16 @@ import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.subscription.SubscriptionTestSuiteNoDB;
+import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
+import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithException;
import com.ning.billing.subscription.api.user.TestSubscriptionHelper.TestWithExceptionCallback;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
-import com.ning.billing.subscription.api.SubscriptionBase;
-import static org.testng.Assert.assertTrue;
-import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.Assert.assertEquals;
public class TestRepairWithError extends SubscriptionTestSuiteNoDB {
@@ -53,7 +52,7 @@ public class TestRepairWithError extends SubscriptionTestSuiteNoDB {
private SubscriptionBase baseSubscription;
@Override
- @BeforeMethod(alwaysRun = true)
+ @BeforeMethod(groups = "fast")
public void beforeMethod() throws Exception {
super.beforeMethod();
test = new TestWithException();
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
index d144351..d296dc1 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
@@ -36,6 +36,7 @@ import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.subscription.SubscriptionTestSuiteNoDB;
import com.ning.billing.subscription.api.SubscriptionBaseApiService;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimelineApi;
import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
import com.ning.billing.subscription.api.user.SubscriptionBuilder;
@@ -44,7 +45,6 @@ import com.ning.billing.subscription.events.SubscriptionBaseEvent;
import com.ning.billing.subscription.events.SubscriptionBaseEvent.EventType;
import com.ning.billing.subscription.events.user.ApiEventTransfer;
import com.ning.billing.subscription.events.user.ApiEventType;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
import com.ning.billing.util.cache.CacheControllerDispatcher;
import com.ning.billing.util.callcontext.InternalCallContextFactory;
import com.ning.billing.util.dao.NonEntityDao;
@@ -159,7 +159,7 @@ public class TestDefaultSubscriptionTransferApi extends SubscriptionTestSuiteNoD
}
private List<SubscriptionBaseEvent> transferBundle(final DateTime migrateSubscriptionEventEffectiveDate, final DateTime migrateBillingEventEffectiveDate,
- final DateTime transferDate) throws SubscriptionBaseTransferApiException {
+ final DateTime transferDate) throws SubscriptionBaseTransferApiException {
final ImmutableList<ExistingEvent> existingEvents = createMigrateEvents(migrateSubscriptionEventEffectiveDate, migrateBillingEventEffectiveDate);
final SubscriptionBuilder subscriptionBuilder = new SubscriptionBuilder();
final DefaultSubscriptionBase subscription = new DefaultSubscriptionBase(subscriptionBuilder);
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
index 6704bb1..62cf563 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/transfer/TestTransfer.java
@@ -33,12 +33,11 @@ import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.Product;
import com.ning.billing.entitlement.api.Entitlement.EntitlementState;
import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBase;
+import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.AccountMigration;
-import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApiException;
import com.ning.billing.subscription.api.user.DefaultSubscriptionBase;
import com.ning.billing.subscription.api.user.SubscriptionBaseBundle;
-import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.SubscriptionBase;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;
@@ -50,75 +49,64 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
protected static final Logger log = LoggerFactory.getLogger(TestTransfer.class);
-
- @Test(groups = "slow", enabled = true)
+ @Test(groups = "slow")
public void testTransferMigratedSubscriptionWithCTDInFuture() throws Exception {
-
final UUID newAccountId = UUID.randomUUID();
- try {
- final DateTime startDate = clock.getUTCNow().minusMonths(2);
- final DateTime beforeMigration = clock.getUTCNow();
- final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
- final DateTime afterMigration = clock.getUTCNow();
-
- testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
- migrationApi.migrate(toBeMigrated, callContext);
- assertListenerStatus();
-
- final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
- assertEquals(bundles.size(), 1);
- final SubscriptionBaseBundle bundle = bundles.get(0);
-
- final DateTime bundleCreatedDate = bundle.getCreatedDate();
-
- final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
- assertEquals(subscriptions.size(), 1);
- final SubscriptionBase subscription = subscriptions.get(0);
- testUtil.assertDateWithin(subscription.getStartDate(), beforeMigration.minusMonths(2), afterMigration.minusMonths(2));
- assertEquals(subscription.getEndDate(), null);
- assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
- assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertEquals(subscription.getState(), EntitlementState.ACTIVE);
- assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
- assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
- // WE should see MIGRATE_ENTITLEMENT and then MIGRATE_BILLING in the future
- assertEquals(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).size(), 1);
- assertEquals(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.MIGRATE_BILLING);
- assertTrue(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).get(0).getEffectiveTransitionTime().compareTo(clock.getUTCNow()) > 0);
- assertListenerStatus();
-
-
- // MOVE A LITTLE, STILL IN TRIAL
- clock.addDays(20);
-
- final DateTime transferRequestedDate = clock.getUTCNow();
-
- testListener.pushExpectedEvent(NextEvent.TRANSFER);
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, true, callContext);
- assertListenerStatus();
-
- final SubscriptionBase oldBaseSubscription = subscriptionInternalApi.getBaseSubscription(bundle.getId(), internalCallContext);
- assertTrue(oldBaseSubscription.getState() == EntitlementState.CANCELLED);
- // The MIGRATE_BILLING event should have been invalidated
- assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).size(), 0);
- //assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
-
- final SubscriptionBaseBundle newBundle = subscriptionInternalApi.getActiveBundleForKey(bundle.getExternalKey(), internalCallContext);
- assertNotEquals(newBundle.getId(), bundle.getId());
- assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundleCreatedDate), 0);
-
- } catch (SubscriptionBaseMigrationApiException e) {
- Assert.fail("", e);
- }
+ final DateTime startDate = clock.getUTCNow().minusMonths(2);
+ final DateTime beforeMigration = clock.getUTCNow();
+ final AccountMigration toBeMigrated = testUtil.createAccountForMigrationWithRegularBasePlan(startDate);
+ final DateTime afterMigration = clock.getUTCNow();
+
+ testListener.pushExpectedEvent(NextEvent.MIGRATE_ENTITLEMENT);
+ migrationApi.migrate(toBeMigrated, callContext);
+ assertListenerStatus();
+ final List<SubscriptionBaseBundle> bundles = subscriptionInternalApi.getBundlesForAccount(toBeMigrated.getAccountKey(), internalCallContext);
+ assertEquals(bundles.size(), 1);
+ final SubscriptionBaseBundle bundle = bundles.get(0);
+
+ final DateTime bundleCreatedDate = bundle.getCreatedDate();
+
+ final List<SubscriptionBase> subscriptions = subscriptionInternalApi.getSubscriptionsForBundle(bundle.getId(), internalCallContext);
+ assertEquals(subscriptions.size(), 1);
+ final SubscriptionBase subscription = subscriptions.get(0);
+ testUtil.assertDateWithin(subscription.getStartDate(), beforeMigration.minusMonths(2), afterMigration.minusMonths(2));
+ assertEquals(subscription.getEndDate(), null);
+ assertEquals(subscription.getCurrentPriceList().getName(), PriceListSet.DEFAULT_PRICELIST_NAME);
+ assertEquals(subscription.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
+ assertEquals(subscription.getState(), EntitlementState.ACTIVE);
+ assertEquals(subscription.getCurrentPlan().getName(), "shotgun-annual");
+ assertEquals(subscription.getChargedThroughDate(), startDate.plusYears(1));
+ // WE should see MIGRATE_ENTITLEMENT and then MIGRATE_BILLING in the future
+ assertEquals(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).size(), 1);
+ assertEquals(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.MIGRATE_BILLING);
+ assertTrue(subscriptionInternalApi.getBillingTransitions(subscription, internalCallContext).get(0).getEffectiveTransitionTime().compareTo(clock.getUTCNow()) > 0);
+ assertListenerStatus();
+
+ // MOVE A LITTLE, STILL IN TRIAL
+ clock.addDays(20);
+
+ final DateTime transferRequestedDate = clock.getUTCNow();
+ testListener.pushExpectedEvent(NextEvent.TRANSFER);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, true, callContext);
+ assertListenerStatus();
+
+ final SubscriptionBase oldBaseSubscription = subscriptionInternalApi.getBaseSubscription(bundle.getId(), internalCallContext);
+ assertTrue(oldBaseSubscription.getState() == EntitlementState.CANCELLED);
+ // The MIGRATE_BILLING event should have been invalidated
+ assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).size(), 0);
+ //assertEquals(subscriptionInternalApi.getBillingTransitions(oldBaseSubscription, internalCallContext).get(0).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
+
+ final SubscriptionBaseBundle newBundle = subscriptionInternalApi.getActiveBundleForKey(bundle.getExternalKey(), internalCallContext);
+ assertNotEquals(newBundle.getId(), bundle.getId());
+ assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundleCreatedDate), 0);
}
@Test(groups = "slow")
public void testTransferBPInTrialWithNoCTD() throws Exception {
-
final UUID newAccountId = UUID.randomUUID();
final String baseProduct = "Shotgun";
@@ -168,10 +156,8 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
assertEquals(newBaseSubscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
}
-
@Test(groups = "slow")
public void testTransferBPInTrialWithCTD() throws Exception {
-
final UUID newAccountId = UUID.randomUUID();
final String baseProduct = "Shotgun";
@@ -220,10 +206,8 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
assertEquals(newBaseSubscription.getCurrentPhase().getPhaseType(), PhaseType.TRIAL);
}
-
@Test(groups = "slow")
public void testTransferBPNoTrialWithNoCTD() throws Exception {
-
final UUID newAccountId = UUID.randomUUID();
final String baseProduct = "Shotgun";
@@ -273,7 +257,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferBPNoTrialWithCTD() throws Exception {
-
final UUID newAccountId = UUID.randomUUID();
final String baseProduct = "Shotgun";
@@ -292,7 +275,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
final DateTime ctd = baseSubscription.getStartDate().plusDays(30).plusMonths(1);
subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), ctd, internalCallContext);
-
final DateTime transferRequestedDate = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.TRANSFER);
transferApi.transferBundle(bundle.getAccountId(), newAccountId, bundle.getExternalKey(), transferRequestedDate, false, false, callContext);
@@ -326,7 +308,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
final String newBaseProduct1 = "Assault-Rifle";
final BillingPeriod newBaseTerm1 = BillingPeriod.ANNUAL;
- final DateTime changeDate1 = clock.getUTCNow();
testListener.pushExpectedEvent(NextEvent.CHANGE);
newBaseSubscription.changePlan(newBaseProduct1, newBaseTerm1, basePriceList, callContext);
assertListenerStatus();
@@ -344,20 +325,18 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
final String newBaseProduct2 = "Pistol";
final BillingPeriod newBaseTerm2 = BillingPeriod.ANNUAL;
- final DateTime changeDate2 = clock.getUTCNow();
newBaseSubscriptionWithCtd.changePlan(newBaseProduct2, newBaseTerm2, basePriceList, callContext);
newPlan = newBaseSubscriptionWithCtd.getCurrentPlan();
assertEquals(newPlan.getProduct().getName(), newBaseProduct1);
assertEquals(newBaseSubscriptionWithCtd.getCurrentPhase().getPhaseType(), PhaseType.EVERGREEN);
- assertNotNull(((DefaultSubscriptionBase) newBaseSubscriptionWithCtd).getPendingTransition());
- assertEquals(((DefaultSubscriptionBase) newBaseSubscriptionWithCtd).getPendingTransition().getEffectiveTransitionTime(), newCtd);
+ assertNotNull(newBaseSubscriptionWithCtd.getPendingTransition());
+ assertEquals(newBaseSubscriptionWithCtd.getPendingTransition().getEffectiveTransitionTime(), newCtd);
}
@Test(groups = "slow")
public void testTransferWithAO() throws Exception {
-
final UUID newAccountId = UUID.randomUUID();
final String baseProduct = "Shotgun";
@@ -415,15 +394,15 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
if (curProduct.getName().equals(baseProduct)) {
foundBP = true;
assertTrue(((DefaultSubscriptionBase) cur).getAlignStartDate().compareTo(((DefaultSubscriptionBase) baseSubscription).getAlignStartDate()) == 0);
- assertNull(((DefaultSubscriptionBase) cur).getPendingTransition());
+ assertNull(cur.getPendingTransition());
} else if (curProduct.getName().equals(aoProduct1)) {
foundAO1 = true;
assertTrue(((DefaultSubscriptionBase) cur).getAlignStartDate().compareTo((aoSubscription1).getAlignStartDate()) == 0);
- assertNull(((DefaultSubscriptionBase) cur).getPendingTransition());
+ assertNull(cur.getPendingTransition());
} else if (curProduct.getName().equals(aoProduct2)) {
foundAO2 = true;
assertTrue(((DefaultSubscriptionBase) cur).getAlignStartDate().compareTo((aoSubscription2).getAlignStartDate()) == 0);
- assertNotNull(((DefaultSubscriptionBase) cur).getPendingTransition());
+ assertNotNull(cur.getPendingTransition());
} else {
Assert.fail("Unexpected product " + curProduct.getName());
}
@@ -449,13 +428,10 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
testListener.pushExpectedEvent(NextEvent.TRANSFER);
transferApi.transferBundle(newBundle.getAccountId(), finalNewAccountId, newBundle.getExternalKey(), newTransferRequestedDate, true, false, callContext);
assertListenerStatus();
-
}
-
@Test(groups = "slow")
public void testTransferWithAOCancelled() throws Exception {
-
final UUID newAccountId = UUID.randomUUID();
final String baseProduct = "Shotgun";
@@ -506,7 +482,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTransferWithUncancel() throws Exception {
-
final UUID newAccountId = UUID.randomUUID();
final String baseProduct = "Shotgun";
@@ -524,7 +499,6 @@ public class TestTransfer extends SubscriptionTestSuiteWithEmbeddedDB {
final DateTime ctd = baseSubscription.getStartDate().plusDays(30).plusMonths(1);
subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), ctd, internalCallContext);
-
// CANCEL BP
baseSubscription = subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
baseSubscription.cancel(callContext);
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java
index 27dc44e..522a48e 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestSubscriptionHelper.java
@@ -36,6 +36,7 @@ import com.ning.billing.ErrorCode;
import com.ning.billing.api.TestApiListener;
import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.api.TestListenerStatus;
+import com.ning.billing.callcontext.InternalCallContext;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Duration;
import com.ning.billing.catalog.api.PhaseType;
@@ -44,27 +45,26 @@ import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.catalog.api.TimeUnit;
import com.ning.billing.clock.Clock;
+import com.ning.billing.events.EffectiveSubscriptionInternalEvent;
import com.ning.billing.subscription.SubscriptionTestListenerStatus;
import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBaseInternalApi;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.AccountMigration;
import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.BundleMigration;
import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.SubscriptionMigration;
import com.ning.billing.subscription.api.migration.SubscriptionBaseMigrationApi.SubscriptionMigrationCase;
+import com.ning.billing.subscription.api.timeline.BundleBaseTimeline;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseRepairException;
import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
+import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
import com.ning.billing.subscription.engine.dao.SubscriptionDao;
import com.ning.billing.subscription.events.SubscriptionBaseEvent;
import com.ning.billing.subscription.events.phase.PhaseEvent;
import com.ning.billing.subscription.events.user.ApiEvent;
import com.ning.billing.subscription.events.user.ApiEventType;
-import com.ning.billing.subscription.api.timeline.BundleBaseTimeline;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.DeletedEvent;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.ExistingEvent;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline.NewEvent;
-import com.ning.billing.callcontext.InternalCallContext;
-import com.ning.billing.events.EffectiveSubscriptionInternalEvent;
-import com.ning.billing.subscription.api.SubscriptionBaseInternalApi;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
@@ -87,7 +87,6 @@ public class TestSubscriptionHelper {
private final SubscriptionDao dao;
-
@Inject
public TestSubscriptionHelper(final SubscriptionBaseInternalApi subscriptionApi, final Clock clock, final InternalCallContext callContext, final TestApiListener testListener, final TestListenerStatus testListenerStatus, final SubscriptionDao dao) {
this.subscriptionApi = subscriptionApi;
@@ -98,7 +97,6 @@ public class TestSubscriptionHelper {
this.dao = dao;
}
-
public DefaultSubscriptionBase createSubscription(final SubscriptionBaseBundle bundle, final String productName, final BillingPeriod term, final String planSet, final DateTime requestedDate)
throws SubscriptionBaseApiException {
return createSubscriptionWithBundle(bundle.getId(), productName, term, planSet, requestedDate);
@@ -113,8 +111,8 @@ public class TestSubscriptionHelper {
throws SubscriptionBaseApiException {
testListener.pushExpectedEvent(NextEvent.CREATE);
final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionApi.createSubscription(bundleId,
- new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSet, null),
- requestedDate == null ? clock.getUTCNow() : requestedDate, callContext);
+ new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSet, null),
+ requestedDate == null ? clock.getUTCNow() : requestedDate, callContext);
assertNotNull(subscription);
assertTrue(testListener.isCompleted(SubscriptionTestSuiteWithEmbeddedDB.DELAY));
@@ -395,7 +393,6 @@ public class TestSubscriptionHelper {
return createAccountForMigrationTest(input);
}
-
public SubscriptionBaseTimeline createSubscriptionRepair(final UUID id, final List<DeletedEvent> deletedEvents, final List<NewEvent> newEvents) {
return new SubscriptionBaseTimeline() {
@Override
@@ -517,17 +514,17 @@ public class TestSubscriptionHelper {
}
public void validateExistingEventForAssertion(final ExistingEvent expected, final ExistingEvent input) {
- log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getProductName(), expected.getPlanPhaseSpecifier().getProductName()));
+ log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getProductName(), expected.getPlanPhaseSpecifier().getProductName()));
assertEquals(input.getPlanPhaseSpecifier().getProductName(), expected.getPlanPhaseSpecifier().getProductName());
- log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getPhaseType(), expected.getPlanPhaseSpecifier().getPhaseType()));
+ log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getPhaseType(), expected.getPlanPhaseSpecifier().getPhaseType()));
assertEquals(input.getPlanPhaseSpecifier().getPhaseType(), expected.getPlanPhaseSpecifier().getPhaseType());
- log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getProductCategory(), expected.getPlanPhaseSpecifier().getProductCategory()));
+ log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getProductCategory(), expected.getPlanPhaseSpecifier().getProductCategory()));
assertEquals(input.getPlanPhaseSpecifier().getProductCategory(), expected.getPlanPhaseSpecifier().getProductCategory());
- log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getPriceListName(), expected.getPlanPhaseSpecifier().getPriceListName()));
+ log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getPriceListName(), expected.getPlanPhaseSpecifier().getPriceListName()));
assertEquals(input.getPlanPhaseSpecifier().getPriceListName(), expected.getPlanPhaseSpecifier().getPriceListName());
- log.info(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getBillingPeriod(), expected.getPlanPhaseSpecifier().getBillingPeriod()));
+ log.debug(String.format("Got %s -> Expected %s", input.getPlanPhaseSpecifier().getBillingPeriod(), expected.getPlanPhaseSpecifier().getBillingPeriod()));
assertEquals(input.getPlanPhaseSpecifier().getBillingPeriod(), expected.getPlanPhaseSpecifier().getBillingPeriod());
- log.info(String.format("Got %s -> Expected %s", input.getEffectiveDate(), expected.getEffectiveDate()));
+ log.debug(String.format("Got %s -> Expected %s", input.getEffectiveDate(), expected.getEffectiveDate()));
assertEquals(input.getEffectiveDate(), expected.getEffectiveDate());
}
@@ -591,7 +588,6 @@ public class TestSubscriptionHelper {
});
}
-
public static DateTime addOrRemoveDuration(final DateTime input, final List<Duration> durations, final boolean add) {
DateTime result = input;
for (final Duration cur : durations) {
@@ -635,7 +631,6 @@ public class TestSubscriptionHelper {
return addOrRemoveDuration(input, list, false);
}
-
public static class SubscriptionMigrationCaseWithCTD implements SubscriptionMigrationCase {
private final PlanPhaseSpecifier pps;
@@ -670,7 +665,6 @@ public class TestSubscriptionHelper {
}
}
-
public interface TestWithExceptionCallback {
public void doTest() throws SubscriptionBaseRepairException, SubscriptionBaseApiException;
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java
index 1b2d8af..e04b4d2 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiAddOn.java
@@ -16,17 +16,10 @@
package com.ning.billing.subscription.api.user;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
import java.util.List;
import org.joda.time.DateTime;
import org.joda.time.Interval;
-import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.api.TestApiListener.NextEvent;
@@ -46,506 +39,464 @@ import com.ning.billing.entitlement.api.EntitlementAOStatusDryRun.DryRunChangeRe
import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
public class TestUserApiAddOn extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
- public void testCreateCancelAddon() {
- try {
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.ANNUAL;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+ public void testCreateCancelAddon() throws SubscriptionBaseApiException {
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.ANNUAL;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
- final String aoProduct = "Telescopic-Scope";
- final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
- final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+ DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
- DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+ final String aoProduct = "Telescopic-Scope";
+ final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+ final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- final DateTime now = clock.getUTCNow();
- aoSubscription.cancel(callContext);
+ DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
- assertListenerStatus();
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ final DateTime now = clock.getUTCNow();
+ aoSubscription.cancel(callContext);
+ assertListenerStatus();
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
- assertListenerStatus();
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testCreateCancelAddonAndThenBP() {
- try {
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.ANNUAL;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
- final String aoProduct = "Telescopic-Scope";
- final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
- final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
-
- // Move clock after a month
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- testListener.pushExpectedEvent(NextEvent.PHASE);
- testListener.pushExpectedEvent(NextEvent.PHASE);
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
-
- // SET CTD TO CANCEL IN FUTURE
- final DateTime now = clock.getUTCNow();
- final Duration aoCtd = testUtil.getDurationMonth(1);
- final DateTime newAOChargedThroughDate = TestSubscriptionHelper.addDuration(now, aoCtd);
- subscriptionInternalApi.setChargedThroughDate(aoSubscription.getId(), newAOChargedThroughDate, internalCallContext);
-
- final Duration bpCtd = testUtil.getDurationMonth(11);
- final DateTime newBPChargedThroughDate = TestSubscriptionHelper.addDuration(now, bpCtd);
- subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newBPChargedThroughDate, internalCallContext);
-
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(1));
- clock.addDeltaFromReality(it.toDurationMillis());
-
- // CANCEL AO
- aoSubscription.cancel(callContext);
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
- assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-
- // CANCEL BASE NOW
- baseSubscription.cancel(callContext);
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
- assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
- assertTrue(baseSubscription.isSubscriptionFutureCancelled());
-
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- List<SubscriptionBaseTransition> aoTransitions = aoSubscription.getAllTransitions();
- assertEquals(aoTransitions.size(), 3);
- assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE);
- assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE);
- assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
- assertTrue(aoSubscription.getFutureEndDate().compareTo(newAOChargedThroughDate) == 0);
-
- testListener.pushExpectedEvent(NextEvent.UNCANCEL);
- aoSubscription.uncancel(callContext);
- assertListenerStatus();
-
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- aoTransitions = aoSubscription.getAllTransitions();
- assertEquals(aoTransitions.size(), 3);
- assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE);
- assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE);
- assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
- assertTrue(aoSubscription.getFutureEndDate().compareTo(newBPChargedThroughDate) == 0);
-
- assertListenerStatus();
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
+ public void testCreateCancelAddonAndThenBP() throws SubscriptionBaseApiException {
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.ANNUAL;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+ final String aoProduct = "Telescopic-Scope";
+ final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+ final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+
+ // Move clock after a month
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // SET CTD TO CANCEL IN FUTURE
+ final DateTime now = clock.getUTCNow();
+ final Duration aoCtd = testUtil.getDurationMonth(1);
+ final DateTime newAOChargedThroughDate = TestSubscriptionHelper.addDuration(now, aoCtd);
+ subscriptionInternalApi.setChargedThroughDate(aoSubscription.getId(), newAOChargedThroughDate, internalCallContext);
+
+ final Duration bpCtd = testUtil.getDurationMonth(11);
+ final DateTime newBPChargedThroughDate = TestSubscriptionHelper.addDuration(now, bpCtd);
+ subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newBPChargedThroughDate, internalCallContext);
+
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+
+ // CANCEL AO
+ aoSubscription.cancel(callContext);
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+ assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+
+ // CANCEL BASE NOW
+ baseSubscription.cancel(callContext);
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+ assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
+ assertTrue(baseSubscription.isSubscriptionFutureCancelled());
+
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ List<SubscriptionBaseTransition> aoTransitions = aoSubscription.getAllTransitions();
+ assertEquals(aoTransitions.size(), 3);
+ assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE);
+ assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE);
+ assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
+ assertTrue(aoSubscription.getFutureEndDate().compareTo(newAOChargedThroughDate) == 0);
+
+ testListener.pushExpectedEvent(NextEvent.UNCANCEL);
+ aoSubscription.uncancel(callContext);
+ assertListenerStatus();
+
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ aoTransitions = aoSubscription.getAllTransitions();
+ assertEquals(aoTransitions.size(), 3);
+ assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE);
+ assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE);
+ assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL);
+ assertTrue(aoSubscription.getFutureEndDate().compareTo(newBPChargedThroughDate) == 0);
+
+ assertListenerStatus();
}
-
-
-
@Test(groups = "slow")
- public void testCancelBPWithAddon() {
- try {
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // CREATE BP
- DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
- final String aoProduct = "Telescopic-Scope";
- final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
- final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.PHASE);
- testListener.pushExpectedEvent(NextEvent.PHASE);
-
- // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // SET CTD TO CANCEL IN FUTURE
- final DateTime now = clock.getUTCNow();
- final Duration ctd = testUtil.getDurationMonth(1);
- // Why not just use clock.getUTCNow().plusMonths(1) ?
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
- subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-
- // FUTURE CANCELLATION
- baseSubscription.cancel(callContext);
-
- // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
- assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-
- // MOVE AFTER CANCELLATION
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- testListener.pushExpectedEvent(NextEvent.CANCEL);
-
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // REFETCH AO SUBSCRIPTION AND CHECK THIS IS CANCELLED
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
-
- assertListenerStatus();
-
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
+ public void testCancelBPWithAddon() throws SubscriptionBaseApiException {
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // CREATE BP
+ DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+ final String aoProduct = "Telescopic-Scope";
+ final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+ final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+
+ // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // SET CTD TO CANCEL IN FUTURE
+ final DateTime now = clock.getUTCNow();
+ final Duration ctd = testUtil.getDurationMonth(1);
+ // Why not just use clock.getUTCNow().plusMonths(1) ?
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
+ subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+
+ // FUTURE CANCELLATION
+ baseSubscription.cancel(callContext);
+
+ // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+ assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+
+ // MOVE AFTER CANCELLATION
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // REFETCH AO SUBSCRIPTION AND CHECK THIS IS CANCELLED
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
+
+ assertListenerStatus();
}
-
@Test(groups = "slow")
- public void testCancelUncancelBPWithAddon() {
- try {
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // CREATE BP
- DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
- final String aoProduct = "Telescopic-Scope";
- final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
- final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.PHASE);
- testListener.pushExpectedEvent(NextEvent.PHASE);
-
- // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // SET CTD TO CANCEL IN FUTURE
- final DateTime now = clock.getUTCNow();
- final Duration ctd = testUtil.getDurationMonth(1);
- // Why not just use clock.getUTCNow().plusMonths(1) ?
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
- subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-
- // FUTURE CANCELLATION
- baseSubscription.cancel(callContext);
-
- // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
- assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-
-
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.UNCANCEL);
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
- baseSubscription.uncancel(callContext);
- assertListenerStatus();
-
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
- assertFalse(aoSubscription.isSubscriptionFutureCancelled());
-
- // CANCEL AGAIN
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(1));
- clock.addDeltaFromReality(it.toDurationMillis());
-
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
- baseSubscription.cancel(callContext);
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
- assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
- assertTrue(baseSubscription.isSubscriptionFutureCancelled());
-
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
- assertTrue(aoSubscription.isSubscriptionFutureCancelled());
- assertListenerStatus();
-
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
+ public void testCancelUncancelBPWithAddon() throws SubscriptionBaseApiException {
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // CREATE BP
+ DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+ final String aoProduct = "Telescopic-Scope";
+ final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+ final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+
+ // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // SET CTD TO CANCEL IN FUTURE
+ final DateTime now = clock.getUTCNow();
+ final Duration ctd = testUtil.getDurationMonth(1);
+ // Why not just use clock.getUTCNow().plusMonths(1) ?
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
+ subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+
+ // FUTURE CANCELLATION
+ baseSubscription.cancel(callContext);
+
+ // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+ assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.UNCANCEL);
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+ baseSubscription.uncancel(callContext);
+ assertListenerStatus();
+
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+ assertFalse(aoSubscription.isSubscriptionFutureCancelled());
+
+ // CANCEL AGAIN
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+ baseSubscription.cancel(callContext);
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+ assertEquals(baseSubscription.getState(), EntitlementState.ACTIVE);
+ assertTrue(baseSubscription.isSubscriptionFutureCancelled());
+
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+ assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+ assertListenerStatus();
}
-
-
-
@Test(groups = "slow")
- public void testChangeBPWithAddonIncluded() {
- try {
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // CREATE BP
- DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
- final String aoProduct = "Telescopic-Scope";
- final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
- final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.PHASE);
- testListener.pushExpectedEvent(NextEvent.PHASE);
-
- // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // SET CTD TO CHANGE IN FUTURE
- final DateTime now = clock.getUTCNow();
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
- subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-
- // CHANGE IMMEDIATELY WITH TO BP WITH NON INCLUDED ADDON
- final String newBaseProduct = "Assault-Rifle";
- final BillingPeriod newBaseTerm = BillingPeriod.MONTHLY;
- final String newBasePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- final List<EntitlementAOStatusDryRun> aoStatus = subscriptionInternalApi.getDryRunChangePlanStatus(baseSubscription.getId(),
- newBaseProduct, now, internalCallContext);
- assertEquals(aoStatus.size(), 1);
- assertEquals(aoStatus.get(0).getId(), aoSubscription.getId());
- assertEquals(aoStatus.get(0).getProductName(), aoProduct);
- assertEquals(aoStatus.get(0).getBillingPeriod(), aoTerm);
- assertEquals(aoStatus.get(0).getPhaseType(), aoSubscription.getCurrentPhase().getPhaseType());
- assertEquals(aoStatus.get(0).getPriceList(), aoSubscription.getCurrentPriceList().getName());
- assertEquals(aoStatus.get(0).getReason(), DryRunChangeReason.AO_INCLUDED_IN_NEW_PLAN);
-
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList, callContext);
- assertListenerStatus();
-
- // REFETCH AO SUBSCRIPTION AND CHECK THIS CANCELLED
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
-
- assertListenerStatus();
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
+ public void testChangeBPWithAddonIncluded() throws SubscriptionBaseApiException {
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // CREATE BP
+ DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+ final String aoProduct = "Telescopic-Scope";
+ final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+ final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+
+ // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // SET CTD TO CHANGE IN FUTURE
+ final DateTime now = clock.getUTCNow();
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
+ subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+
+ // CHANGE IMMEDIATELY WITH TO BP WITH NON INCLUDED ADDON
+ final String newBaseProduct = "Assault-Rifle";
+ final BillingPeriod newBaseTerm = BillingPeriod.MONTHLY;
+ final String newBasePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ final List<EntitlementAOStatusDryRun> aoStatus = subscriptionInternalApi.getDryRunChangePlanStatus(baseSubscription.getId(),
+ newBaseProduct, now, internalCallContext);
+ assertEquals(aoStatus.size(), 1);
+ assertEquals(aoStatus.get(0).getId(), aoSubscription.getId());
+ assertEquals(aoStatus.get(0).getProductName(), aoProduct);
+ assertEquals(aoStatus.get(0).getBillingPeriod(), aoTerm);
+ assertEquals(aoStatus.get(0).getPhaseType(), aoSubscription.getCurrentPhase().getPhaseType());
+ assertEquals(aoStatus.get(0).getPriceList(), aoSubscription.getCurrentPriceList().getName());
+ assertEquals(aoStatus.get(0).getReason(), DryRunChangeReason.AO_INCLUDED_IN_NEW_PLAN);
+
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList, callContext);
+ assertListenerStatus();
+
+ // REFETCH AO SUBSCRIPTION AND CHECK THIS CANCELLED
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testChangeBPWithAddonNonAvailable() {
- try {
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // CREATE BP
- DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
- final String aoProduct = "Telescopic-Scope";
- final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
- final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
-
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.PHASE);
- testListener.pushExpectedEvent(NextEvent.PHASE);
-
- // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // SET CTD TO CANCEL IN FUTURE
- final DateTime now = clock.getUTCNow();
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
- subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
- baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
-
- // CHANGE IMMEDIATELY WITH TO BP WITH NON AVAILABLE ADDON
- final String newBaseProduct = "Pistol";
- final BillingPeriod newBaseTerm = BillingPeriod.MONTHLY;
- final String newBasePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- final List<EntitlementAOStatusDryRun> aoStatus = subscriptionInternalApi.getDryRunChangePlanStatus(baseSubscription.getId(),
- newBaseProduct, now, internalCallContext);
- assertEquals(aoStatus.size(), 1);
- assertEquals(aoStatus.get(0).getId(), aoSubscription.getId());
- assertEquals(aoStatus.get(0).getProductName(), aoProduct);
- assertEquals(aoStatus.get(0).getBillingPeriod(), aoTerm);
- assertEquals(aoStatus.get(0).getPhaseType(), aoSubscription.getCurrentPhase().getPhaseType());
- assertEquals(aoStatus.get(0).getPriceList(), aoSubscription.getCurrentPriceList().getName());
- assertEquals(aoStatus.get(0).getReason(), DryRunChangeReason.AO_NOT_AVAILABLE_IN_NEW_PLAN);
-
- baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList, callContext);
-
- // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
- assertTrue(aoSubscription.isSubscriptionFutureCancelled());
-
- // MOVE AFTER CHANGE
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // REFETCH AO SUBSCRIPTION AND CHECK THIS CANCELLED
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
-
- assertListenerStatus();
- } catch (Exception e) {
- Assert.fail(e.getMessage());
- }
+ public void testChangeBPWithAddonNonAvailable() throws SubscriptionBaseApiException {
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // CREATE BP
+ DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+ final String aoProduct = "Telescopic-Scope";
+ final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+ final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+
+ // MOVE CLOCK AFTER TRIAL + AO DISCOUNT
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(2));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // SET CTD TO CANCEL IN FUTURE
+ final DateTime now = clock.getUTCNow();
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(now, ctd);
+ subscriptionInternalApi.setChargedThroughDate(baseSubscription.getId(), newChargedThroughDate, internalCallContext);
+ baseSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(baseSubscription.getId(), internalCallContext);
+
+ // CHANGE IMMEDIATELY WITH TO BP WITH NON AVAILABLE ADDON
+ final String newBaseProduct = "Pistol";
+ final BillingPeriod newBaseTerm = BillingPeriod.MONTHLY;
+ final String newBasePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ final List<EntitlementAOStatusDryRun> aoStatus = subscriptionInternalApi.getDryRunChangePlanStatus(baseSubscription.getId(),
+ newBaseProduct, now, internalCallContext);
+ assertEquals(aoStatus.size(), 1);
+ assertEquals(aoStatus.get(0).getId(), aoSubscription.getId());
+ assertEquals(aoStatus.get(0).getProductName(), aoProduct);
+ assertEquals(aoStatus.get(0).getBillingPeriod(), aoTerm);
+ assertEquals(aoStatus.get(0).getPhaseType(), aoSubscription.getCurrentPhase().getPhaseType());
+ assertEquals(aoStatus.get(0).getPriceList(), aoSubscription.getCurrentPriceList().getName());
+ assertEquals(aoStatus.get(0).getReason(), DryRunChangeReason.AO_NOT_AVAILABLE_IN_NEW_PLAN);
+
+ baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList, callContext);
+
+ // REFETCH AO SUBSCRIPTION AND CHECK THIS IS ACTIVE
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.ACTIVE);
+ assertTrue(aoSubscription.isSubscriptionFutureCancelled());
+
+ // MOVE AFTER CHANGE
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // REFETCH AO SUBSCRIPTION AND CHECK THIS CANCELLED
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ assertEquals(aoSubscription.getState(), EntitlementState.CANCELLED);
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testAddonCreateWithBundleAlign() {
- try {
- final String aoProduct = "Telescopic-Scope";
- final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
- final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // This is just to double check our test catalog gives us what we want before we start the test
- final PlanSpecifier planSpecifier = new PlanSpecifier(aoProduct,
- ProductCategory.ADD_ON,
- aoTerm,
- aoPriceList);
- final PlanAlignmentCreate alignement = catalog.planCreateAlignment(planSpecifier, clock.getUTCNow());
- assertEquals(alignement, PlanAlignmentCreate.START_OF_BUNDLE);
-
- testAddonCreateInternal(aoProduct, aoTerm, aoPriceList, alignement);
-
- assertListenerStatus();
- } catch (CatalogApiException e) {
- Assert.fail(e.getMessage());
- }
+ public void testAddonCreateWithBundleAlign() throws CatalogApiException, SubscriptionBaseApiException {
+ final String aoProduct = "Telescopic-Scope";
+ final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+ final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // This is just to double check our test catalog gives us what we want before we start the test
+ final PlanSpecifier planSpecifier = new PlanSpecifier(aoProduct,
+ ProductCategory.ADD_ON,
+ aoTerm,
+ aoPriceList);
+ final PlanAlignmentCreate alignement = catalog.planCreateAlignment(planSpecifier, clock.getUTCNow());
+ assertEquals(alignement, PlanAlignmentCreate.START_OF_BUNDLE);
+
+ testAddonCreateInternal(aoProduct, aoTerm, aoPriceList, alignement);
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testAddonCreateWithSubscriptionAlign() {
- try {
- final String aoProduct = "Laser-Scope";
- final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
- final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // This is just to double check our test catalog gives us what we want before we start the test
- final PlanSpecifier planSpecifier = new PlanSpecifier(aoProduct,
- ProductCategory.ADD_ON,
- aoTerm,
- aoPriceList);
- final PlanAlignmentCreate alignement = catalog.planCreateAlignment(planSpecifier, clock.getUTCNow());
- assertEquals(alignement, PlanAlignmentCreate.START_OF_SUBSCRIPTION);
-
- testAddonCreateInternal(aoProduct, aoTerm, aoPriceList, alignement);
-
- assertListenerStatus();
- } catch (CatalogApiException e) {
- Assert.fail(e.getMessage());
- }
+ public void testAddonCreateWithSubscriptionAlign() throws SubscriptionBaseApiException, CatalogApiException {
+ final String aoProduct = "Laser-Scope";
+ final BillingPeriod aoTerm = BillingPeriod.MONTHLY;
+ final String aoPriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // This is just to double check our test catalog gives us what we want before we start the test
+ final PlanSpecifier planSpecifier = new PlanSpecifier(aoProduct,
+ ProductCategory.ADD_ON,
+ aoTerm,
+ aoPriceList);
+ final PlanAlignmentCreate alignement = catalog.planCreateAlignment(planSpecifier, clock.getUTCNow());
+ assertEquals(alignement, PlanAlignmentCreate.START_OF_SUBSCRIPTION);
+
+ testAddonCreateInternal(aoProduct, aoTerm, aoPriceList, alignement);
+
+ assertListenerStatus();
}
- private void testAddonCreateInternal(final String aoProduct, final BillingPeriod aoTerm, final String aoPriceList, final PlanAlignmentCreate expAlignement) {
- try {
- final String baseProduct = "Shotgun";
- final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
- final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // CREATE BP
- final DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
-
- // MOVE CLOCK 14 DAYS LATER
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(14));
- clock.addDeltaFromReality(it.toDurationMillis());
-
- // CREATE ADDON
- final DateTime beforeAOCreation = clock.getUTCNow();
- DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
- final DateTime afterAOCreation = clock.getUTCNow();
-
- // CHECK EVERYTHING
- Plan aoCurrentPlan = aoSubscription.getCurrentPlan();
- assertNotNull(aoCurrentPlan);
- assertEquals(aoCurrentPlan.getProduct().getName(), aoProduct);
- assertEquals(aoCurrentPlan.getProduct().getCategory(), ProductCategory.ADD_ON);
- assertEquals(aoCurrentPlan.getBillingPeriod(), aoTerm);
-
- PlanPhase aoCurrentPhase = aoSubscription.getCurrentPhase();
- assertNotNull(aoCurrentPhase);
- assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.DISCOUNT);
-
- testUtil.assertDateWithin(aoSubscription.getStartDate(), beforeAOCreation, afterAOCreation);
- assertEquals(aoSubscription.getBundleStartDate(), baseSubscription.getBundleStartDate());
-
- // CHECK next AO PHASE EVENT IS INDEED A MONTH AFTER BP STARTED => BUNDLE ALIGNMENT
- SubscriptionBaseTransition aoPendingTranstion = aoSubscription.getPendingTransition();
- if (expAlignement == PlanAlignmentCreate.START_OF_BUNDLE) {
- assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), baseSubscription.getStartDate().plusMonths(1));
- } else {
- assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), aoSubscription.getStartDate().plusMonths(1));
- }
-
- // ADD TWO PHASE EVENTS (BP + AO)
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.PHASE);
- testListener.pushExpectedEvent(NextEvent.PHASE);
-
- // MOVE THROUGH TIME TO GO INTO EVERGREEN
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(33));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // CHECK EVERYTHING AGAIN
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
-
- aoCurrentPlan = aoSubscription.getCurrentPlan();
- assertNotNull(aoCurrentPlan);
- assertEquals(aoCurrentPlan.getProduct().getName(), aoProduct);
- assertEquals(aoCurrentPlan.getProduct().getCategory(), ProductCategory.ADD_ON);
- assertEquals(aoCurrentPlan.getBillingPeriod(), aoTerm);
-
- aoCurrentPhase = aoSubscription.getCurrentPhase();
- assertNotNull(aoCurrentPhase);
- assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
- aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
- aoPendingTranstion = aoSubscription.getPendingTransition();
- assertNull(aoPendingTranstion);
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
+ private void testAddonCreateInternal(final String aoProduct, final BillingPeriod aoTerm, final String aoPriceList, final PlanAlignmentCreate expAlignement) throws SubscriptionBaseApiException {
+ final String baseProduct = "Shotgun";
+ final BillingPeriod baseTerm = BillingPeriod.MONTHLY;
+ final String basePriceList = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // CREATE BP
+ final DefaultSubscriptionBase baseSubscription = testUtil.createSubscription(bundle, baseProduct, baseTerm, basePriceList);
+
+ // MOVE CLOCK 14 DAYS LATER
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(14));
+ clock.addDeltaFromReality(it.toDurationMillis());
+
+ // CREATE ADDON
+ final DateTime beforeAOCreation = clock.getUTCNow();
+ DefaultSubscriptionBase aoSubscription = testUtil.createSubscription(bundle, aoProduct, aoTerm, aoPriceList);
+ final DateTime afterAOCreation = clock.getUTCNow();
+
+ // CHECK EVERYTHING
+ Plan aoCurrentPlan = aoSubscription.getCurrentPlan();
+ assertNotNull(aoCurrentPlan);
+ assertEquals(aoCurrentPlan.getProduct().getName(), aoProduct);
+ assertEquals(aoCurrentPlan.getProduct().getCategory(), ProductCategory.ADD_ON);
+ assertEquals(aoCurrentPlan.getBillingPeriod(), aoTerm);
+
+ PlanPhase aoCurrentPhase = aoSubscription.getCurrentPhase();
+ assertNotNull(aoCurrentPhase);
+ assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.DISCOUNT);
+
+ testUtil.assertDateWithin(aoSubscription.getStartDate(), beforeAOCreation, afterAOCreation);
+ assertEquals(aoSubscription.getBundleStartDate(), baseSubscription.getBundleStartDate());
+
+ // CHECK next AO PHASE EVENT IS INDEED A MONTH AFTER BP STARTED => BUNDLE ALIGNMENT
+ SubscriptionBaseTransition aoPendingTranstion = aoSubscription.getPendingTransition();
+ if (expAlignement == PlanAlignmentCreate.START_OF_BUNDLE) {
+ assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), baseSubscription.getStartDate().plusMonths(1));
+ } else {
+ assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), aoSubscription.getStartDate().plusMonths(1));
}
+
+ // ADD TWO PHASE EVENTS (BP + AO)
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+
+ // MOVE THROUGH TIME TO GO INTO EVERGREEN
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(33));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // CHECK EVERYTHING AGAIN
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+
+ aoCurrentPlan = aoSubscription.getCurrentPlan();
+ assertNotNull(aoCurrentPlan);
+ assertEquals(aoCurrentPlan.getProduct().getName(), aoProduct);
+ assertEquals(aoCurrentPlan.getProduct().getCategory(), ProductCategory.ADD_ON);
+ assertEquals(aoCurrentPlan.getBillingPeriod(), aoTerm);
+
+ aoCurrentPhase = aoSubscription.getCurrentPhase();
+ assertNotNull(aoCurrentPhase);
+ assertEquals(aoCurrentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+ aoSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(aoSubscription.getId(), internalCallContext);
+ aoPendingTranstion = aoSubscription.getPendingTransition();
+ assertNull(aoPendingTranstion);
}
}
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
index cd1d5ed..dd7d8d3 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCancel.java
@@ -40,222 +40,201 @@ import static org.testng.Assert.assertTrue;
public class TestUserApiCancel extends SubscriptionTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
- public void testCancelSubscriptionIMM() {
- try {
- final DateTime init = clock.getUTCNow();
+ public void testCancelSubscriptionIMM() throws SubscriptionBaseApiException {
+ final DateTime init = clock.getUTCNow();
- final String prod = "Shotgun";
- final BillingPeriod term = BillingPeriod.MONTHLY;
- final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
+ final String prod = "Shotgun";
+ final BillingPeriod term = BillingPeriod.MONTHLY;
+ final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
- // CREATE
- final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
- PlanPhase currentPhase = subscription.getCurrentPhase();
- assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
+ // CREATE
+ final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
+ PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
- // ADVANCE TIME still in trial
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
- clock.addDeltaFromReality(it.toDurationMillis());
+ // ADVANCE TIME still in trial
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
+ clock.addDeltaFromReality(it.toDurationMillis());
- final DateTime future = clock.getUTCNow();
- testListener.pushExpectedEvent(NextEvent.CANCEL);
+ final DateTime future = clock.getUTCNow();
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
- assertEquals(subscription.getLastActiveProduct().getName(), prod);
- assertEquals(subscription.getLastActivePriceList().getName(), planSet);
- assertEquals(subscription.getLastActiveBillingPeriod(), term);
- assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+ assertEquals(subscription.getLastActiveProduct().getName(), prod);
+ assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+ assertEquals(subscription.getLastActiveBillingPeriod(), term);
+ assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+ // CANCEL in trial period to get IMM policy
+ subscription.cancel(callContext);
+ currentPhase = subscription.getCurrentPhase();
+ testListener.isCompleted(3000);
- // CANCEL in trial period to get IMM policy
- subscription.cancel(callContext);
- currentPhase = subscription.getCurrentPhase();
- testListener.isCompleted(3000);
+ assertEquals(subscription.getLastActiveProduct().getName(), prod);
+ assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+ assertEquals(subscription.getLastActiveBillingPeriod(), term);
+ assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
- assertEquals(subscription.getLastActiveProduct().getName(), prod);
- assertEquals(subscription.getLastActivePriceList().getName(), planSet);
- assertEquals(subscription.getLastActiveBillingPeriod(), term);
- assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+ assertNull(currentPhase);
+ testUtil.checkNextPhaseChange(subscription, 0, null);
-
- assertNull(currentPhase);
- testUtil.checkNextPhaseChange(subscription, 0, null);
-
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testCancelSubscriptionEOTWithChargeThroughDate() throws SubscriptionBillingApiException {
- try {
- final String prod = "Shotgun";
- final BillingPeriod term = BillingPeriod.MONTHLY;
- final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // CREATE
- DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
- PlanPhase trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
- // NEXT PHASE
- final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
- testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
-
- // MOVE TO NEXT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
-
- assertListenerStatus();
- trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.EVERGREEN);
-
- // SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
- subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
- assertEquals(subscription.getLastActiveProduct().getName(), prod);
- assertEquals(subscription.getLastActivePriceList().getName(), planSet);
- assertEquals(subscription.getLastActiveBillingPeriod(), term);
- assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
-
- // CANCEL
- testListener.setNonExpectedMode();
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- subscription.cancel(callContext);
- assertFalse(testListener.isCompleted(3000));
- testListener.reset();
-
-
- assertEquals(subscription.getLastActiveProduct().getName(), prod);
- assertEquals(subscription.getLastActivePriceList().getName(), planSet);
- assertEquals(subscription.getLastActiveBillingPeriod(), term);
- assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
-
- final DateTime futureEndDate = subscription.getFutureEndDate();
- Assert.assertNotNull(futureEndDate);
-
- // MOVE TO EOT + RECHECK
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- final DateTime future = clock.getUTCNow();
- assertListenerStatus();
-
- assertTrue(futureEndDate.compareTo(subscription.getEndDate()) == 0);
-
- final PlanPhase currentPhase = subscription.getCurrentPhase();
- assertNull(currentPhase);
- testUtil.checkNextPhaseChange(subscription, 0, null);
-
- assertEquals(subscription.getLastActiveProduct().getName(), prod);
- assertEquals(subscription.getLastActivePriceList().getName(), planSet);
- assertEquals(subscription.getLastActiveBillingPeriod(), term);
- assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
-
-
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ public void testCancelSubscriptionEOTWithChargeThroughDate() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+ final String prod = "Shotgun";
+ final BillingPeriod term = BillingPeriod.MONTHLY;
+ final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // CREATE
+ DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
+ PlanPhase trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+ // NEXT PHASE
+ final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
+
+ // MOVE TO NEXT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+
+ assertListenerStatus();
+ trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+ // SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+ subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+ assertEquals(subscription.getLastActiveProduct().getName(), prod);
+ assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+ assertEquals(subscription.getLastActiveBillingPeriod(), term);
+ assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+
+ // CANCEL
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ subscription.cancel(callContext);
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
+
+ assertEquals(subscription.getLastActiveProduct().getName(), prod);
+ assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+ assertEquals(subscription.getLastActiveBillingPeriod(), term);
+ assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+
+ final DateTime futureEndDate = subscription.getFutureEndDate();
+ Assert.assertNotNull(futureEndDate);
+
+ // MOVE TO EOT + RECHECK
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ final DateTime future = clock.getUTCNow();
+ assertListenerStatus();
+
+ assertTrue(futureEndDate.compareTo(subscription.getEndDate()) == 0);
+
+ final PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertNull(currentPhase);
+ testUtil.checkNextPhaseChange(subscription, 0, null);
+
+ assertEquals(subscription.getLastActiveProduct().getName(), prod);
+ assertEquals(subscription.getLastActivePriceList().getName(), planSet);
+ assertEquals(subscription.getLastActiveBillingPeriod(), term);
+ assertEquals(subscription.getLastActiveCategory(), ProductCategory.BASE);
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testCancelSubscriptionEOTWithNoChargeThroughDate() {
- try {
- final String prod = "Shotgun";
- final BillingPeriod term = BillingPeriod.MONTHLY;
- final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // CREATE
- final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
- PlanPhase trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
- // NEXT PHASE
- final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
- testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
-
- // MOVE TO NEXT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
-
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
- trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.EVERGREEN);
-
- testListener.pushExpectedEvent(NextEvent.CANCEL);
-
- // CANCEL
- subscription.cancel(callContext);
- assertListenerStatus();
-
- final PlanPhase currentPhase = subscription.getCurrentPhase();
- assertNull(currentPhase);
- testUtil.checkNextPhaseChange(subscription, 0, null);
-
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ public void testCancelSubscriptionEOTWithNoChargeThroughDate() throws SubscriptionBaseApiException {
+ final String prod = "Shotgun";
+ final BillingPeriod term = BillingPeriod.MONTHLY;
+ final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // CREATE
+ final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
+ PlanPhase trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+ // NEXT PHASE
+ final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
+
+ // MOVE TO NEXT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+ trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+
+ // CANCEL
+ subscription.cancel(callContext);
+ assertListenerStatus();
+
+ final PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertNull(currentPhase);
+ testUtil.checkNextPhaseChange(subscription, 0, null);
+
+ assertListenerStatus();
}
// Similar test to testCancelSubscriptionEOTWithChargeThroughDate except we uncancel and check things
// are as they used to be and we can move forward without hitting cancellation
- //
@Test(groups = "slow")
- public void testUncancel() throws SubscriptionBillingApiException {
- try {
- final String prod = "Shotgun";
- final BillingPeriod term = BillingPeriod.MONTHLY;
- final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- // CREATE
- DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
- final PlanPhase trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
- // NEXT PHASE
- final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
- testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
-
- // MOVE TO NEXT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
- PlanPhase currentPhase = subscription.getCurrentPhase();
- assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
- // SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
- subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
- // CANCEL EOT
- subscription.cancel(callContext);
-
- subscription.uncancel(callContext);
-
- // MOVE TO EOT + RECHECK
- testListener.pushExpectedEvent(NextEvent.UNCANCEL);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- final Plan currentPlan = subscription.getCurrentPlan();
- assertEquals(currentPlan.getProduct().getName(), prod);
- currentPhase = subscription.getCurrentPhase();
- assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ public void testUncancel() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+ final String prod = "Shotgun";
+ final BillingPeriod term = BillingPeriod.MONTHLY;
+ final String planSet = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ // CREATE
+ DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, prod, term, planSet);
+ final PlanPhase trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+ // NEXT PHASE
+ final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ testUtil.checkNextPhaseChange(subscription, 1, expectedPhaseTrialChange);
+
+ // MOVE TO NEXT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+ PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+ // SET CTD + RE READ SUBSCRIPTION + CHANGE PLAN
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+ subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+ // CANCEL EOT
+ subscription.cancel(callContext);
+
+ subscription.uncancel(callContext);
+
+ // MOVE TO EOT + RECHECK
+ testListener.pushExpectedEvent(NextEvent.UNCANCEL);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ final Plan currentPlan = subscription.getCurrentPlan();
+ assertEquals(currentPlan.getProduct().getName(), prod);
+ currentPhase = subscription.getCurrentPhase();
+ assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+ assertListenerStatus();
}
}
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java
index 9088ebc..4e43b10 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiChangePlan.java
@@ -33,9 +33,9 @@ import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.catalog.api.PriceListSet;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.subscription.SubscriptionTestSuiteWithEmbeddedDB;
+import com.ning.billing.subscription.api.SubscriptionBillingApiException;
import com.ning.billing.subscription.events.SubscriptionBaseEvent;
import com.ning.billing.subscription.events.user.ApiEvent;
-import com.ning.billing.subscription.api.SubscriptionBillingApiException;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
@@ -97,385 +97,356 @@ public class TestUserApiChangePlan extends SubscriptionTestSuiteWithEmbeddedDB {
}
@Test(groups = "slow")
- public void testChangePlanBundleAlignEOTWithChargeThroughDate() throws SubscriptionBillingApiException {
+ public void testChangePlanBundleAlignEOTWithChargeThroughDate() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
testChangePlanBundleAlignEOTWithChargeThroughDate("Shotgun", BillingPeriod.ANNUAL, "gunclubDiscount", "Pistol", BillingPeriod.ANNUAL, "gunclubDiscount");
}
private void testChangePlanBundleAlignEOTWithChargeThroughDate(final String fromProd, final BillingPeriod fromTerm, final String fromPlanSet,
- final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBillingApiException {
- try {
- // CREATE
- DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
- final PlanPhase trialPhase = subscription.getCurrentPhase();
- final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
- // MOVE TO NEXT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
- PlanPhase currentPhase = subscription.getCurrentPhase();
- assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
-
- // SET CTD
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
- subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-
- // RE READ SUBSCRIPTION + CHANGE PLAN
- testListener.setNonExpectedMode();
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
- assertFalse(testListener.isCompleted(3000));
- testListener.reset();
-
- // CHECK CHANGE PLAN
- currentPhase = subscription.getCurrentPhase();
- checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.DISCOUNT);
-
- // NEXT PHASE
- final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, currentPhase.getDuration());
- testUtil.checkNextPhaseChange(subscription, 2, nextExpectedPhaseChange);
-
- // ALSO VERIFY PENDING CHANGE EVENT
- final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
- assertTrue(events.get(0) instanceof ApiEvent);
-
- // MOVE TO EOT
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- currentPhase = subscription.getCurrentPhase();
- checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.DISCOUNT);
-
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+ // CREATE
+ DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
+ final PlanPhase trialPhase = subscription.getCurrentPhase();
+ final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+ // MOVE TO NEXT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+ PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+
+ // SET CTD
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+ subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+
+ // RE READ SUBSCRIPTION + CHANGE PLAN
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
+
+ // CHECK CHANGE PLAN
+ currentPhase = subscription.getCurrentPhase();
+ checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.DISCOUNT);
+
+ // NEXT PHASE
+ final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, currentPhase.getDuration());
+ testUtil.checkNextPhaseChange(subscription, 2, nextExpectedPhaseChange);
+
+ // ALSO VERIFY PENDING CHANGE EVENT
+ final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
+ assertTrue(events.get(0) instanceof ApiEvent);
+
+ // MOVE TO EOT
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ currentPhase = subscription.getCurrentPhase();
+ checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.DISCOUNT);
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testChangePlanBundleAlignIMM() {
+ public void testChangePlanBundleAlignIMM() throws SubscriptionBaseApiException {
tChangePlanBundleAlignIMM("Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, "Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
}
private void tChangePlanBundleAlignIMM(final String fromProd, final BillingPeriod fromTerm, final String fromPlanSet,
- final String toProd, final BillingPeriod toTerm, final String toPlanSet) {
+ final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBaseApiException {
+ final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
- try {
- final DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
- testListener.pushExpectedEvent(NextEvent.CHANGE);
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
+ clock.addDeltaFromReality(it.toDurationMillis());
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(3));
- clock.addDeltaFromReality(it.toDurationMillis());
-
- // CHANGE PLAN IMM
- subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
- checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.TRIAL);
-
- assertListenerStatus();
+ // CHANGE PLAN IMM
+ subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
+ checkChangePlan(subscription, toProd, ProductCategory.BASE, toTerm, PhaseType.TRIAL);
- final PlanPhase currentPhase = subscription.getCurrentPhase();
- final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), currentPhase.getDuration());
- testUtil.checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
+ assertListenerStatus();
- // NEXT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
- clock.addDeltaFromReality(it.toDurationMillis());
- final DateTime futureNow = clock.getUTCNow();
+ final PlanPhase currentPhase = subscription.getCurrentPhase();
+ final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), currentPhase.getDuration());
+ testUtil.checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
- assertTrue(futureNow.isAfter(nextExpectedPhaseChange));
- assertListenerStatus();
+ // NEXT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ final DateTime futureNow = clock.getUTCNow();
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ assertTrue(futureNow.isAfter(nextExpectedPhaseChange));
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testChangePlanChangePlanAlignEOTWithChargeThroughDate() throws SubscriptionBillingApiException {
+ public void testChangePlanChangePlanAlignEOTWithChargeThroughDate() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
tChangePlanChangePlanAlignEOTWithChargeThroughDate("Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, "Assault-Rifle", BillingPeriod.ANNUAL, "rescue");
}
private void tChangePlanChangePlanAlignEOTWithChargeThroughDate(final String fromProd, final BillingPeriod fromTerm, final String fromPlanSet,
- final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBillingApiException {
- try {
- DateTime currentTime = clock.getUTCNow();
-
- DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
- final PlanPhase trialPhase = subscription.getCurrentPhase();
- final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
- // MOVE TO NEXT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- currentTime = clock.getUTCNow();
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
- currentTime = clock.getUTCNow();
- assertListenerStatus();
-
- // SET CTD
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
- subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-
- // RE READ SUBSCRIPTION + CHECK CURRENT PHASE
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- PlanPhase currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
- // CHANGE PLAN
- currentTime = clock.getUTCNow();
- subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
-
- checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.EVERGREEN);
-
- // CHECK CHANGE DID NOT KICK IN YET
- testListener.setNonExpectedMode();
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- assertFalse(testListener.isCompleted(3000));
- testListener.reset();
-
- // MOVE TO AFTER CTD
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- currentTime = clock.getUTCNow();
- assertListenerStatus();
+ final String toProd, final BillingPeriod toTerm, final String toPlanSet) throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+ DateTime currentTime = clock.getUTCNow();
+
+ DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, fromProd, fromTerm, fromPlanSet);
+ final PlanPhase trialPhase = subscription.getCurrentPhase();
+ final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+ // MOVE TO NEXT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ currentTime = clock.getUTCNow();
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ currentTime = clock.getUTCNow();
+ assertListenerStatus();
+
+ // SET CTD
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+ subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+
+ // RE READ SUBSCRIPTION + CHECK CURRENT PHASE
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+ // CHANGE PLAN
+ currentTime = clock.getUTCNow();
+ subscription.changePlan(toProd, toTerm, toPlanSet, callContext);
+
+ checkChangePlan(subscription, fromProd, ProductCategory.BASE, fromTerm, PhaseType.EVERGREEN);
+
+ // CHECK CHANGE DID NOT KICK IN YET
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
+
+ // MOVE TO AFTER CTD
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ currentTime = clock.getUTCNow();
+ assertListenerStatus();
+
+ // CHECK CORRECT PRODUCT, PHASE, PLAN SET
+ final String currentProduct = subscription.getCurrentPlan().getProduct().getName();
+ assertNotNull(currentProduct);
+ assertEquals(currentProduct, toProd);
+ currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
- // CHECK CORRECT PRODUCT, PHASE, PLAN SET
- final String currentProduct = subscription.getCurrentPlan().getProduct().getName();
- assertNotNull(currentProduct);
- assertEquals(currentProduct, toProd);
- currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+ // MOVE TIME ABOUT ONE MONTH BEFORE NEXT EXPECTED PHASE CHANGE
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(11));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ currentTime = clock.getUTCNow();
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
- // MOVE TIME ABOUT ONE MONTH BEFORE NEXT EXPECTED PHASE CHANGE
- testListener.setNonExpectedMode();
- testListener.pushExpectedEvent(NextEvent.PHASE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(11));
- clock.addDeltaFromReality(it.toDurationMillis());
- currentTime = clock.getUTCNow();
- assertFalse(testListener.isCompleted(3000));
- testListener.reset();
+ final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(newChargedThroughDate, currentPhase.getDuration());
+ testUtil.checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
- final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(newChargedThroughDate, currentPhase.getDuration());
- testUtil.checkNextPhaseChange(subscription, 1, nextExpectedPhaseChange);
+ // MOVE TIME RIGHT AFTER NEXT EXPECTED PHASE CHANGE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
- // MOVE TIME RIGHT AFTER NEXT EXPECTED PHASE CHANGE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
+ currentTime = clock.getUTCNow();
+ assertListenerStatus();
- currentTime = clock.getUTCNow();
- assertListenerStatus();
-
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testMultipleChangeLastIMM() throws SubscriptionBillingApiException {
- try {
- DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
- final PlanPhase trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
- // MOVE TO NEXT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
-
- assertListenerStatus();
-
- // SET CTD
- final List<Duration> durationList = new ArrayList<Duration>();
- durationList.add(trialPhase.getDuration());
- //durationList.add(subscription.getCurrentPhase().getDuration());
- final DateTime startDiscountPhase = TestSubscriptionHelper.addDuration(subscription.getStartDate(), durationList);
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(startDiscountPhase, ctd);
- subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
- // CHANGE EOT
- testListener.setNonExpectedMode();
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount", callContext);
- assertFalse(testListener.isCompleted(3000));
- testListener.reset();
-
- // CHANGE
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
- assertListenerStatus();
+ public void testMultipleChangeLastIMM() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+ DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Assault-Rifle", BillingPeriod.MONTHLY, "gunclubDiscount");
+ final PlanPhase trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+ // MOVE TO NEXT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+
+ assertListenerStatus();
+
+ // SET CTD
+ final List<Duration> durationList = new ArrayList<Duration>();
+ durationList.add(trialPhase.getDuration());
+ //durationList.add(subscription.getCurrentPhase().getDuration());
+ final DateTime startDiscountPhase = TestSubscriptionHelper.addDuration(subscription.getStartDate(), durationList);
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(startDiscountPhase, ctd);
+ subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+ // CHANGE EOT
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ subscription.changePlan("Pistol", BillingPeriod.MONTHLY, "gunclubDiscount", callContext);
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
+
+ // CHANGE
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
+ assertListenerStatus();
- final Plan currentPlan = subscription.getCurrentPlan();
- assertNotNull(currentPlan);
- assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
- assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
- assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
+ final Plan currentPlan = subscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
- final PlanPhase currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+ final PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testMultipleChangeLastEOT() throws SubscriptionBillingApiException {
- try {
- DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount");
- final PlanPhase trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
- testListener.pushExpectedEvent(NextEvent.PHASE);
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // SET CTD
- final List<Duration> durationList = new ArrayList<Duration>();
- durationList.add(trialPhase.getDuration());
- final DateTime startDiscountPhase = TestSubscriptionHelper.addDuration(subscription.getStartDate(), durationList);
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(startDiscountPhase, ctd);
- subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
- // CHANGE EOT
- testListener.setNonExpectedMode();
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Shotgun", BillingPeriod.MONTHLY, "gunclubDiscount", callContext);
- assertFalse(testListener.isCompleted(3000));
- testListener.reset();
-
- // CHANGE EOT
- testListener.setNonExpectedMode();
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
- assertFalse(testListener.isCompleted(3000));
- testListener.reset();
-
- // CHECK NO CHANGE OCCURED YET
- Plan currentPlan = subscription.getCurrentPlan();
- assertNotNull(currentPlan);
- assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
- assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
- assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
+ public void testMultipleChangeLastEOT() throws SubscriptionBillingApiException, SubscriptionBaseApiException {
+ DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount");
+ final PlanPhase trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // SET CTD
+ final List<Duration> durationList = new ArrayList<Duration>();
+ durationList.add(trialPhase.getDuration());
+ final DateTime startDiscountPhase = TestSubscriptionHelper.addDuration(subscription.getStartDate(), durationList);
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(startDiscountPhase, ctd);
+ subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+ // CHANGE EOT
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ subscription.changePlan("Shotgun", BillingPeriod.MONTHLY, "gunclubDiscount", callContext);
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
+
+ // CHANGE EOT
+ testListener.setNonExpectedMode();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ subscription.changePlan("Pistol", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
+ assertFalse(testListener.isCompleted(3000));
+ testListener.reset();
+
+ // CHECK NO CHANGE OCCURED YET
+ Plan currentPlan = subscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
- PlanPhase currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+ PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
- // ACTIVATE CHNAGE BY MOVING AFTER CTD
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
- clock.addDeltaFromReality(it.toDurationMillis());
+ // ACTIVATE CHNAGE BY MOVING AFTER CTD
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
+ assertListenerStatus();
- currentPlan = subscription.getCurrentPlan();
- assertNotNull(currentPlan);
- assertEquals(currentPlan.getProduct().getName(), "Pistol");
- assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
- assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
+ currentPlan = subscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), "Pistol");
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
- currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+ currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
- // MOVE TO NEXT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(6));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ // MOVE TO NEXT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusMonths(6));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- currentPlan = subscription.getCurrentPlan();
- assertNotNull(currentPlan);
- assertEquals(currentPlan.getProduct().getName(), "Pistol");
- assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
- assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
+ currentPlan = subscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), "Pistol");
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
- currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+ currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testCorrectPhaseAlignmentOnChange() {
- try {
- DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
- PlanPhase trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
-
-
- // MOVE 2 DAYS AHEAD
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(2));
- clock.addDeltaFromReality(it.toDurationMillis());
-
- // CHANGE IMMEDIATE TO A 3 PHASES PLAN
- testListener.reset();
- testListener.pushExpectedEvent(NextEvent.CHANGE);
- subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
- assertListenerStatus();
- testListener.reset();
-
- // CHECK EVERYTHING LOOKS CORRECT
- final Plan currentPlan = subscription.getCurrentPlan();
- assertNotNull(currentPlan);
- assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
- assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
- assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
-
- trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+ public void testCorrectPhaseAlignmentOnChange() throws SubscriptionBaseApiException {
+ DefaultSubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
+ PlanPhase trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
+ // MOVE 2 DAYS AHEAD
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(2));
+ clock.addDeltaFromReality(it.toDurationMillis());
+
+ // CHANGE IMMEDIATE TO A 3 PHASES PLAN
+ testListener.reset();
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
+ subscription.changePlan("Assault-Rifle", BillingPeriod.ANNUAL, "gunclubDiscount", callContext);
+ assertListenerStatus();
+ testListener.reset();
+
+ // CHECK EVERYTHING LOOKS CORRECT
+ final Plan currentPlan = subscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), "Assault-Rifle");
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.ANNUAL);
- // MOVE AFTER TRIAL PERIOD -> DISCOUNT
- testListener.pushExpectedEvent(NextEvent.PHASE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
- clock.addDeltaFromReality(it.toDurationMillis());
+ trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
- assertListenerStatus();
+ // MOVE AFTER TRIAL PERIOD -> DISCOUNT
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(30));
+ clock.addDeltaFromReality(it.toDurationMillis());
- trialPhase = subscription.getCurrentPhase();
- assertEquals(trialPhase.getPhaseType(), PhaseType.DISCOUNT);
+ assertListenerStatus();
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ trialPhase = subscription.getCurrentPhase();
+ assertEquals(trialPhase.getPhaseType(), PhaseType.DISCOUNT);
- final DateTime expectedNextPhaseDate = subscription.getStartDate().plusDays(30).plusMonths(6);
- final SubscriptionBaseTransition nextPhase = subscription.getPendingTransition();
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- final DateTime nextPhaseEffectiveDate = nextPhase.getEffectiveTransitionTime();
- assertEquals(nextPhaseEffectiveDate, expectedNextPhaseDate);
+ final DateTime expectedNextPhaseDate = subscription.getStartDate().plusDays(30).plusMonths(6);
+ final SubscriptionBaseTransition nextPhase = subscription.getPendingTransition();
- assertListenerStatus();
+ final DateTime nextPhaseEffectiveDate = nextPhase.getEffectiveTransitionTime();
+ assertEquals(nextPhaseEffectiveDate, expectedNextPhaseDate);
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ assertListenerStatus();
}
}
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java
index b9279a3..de6eef8 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiCreate.java
@@ -20,8 +20,6 @@ import java.util.List;
import org.joda.time.DateTime;
import org.joda.time.Interval;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -44,260 +42,223 @@ import static org.testng.Assert.assertTrue;
public class TestUserApiCreate extends SubscriptionTestSuiteWithEmbeddedDB {
- private static final Logger log = LoggerFactory.getLogger(TestUserApiCreate.class);
-
-
@Test(groups = "slow")
- public void testCreateBundlesWithSameExternalKeys() {
- try {
- final DateTime init = clock.getUTCNow();
- final DateTime requestedDate = init.minusYears(1);
-
- final String productName = "Shotgun";
- final BillingPeriod term = BillingPeriod.MONTHLY;
- final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+ public void testCreateBundlesWithSameExternalKeys() throws SubscriptionBaseApiException {
+ final DateTime init = clock.getUTCNow();
+ final DateTime requestedDate = init.minusYears(1);
+ final String productName = "Shotgun";
+ final BillingPeriod term = BillingPeriod.MONTHLY;
+ final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
- testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.PHASE);
- final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
- assertListenerStatus();
- assertNotNull(subscription);
-
- try {
- final SubscriptionBaseBundle newBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), DefaultSubscriptionTestInitializer.DEFAULT_BUNDLE_KEY, internalCallContext);
-
- Assert.fail("Unexpected success to create a bundle");
- } catch (SubscriptionBaseApiException e) {
- Assert.assertEquals(e.getCode(), ErrorCode.SUB_CREATE_ACTIVE_BUNDLE_KEY_EXISTS.getCode());
- }
-
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- subscription.cancelWithDate(clock.getUTCNow(), callContext);
- assertListenerStatus();
+ testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.PHASE);
+ final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+ testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+ assertListenerStatus();
+ assertNotNull(subscription);
+ try {
final SubscriptionBaseBundle newBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), DefaultSubscriptionTestInitializer.DEFAULT_BUNDLE_KEY, internalCallContext);
- assertNotNull(newBundle);
- assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundle.getCreatedDate()), 0);
-
- testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.PHASE);
- final DefaultSubscriptionBase newSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(newBundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
- assertListenerStatus();
- assertNotNull(newSubscription);
-
+ Assert.fail("Unexpected success to create a bundle");
} catch (SubscriptionBaseApiException e) {
- log.error("Unexpected exception", e);
- Assert.fail(e.getMessage());
+ Assert.assertEquals(e.getCode(), ErrorCode.SUB_CREATE_ACTIVE_BUNDLE_KEY_EXISTS.getCode());
}
- }
- @Test(groups = "slow")
- public void testCreateWithRequestedDate() {
- try {
- final DateTime init = clock.getUTCNow();
- final DateTime requestedDate = init.minusYears(1);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ subscription.cancelWithDate(clock.getUTCNow(), callContext);
+ assertListenerStatus();
- final String productName = "Shotgun";
- final BillingPeriod term = BillingPeriod.MONTHLY;
- final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+ final SubscriptionBaseBundle newBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), DefaultSubscriptionTestInitializer.DEFAULT_BUNDLE_KEY, internalCallContext);
+ assertNotNull(newBundle);
+ assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundle.getCreatedDate()), 0);
- testListener.pushExpectedEvent(NextEvent.PHASE);
- testListener.pushExpectedEvent(NextEvent.CREATE);
+ testListener.pushExpectedEvents(NextEvent.CREATE, NextEvent.PHASE);
+ final DefaultSubscriptionBase newSubscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(newBundle.getId(),
+ testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+ assertListenerStatus();
+ assertNotNull(newSubscription);
+ }
- final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
- assertNotNull(subscription);
+ @Test(groups = "slow")
+ public void testCreateWithRequestedDate() throws SubscriptionBaseApiException {
+ final DateTime init = clock.getUTCNow();
+ final DateTime requestedDate = init.minusYears(1);
- //
- // In addition to Alignment phase we also test SubscriptionBaseTransition eventIds and created dates.
- // Keep tracks of row events to compare with ids and created dates returned by SubscriptionBaseTransition later.
- //
- final List<SubscriptionBaseEvent> events = subscription.getEvents();
- Assert.assertEquals(events.size(), 2);
+ final String productName = "Shotgun";
+ final BillingPeriod term = BillingPeriod.MONTHLY;
+ final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
- final SubscriptionBaseEvent trialEvent = events.get(0);
- final SubscriptionBaseEvent phaseEvent = events.get(1);
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ testListener.pushExpectedEvent(NextEvent.CREATE);
+ final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+ testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+ assertNotNull(subscription);
- assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
- //assertEquals(subscription.getAccount(), account.getId());
- assertEquals(subscription.getBundleId(), bundle.getId());
- assertEquals(subscription.getStartDate(), requestedDate);
+ //
+ // In addition to Alignment phase we also test SubscriptionBaseTransition eventIds and created dates.
+ // Keep tracks of row events to compare with ids and created dates returned by SubscriptionBaseTransition later.
+ //
+ final List<SubscriptionBaseEvent> events = subscription.getEvents();
+ Assert.assertEquals(events.size(), 2);
- assertListenerStatus();
+ final SubscriptionBaseEvent trialEvent = events.get(0);
+ final SubscriptionBaseEvent phaseEvent = events.get(1);
- final SubscriptionBaseTransition transition = subscription.getPreviousTransition();
+ assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
+ //assertEquals(subscription.getAccount(), account.getId());
+ assertEquals(subscription.getBundleId(), bundle.getId());
+ assertEquals(subscription.getStartDate(), requestedDate);
- assertEquals(transition.getPreviousEventId(), trialEvent.getId());
- assertEquals(transition.getNextEventId(), phaseEvent.getId());
+ assertListenerStatus();
- assertEquals(transition.getPreviousEventCreatedDate().compareTo(trialEvent.getCreatedDate()), 0);
- assertEquals(transition.getNextEventCreatedDate().compareTo(phaseEvent.getCreatedDate()), 0);
+ final SubscriptionBaseTransition transition = subscription.getPreviousTransition();
- } catch (SubscriptionBaseApiException e) {
- log.error("Unexpected exception", e);
- Assert.fail(e.getMessage());
- }
+ assertEquals(transition.getPreviousEventId(), trialEvent.getId());
+ assertEquals(transition.getNextEventId(), phaseEvent.getId());
+
+ assertEquals(transition.getPreviousEventCreatedDate().compareTo(trialEvent.getCreatedDate()), 0);
+ assertEquals(transition.getNextEventCreatedDate().compareTo(phaseEvent.getCreatedDate()), 0);
}
@Test(groups = "slow")
- public void testCreateWithInitialPhase() {
- try {
- final DateTime init = clock.getUTCNow();
-
- final String productName = "Shotgun";
- final BillingPeriod term = BillingPeriod.MONTHLY;
- final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+ public void testCreateWithInitialPhase() throws SubscriptionBaseApiException {
+ final DateTime init = clock.getUTCNow();
- testListener.pushExpectedEvent(NextEvent.CREATE);
+ final String productName = "Shotgun";
+ final BillingPeriod term = BillingPeriod.MONTHLY;
+ final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
- final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, PhaseType.EVERGREEN), clock.getUTCNow(), internalCallContext);
- assertNotNull(subscription);
+ testListener.pushExpectedEvent(NextEvent.CREATE);
- assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
- //assertEquals(subscription.getAccount(), account.getId());
- assertEquals(subscription.getBundleId(), bundle.getId());
- testUtil.assertDateWithin(subscription.getStartDate(), init, clock.getUTCNow());
- testUtil.assertDateWithin(subscription.getBundleStartDate(), init, clock.getUTCNow());
+ final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+ testUtil.getProductSpecifier(productName, planSetName, term, PhaseType.EVERGREEN), clock.getUTCNow(), internalCallContext);
+ assertNotNull(subscription);
- final Plan currentPlan = subscription.getCurrentPlan();
- assertNotNull(currentPlan);
- assertEquals(currentPlan.getProduct().getName(), productName);
- assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
- assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
+ assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
+ //assertEquals(subscription.getAccount(), account.getId());
+ assertEquals(subscription.getBundleId(), bundle.getId());
+ testUtil.assertDateWithin(subscription.getStartDate(), init, clock.getUTCNow());
+ testUtil.assertDateWithin(subscription.getBundleStartDate(), init, clock.getUTCNow());
- final PlanPhase currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+ final Plan currentPlan = subscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), productName);
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
- assertListenerStatus();
+ final PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testSimpleCreateSubscription() {
- try {
- final DateTime init = clock.getUTCNow();
-
- final String productName = "Shotgun";
- final BillingPeriod term = BillingPeriod.MONTHLY;
- final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
-
- testListener.pushExpectedEvent(NextEvent.CREATE);
-
- final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null),
- clock.getUTCNow(), internalCallContext);
- assertNotNull(subscription);
-
- assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
- //assertEquals(subscription.getAccount(), account.getId());
- assertEquals(subscription.getBundleId(), bundle.getId());
- testUtil.assertDateWithin(subscription.getStartDate(), init, clock.getUTCNow());
- testUtil.assertDateWithin(subscription.getBundleStartDate(), init, clock.getUTCNow());
-
- final Plan currentPlan = subscription.getCurrentPlan();
- assertNotNull(currentPlan);
- assertEquals(currentPlan.getProduct().getName(), productName);
- assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
- assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
-
- final PlanPhase currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
- assertListenerStatus();
-
- final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
- assertNotNull(events);
- testUtil.printEvents(events);
- assertTrue(events.size() == 1);
- assertTrue(events.get(0) instanceof PhaseEvent);
- final DateTime nextPhaseChange = ((PhaseEvent) events.get(0)).getEffectiveDate();
- final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), currentPhase.getDuration());
- assertEquals(nextPhaseChange, nextExpectedPhaseChange);
-
- testListener.pushExpectedEvent(NextEvent.PHASE);
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
-
- final DateTime futureNow = clock.getUTCNow();
- assertTrue(futureNow.isAfter(nextPhaseChange));
-
- assertListenerStatus();
-
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ public void testSimpleCreateSubscription() throws SubscriptionBaseApiException {
+ final DateTime init = clock.getUTCNow();
+
+ final String productName = "Shotgun";
+ final BillingPeriod term = BillingPeriod.MONTHLY;
+ final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+
+ testListener.pushExpectedEvent(NextEvent.CREATE);
+
+ final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+ testUtil.getProductSpecifier(productName, planSetName, term, null),
+ clock.getUTCNow(), internalCallContext);
+ assertNotNull(subscription);
+
+ assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
+ //assertEquals(subscription.getAccount(), account.getId());
+ assertEquals(subscription.getBundleId(), bundle.getId());
+ testUtil.assertDateWithin(subscription.getStartDate(), init, clock.getUTCNow());
+ testUtil.assertDateWithin(subscription.getBundleStartDate(), init, clock.getUTCNow());
+
+ final Plan currentPlan = subscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), productName);
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
+
+ final PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
+ assertListenerStatus();
+
+ final List<SubscriptionBaseEvent> events = dao.getPendingEventsForSubscription(subscription.getId(), internalCallContext);
+ assertNotNull(events);
+ testUtil.printEvents(events);
+ assertTrue(events.size() == 1);
+ assertTrue(events.get(0) instanceof PhaseEvent);
+ final DateTime nextPhaseChange = ((PhaseEvent) events.get(0)).getEffectiveDate();
+ final DateTime nextExpectedPhaseChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), currentPhase.getDuration());
+ assertEquals(nextPhaseChange, nextExpectedPhaseChange);
+
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+
+ final DateTime futureNow = clock.getUTCNow();
+ assertTrue(futureNow.isAfter(nextPhaseChange));
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testSimpleSubscriptionThroughPhases() {
- try {
- final String productName = "Pistol";
- final BillingPeriod term = BillingPeriod.ANNUAL;
- final String planSetName = "gunclubDiscount";
-
- testListener.pushExpectedEvent(NextEvent.CREATE);
-
- // CREATE SUBSCRIPTION
- DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), internalCallContext);
- assertNotNull(subscription);
-
- PlanPhase currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
- assertListenerStatus();
-
- // MOVE TO DISCOUNT PHASE
- testListener.pushExpectedEvent(NextEvent.PHASE);
- Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
- currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
-
- // MOVE TO EVERGREEN PHASE + RE-READ SUBSCRIPTION
- testListener.pushExpectedEvent(NextEvent.PHASE);
- it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusYears(1));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
- currentPhase = subscription.getCurrentPhase();
- assertNotNull(currentPhase);
- assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
-
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ public void testSimpleSubscriptionThroughPhases() throws SubscriptionBaseApiException {
+ final String productName = "Pistol";
+ final BillingPeriod term = BillingPeriod.ANNUAL;
+ final String planSetName = "gunclubDiscount";
+
+ testListener.pushExpectedEvent(NextEvent.CREATE);
+
+ // CREATE SUBSCRIPTION
+ DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+ testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), internalCallContext);
+ assertNotNull(subscription);
+
+ PlanPhase currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
+ assertListenerStatus();
+
+ // MOVE TO DISCOUNT PHASE
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+ currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.DISCOUNT);
+
+ // MOVE TO EVERGREEN PHASE + RE-READ SUBSCRIPTION
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusYears(1));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ subscription = (DefaultSubscriptionBase) subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+ currentPhase = subscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testSubscriptionWithAddOn() {
- try {
- final String productName = "Shotgun";
- final BillingPeriod term = BillingPeriod.ANNUAL;
- final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+ public void testSubscriptionWithAddOn() throws SubscriptionBaseApiException {
+ final String productName = "Shotgun";
+ final BillingPeriod term = BillingPeriod.ANNUAL;
+ final String planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
- testListener.pushExpectedEvent(NextEvent.CREATE);
+ testListener.pushExpectedEvent(NextEvent.CREATE);
- final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), internalCallContext);
- assertNotNull(subscription);
+ final DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
+ testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), internalCallContext);
+ assertNotNull(subscription);
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- Assert.fail(e.getMessage());
- }
+ assertListenerStatus();
}
}
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
index 5bd00ee..23a1b15 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiError.java
@@ -22,7 +22,6 @@ import javax.annotation.Nullable;
import org.joda.time.DateTime;
import org.joda.time.Interval;
-import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -37,17 +36,12 @@ import com.ning.billing.clock.DefaultClock;
import com.ning.billing.subscription.SubscriptionTestSuiteNoDB;
import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.exceptions.SubscriptionBaseError;
-import com.ning.billing.util.callcontext.TenantContext;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
public class TestUserApiError extends SubscriptionTestSuiteNoDB {
- private final TenantContext tenantContext = Mockito.mock(TenantContext.class);
-
@Test(groups = "fast")
public void testCreateSubscriptionBadCatalog() {
// WRONG PRODUCTS
@@ -73,76 +67,49 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
}
@Test(groups = "fast")
- public void testCreateSubscriptionBPExists() {
- try {
- testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
- tCreateSubscriptionInternal(bundle.getId(), "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_BP_EXISTS);
- } catch (Exception e) {
- Assert.fail(e.toString());
- }
+ public void testCreateSubscriptionBPExists() throws SubscriptionBaseApiException {
+ testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
+ tCreateSubscriptionInternal(bundle.getId(), "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_BP_EXISTS);
}
@Test(groups = "fast")
- public void testCreateSubscriptionAddOnNotAvailable() {
- try {
- final UUID accountId = UUID.randomUUID();
- final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
- testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
- tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_NOT_AVAILABLE);
- } catch (Exception e) {
- Assert.fail(e.toString());
- }
+ public void testCreateSubscriptionAddOnNotAvailable() throws SubscriptionBaseApiException {
+ final UUID accountId = UUID.randomUUID();
+ final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
+ testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+ tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_NOT_AVAILABLE);
}
@Test(groups = "fast")
- public void testCreateSubscriptionAddOnIncluded() {
- log.info("Starting testCreateSubscriptionAddOnIncluded");
- try {
- final UUID accountId = UUID.randomUUID();
- final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
- testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
- tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_ALREADY_INCLUDED);
- } catch (Exception e) {
- Assert.fail(e.toString());
- }
+ public void testCreateSubscriptionAddOnIncluded() throws SubscriptionBaseApiException {
+ final UUID accountId = UUID.randomUUID();
+ final SubscriptionBaseBundle aoBundle = subscriptionInternalApi.createBundleForAccount(accountId, "myAOBundle", internalCallContext);
+ testUtil.createSubscriptionWithBundle(aoBundle.getId(), "Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+ tCreateSubscriptionInternal(aoBundle.getId(), "Telescopic-Scope", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, ErrorCode.SUB_CREATE_AO_ALREADY_INCLUDED);
}
private void tCreateSubscriptionInternal(@Nullable final UUID bundleId, @Nullable final String productName,
@Nullable final BillingPeriod term, final String planSet, final ErrorCode expected) {
try {
subscriptionInternalApi.createSubscription(bundleId,
- testUtil.getProductSpecifier(productName, planSet, term, null),
- clock.getUTCNow(), internalCallContext);
+ testUtil.getProductSpecifier(productName, planSet, term, null),
+ clock.getUTCNow(), internalCallContext);
Assert.fail("Exception expected, error code: " + expected);
} catch (SubscriptionBaseApiException e) {
assertEquals(e.getCode(), expected.getCode());
- try {
- log.info(e.getMessage());
- } catch (Throwable el) {
- assertFalse(true);
- }
}
}
@Test(groups = "fast")
- public void testChangeSubscriptionNonActive() {
+ public void testChangeSubscriptionNonActive() throws SubscriptionBaseApiException {
+ final SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
+
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
+ subscription.cancelWithDate(clock.getUTCNow(), callContext);
try {
- final SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME);
-
- testListener.pushExpectedEvent(NextEvent.CANCEL);
- subscription.cancelWithDate(clock.getUTCNow(), callContext);
- try {
- subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
- } catch (SubscriptionBaseApiException e) {
- assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_NON_ACTIVE.getCode());
- try {
- log.info(e.getMessage());
- } catch (Throwable el) {
- assertFalse(true);
- }
- }
- } catch (Exception e) {
- Assert.fail(e.toString());
+ subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
+ } catch (SubscriptionBaseApiException e) {
+ assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_NON_ACTIVE.getCode());
}
}
@@ -165,66 +132,44 @@ public class TestUserApiError extends SubscriptionTestSuiteNoDB {
}
@Test(groups = "fast")
- public void testChangeSubscriptionFutureCancelled() {
+ public void testChangeSubscriptionFutureCancelled() throws SubscriptionBaseApiException {
+ SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
+ final PlanPhase trialPhase = subscription.getCurrentPhase();
+
+ // MOVE TO NEXT PHASE
+ final PlanPhase currentPhase = subscription.getCurrentPhase();
+ testListener.pushExpectedEvent(NextEvent.PHASE);
+ final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
+ clock.addDeltaFromReality(it.toDurationMillis());
+ assertListenerStatus();
+
+ // SET CTD TO CANCEL IN FUTURE
+ final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
+ final Duration ctd = testUtil.getDurationMonth(1);
+ final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
+ subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
+
+ subscription = subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
+
+ subscription.cancelWithPolicy(BillingActionPolicy.END_OF_TERM, callContext);
try {
- SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
- final PlanPhase trialPhase = subscription.getCurrentPhase();
-
- // MOVE TO NEXT PHASE
- final PlanPhase currentPhase = subscription.getCurrentPhase();
- testListener.pushExpectedEvent(NextEvent.PHASE);
- final Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(31));
- clock.addDeltaFromReality(it.toDurationMillis());
- assertListenerStatus();
-
- // SET CTD TO CANCEL IN FUTURE
- final DateTime expectedPhaseTrialChange = TestSubscriptionHelper.addDuration(subscription.getStartDate(), trialPhase.getDuration());
- final Duration ctd = testUtil.getDurationMonth(1);
- final DateTime newChargedThroughDate = TestSubscriptionHelper.addDuration(expectedPhaseTrialChange, ctd);
- subscriptionInternalApi.setChargedThroughDate(subscription.getId(), newChargedThroughDate, internalCallContext);
-
- subscription = subscriptionInternalApi.getSubscriptionFromId(subscription.getId(), internalCallContext);
-
- subscription.cancelWithPolicy(BillingActionPolicy.END_OF_TERM, callContext);
- try {
- subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
- } catch (SubscriptionBaseApiException e) {
- assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_FUTURE_CANCELLED.getCode());
- try {
- log.info(e.getMessage());
- } catch (Throwable el) {
- assertFalse(true);
- }
- }
-
- assertListenerStatus();
- } catch (Exception e) {
- Assert.fail(e.toString());
+ subscription.changePlanWithDate("Pistol", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, clock.getUTCNow(), callContext);
+ } catch (SubscriptionBaseApiException e) {
+ assertEquals(e.getCode(), ErrorCode.SUB_CHANGE_FUTURE_CANCELLED.getCode());
}
- }
- @Test(enabled = false, groups = "fast")
- public void testCancelBadState() {
+ assertListenerStatus();
}
@Test(groups = "fast")
- public void testUncancelBadState() {
+ public void testUncancelBadState() throws SubscriptionBaseApiException {
+ final SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
+
try {
- final SubscriptionBase subscription = testUtil.createSubscription(bundle, "Shotgun", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME);
-
- try {
- subscription.uncancel(callContext);
- } catch (SubscriptionBaseApiException e) {
- assertEquals(e.getCode(), ErrorCode.SUB_UNCANCEL_BAD_STATE.getCode());
- try {
- log.info(e.getMessage());
- } catch (Throwable el) {
- assertFalse(true);
- }
- }
- assertListenerStatus();
- } catch (Exception e) {
- Assert.fail(e.toString());
+ subscription.uncancel(callContext);
+ } catch (SubscriptionBaseApiException e) {
+ assertEquals(e.getCode(), ErrorCode.SUB_UNCANCEL_BAD_STATE.getCode());
}
+ assertListenerStatus();
}
}
diff --git a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java
index e217d91..65bc6e7 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/api/user/TestUserApiRecreate.java
@@ -17,8 +17,6 @@
package com.ning.billing.subscription.api.user;
import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -33,28 +31,16 @@ import static org.testng.Assert.assertTrue;
public abstract class TestUserApiRecreate extends SubscriptionTestSuiteWithEmbeddedDB {
- private static final Logger log = LoggerFactory.getLogger(TestUserApiRecreate.class);
-
@Test(groups = "slow")
- public void testRecreateWithBPCanceledThroughSubscription() {
- try {
- testCreateAndRecreate(false);
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- log.error("Unexpected exception", e);
- Assert.fail(e.getMessage());
- }
+ public void testRecreateWithBPCanceledThroughSubscription() throws SubscriptionBaseApiException {
+ testCreateAndRecreate(false);
+ assertListenerStatus();
}
@Test(groups = "slow")
- public void testCreateWithBPCanceledFromUserApi() {
- try {
- testCreateAndRecreate(true);
- assertListenerStatus();
- } catch (SubscriptionBaseApiException e) {
- log.error("Unexpected exception", e);
- Assert.fail(e.getMessage());
- }
+ public void testCreateWithBPCanceledFromUserApi() throws SubscriptionBaseApiException {
+ testCreateAndRecreate(true);
+ assertListenerStatus();
}
private DefaultSubscriptionBase testCreateAndRecreate(final boolean fromUserAPi) throws SubscriptionBaseApiException {
@@ -68,7 +54,7 @@ public abstract class TestUserApiRecreate extends SubscriptionTestSuiteWithEmbed
testListener.pushExpectedEvent(NextEvent.PHASE);
testListener.pushExpectedEvent(NextEvent.CREATE);
DefaultSubscriptionBase subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+ testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
assertNotNull(subscription);
assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
assertEquals(subscription.getBundleId(), bundle.getId());
@@ -82,10 +68,9 @@ public abstract class TestUserApiRecreate extends SubscriptionTestSuiteWithEmbed
term = BillingPeriod.MONTHLY;
planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
try {
-
if (fromUserAPi) {
subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+ testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
} else {
subscription.recreate(testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, callContext);
}
@@ -110,7 +95,7 @@ public abstract class TestUserApiRecreate extends SubscriptionTestSuiteWithEmbed
if (fromUserAPi) {
subscription = (DefaultSubscriptionBase) subscriptionInternalApi.createSubscription(bundle.getId(),
- testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
+ testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, internalCallContext);
} else {
subscription.recreate(testUtil.getProductSpecifier(productName, planSetName, term, null), clock.getUTCNow(), callContext);
}
diff --git a/subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java b/subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java
index b56b56e..0bbc2b1 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/DefaultSubscriptionTestInitializer.java
@@ -26,17 +26,17 @@ import org.slf4j.LoggerFactory;
import com.ning.billing.account.api.AccountData;
import com.ning.billing.api.TestApiListener;
import com.ning.billing.api.TestListenerStatus;
+import com.ning.billing.callcontext.InternalCallContext;
import com.ning.billing.catalog.DefaultCatalogService;
import com.ning.billing.catalog.api.Catalog;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.clock.ClockMock;
import com.ning.billing.mock.MockAccountBuilder;
+import com.ning.billing.subscription.api.SubscriptionBaseInternalApi;
import com.ning.billing.subscription.api.SubscriptionBaseService;
import com.ning.billing.subscription.api.user.SubscriptionBaseBundle;
import com.ning.billing.subscription.engine.core.DefaultSubscriptionBaseService;
-import com.ning.billing.callcontext.InternalCallContext;
-import com.ning.billing.subscription.api.SubscriptionBaseInternalApi;
import com.ning.billing.util.svcsapi.bus.BusService;
import static org.testng.Assert.assertNotNull;
@@ -79,18 +79,17 @@ public class DefaultSubscriptionTestInitializer implements SubscriptionTestIniti
public SubscriptionBaseBundle initBundle(final SubscriptionBaseInternalApi subscriptionApi, final InternalCallContext callContext) throws Exception {
final UUID accountId = UUID.randomUUID();
- final SubscriptionBaseBundle bundle = subscriptionApi.createBundleForAccount(accountId, DEFAULT_BUNDLE_KEY, callContext);
+ final SubscriptionBaseBundle bundle = subscriptionApi.createBundleForAccount(accountId, DEFAULT_BUNDLE_KEY, callContext);
assertNotNull(bundle);
return bundle;
}
-
public void startTestFamework(final TestApiListener testListener,
final TestListenerStatus testListenerStatus,
final ClockMock clock,
final BusService busService,
final SubscriptionBaseService subscriptionBaseService) throws Exception {
- log.warn("STARTING TEST FRAMEWORK");
+ log.debug("STARTING TEST FRAMEWORK");
resetTestListener(testListener, testListenerStatus);
@@ -100,21 +99,20 @@ public class DefaultSubscriptionTestInitializer implements SubscriptionTestIniti
restartSubscriptionService(subscriptionBaseService);
- log.warn("STARTED TEST FRAMEWORK");
+ log.debug("STARTED TEST FRAMEWORK");
}
public void stopTestFramework(final TestApiListener testListener,
final BusService busService,
final SubscriptionBaseService subscriptionBaseService) throws Exception {
- log.warn("STOPPING TEST FRAMEWORK");
+ log.debug("STOPPING TEST FRAMEWORK");
stopBusAndUnregisterListener(busService, testListener);
stopSubscriptionService(subscriptionBaseService);
- log.warn("STOPPED TEST FRAMEWORK");
+ log.debug("STOPPED TEST FRAMEWORK");
}
-
private void resetTestListener(final TestApiListener testListener, final TestListenerStatus testListenerStatus) {
// RESET LIST OF EXPECTED EVENTS
if (testListener != null) {
diff --git a/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java b/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
index f714b32..77ce836 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoMemory.java
@@ -30,10 +30,17 @@ import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.ning.billing.callcontext.InternalCallContext;
+import com.ning.billing.callcontext.InternalTenantContext;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.catalog.api.TimeUnit;
import com.ning.billing.clock.Clock;
+import com.ning.billing.notificationq.api.NotificationEvent;
+import com.ning.billing.notificationq.api.NotificationQueue;
+import com.ning.billing.notificationq.api.NotificationQueueService;
+import com.ning.billing.notificationq.api.NotificationQueueService.NoSuchNotificationQueue;
+import com.ning.billing.subscription.api.SubscriptionBase;
import com.ning.billing.subscription.api.migration.AccountMigrationData;
import com.ning.billing.subscription.api.migration.AccountMigrationData.BundleMigrationData;
import com.ning.billing.subscription.api.migration.AccountMigrationData.SubscriptionMigrationData;
@@ -49,13 +56,6 @@ import com.ning.billing.subscription.events.SubscriptionBaseEvent;
import com.ning.billing.subscription.events.SubscriptionBaseEvent.EventType;
import com.ning.billing.subscription.events.user.ApiEvent;
import com.ning.billing.subscription.events.user.ApiEventType;
-import com.ning.billing.notificationq.api.NotificationEvent;
-import com.ning.billing.notificationq.api.NotificationQueue;
-import com.ning.billing.notificationq.api.NotificationQueueService;
-import com.ning.billing.notificationq.api.NotificationQueueService.NoSuchNotificationQueue;
-import com.ning.billing.subscription.api.SubscriptionBase;
-import com.ning.billing.callcontext.InternalCallContext;
-import com.ning.billing.callcontext.InternalTenantContext;
import com.ning.billing.util.entity.dao.EntitySqlDao;
import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
diff --git a/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java b/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java
index 37a4542..0bf99ec 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/engine/dao/MockSubscriptionDaoSql.java
@@ -21,8 +21,8 @@ import org.skife.jdbi.v2.IDBI;
import com.ning.billing.bus.api.PersistentBus;
import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.clock.Clock;
-import com.ning.billing.subscription.engine.addon.AddonUtils;
import com.ning.billing.notificationq.api.NotificationQueueService;
+import com.ning.billing.subscription.engine.addon.AddonUtils;
import com.ning.billing.util.cache.CacheControllerDispatcher;
import com.ning.billing.util.dao.NonEntityDao;
diff --git a/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModule.java b/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModule.java
index 5af4a43..c4a1020 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModule.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModule.java
@@ -36,7 +36,6 @@ public class TestDefaultSubscriptionModule extends DefaultSubscriptionModule {
super(configSource);
}
-
@Override
protected void configure() {
super.configure();
diff --git a/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java b/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
index 30815b6..6dfde40 100644
--- a/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
+++ b/subscription/src/test/java/com/ning/billing/subscription/glue/TestDefaultSubscriptionModuleWithEmbeddedDB.java
@@ -21,8 +21,8 @@ import org.skife.config.ConfigSource;
import com.ning.billing.GuicyKillbillTestWithEmbeddedDBModule;
import com.ning.billing.subscription.api.timeline.RepairSubscriptionLifecycleDao;
import com.ning.billing.subscription.engine.dao.MockSubscriptionDaoSql;
-import com.ning.billing.subscription.engine.dao.SubscriptionDao;
import com.ning.billing.subscription.engine.dao.RepairSubscriptionDao;
+import com.ning.billing.subscription.engine.dao.SubscriptionDao;
import com.ning.billing.util.glue.BusModule;
import com.ning.billing.util.glue.CustomFieldModule;
import com.ning.billing.util.glue.MetricsModule;