killbill-memoizeit
Changes
entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java 34(+30 -4)
Details
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlement.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlement.java
index c04e6cd..5778669 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlement.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlement.java
@@ -46,12 +46,18 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
assertEquals(entitlement.getState(), EntitlementState.ACTIVE);
clock.addDays(5);
+
+ testListener.pushExpectedEvents(NextEvent.CANCEL, NextEvent.BLOCK);
final LocalDate cancelDate = new LocalDate(clock.getUTCNow());
entitlement.cancelEntitlementWithDate(cancelDate, true, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
+
final Entitlement entitlement2 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
assertEquals(entitlement2.getState(), EntitlementState.CANCELLED);
assertEquals(entitlement2.getEffectiveEndDate(), cancelDate);
@@ -67,17 +73,25 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
assertEquals(entitlement.getState(), EntitlementState.ACTIVE);
clock.addDays(5);
+
final LocalDate cancelDate = new LocalDate(clock.getUTCToday().plusDays(1));
entitlement.cancelEntitlementWithDate(cancelDate, true, callContext);
+
final Entitlement entitlement2 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
assertEquals(entitlement2.getState(), EntitlementState.ACTIVE);
assertEquals(entitlement2.getEffectiveEndDate(), cancelDate);
clock.addDays(1);
+
+ testListener.pushExpectedEvents(NextEvent.CANCEL, NextEvent.BLOCK);
+ assertTrue(testListener.isCompleted(DELAY));
+
final Entitlement entitlement3 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
assertEquals(entitlement3.getState(), EntitlementState.CANCELLED);
assertEquals(entitlement3.getEffectiveEndDate(), cancelDate);
@@ -93,17 +107,23 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
assertEquals(entitlement.getState(), EntitlementState.ACTIVE);
clock.addDays(5);
+
final LocalDate cancelDate = new LocalDate(clock.getUTCToday().plusDays(1));
entitlement.cancelEntitlementWithDate(cancelDate, true, callContext);
+
final Entitlement entitlement2 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
assertEquals(entitlement2.getState(), EntitlementState.ACTIVE);
assertEquals(entitlement2.getEffectiveEndDate(), cancelDate);
+ testListener.pushExpectedEvents(NextEvent.UNCANCEL);
entitlement2.uncancelEntitlement(callContext);
+ assertTrue(testListener.isCompleted(DELAY));
clock.addDays(1);
final Entitlement entitlement3 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
@@ -120,9 +140,13 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
+ testListener.pushExpectedEvents(NextEvent.CANCEL, NextEvent.BLOCK);
final Entitlement cancelledEntitlement = entitlement.cancelEntitlementWithPolicy(EntitlementActionPolicy.END_OF_TERM, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
assertEquals(cancelledEntitlement.getState(), EntitlementState.CANCELLED);
assertEquals(cancelledEntitlement.getEffectiveEndDate(), initialDate);
@@ -141,7 +165,9 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
final DateTime ctd = clock.getUTCNow().plusDays(30).plusMonths(1);
testListener.pushExpectedEvent(NextEvent.PHASE);
@@ -149,10 +175,13 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
clock.addDays(32);
// Set manually since no invoice
subscriptionInternalApi.setChargedThroughDate(entitlement.getId(), ctd, internalCallContext);
- assertTrue(testListener.isCompleted(5000));
+ assertTrue(testListener.isCompleted(DELAY));
final Entitlement entitlement2 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
+
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
final Entitlement entitlement3 = entitlement2.cancelEntitlementWithPolicy(EntitlementActionPolicy.IMMEDIATE, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
assertEquals(entitlement3.getState(), EntitlementState.CANCELLED);
assertEquals(entitlement3.getEffectiveEndDate(), new LocalDate(2013, 9, 8));
@@ -160,7 +189,9 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final Subscription subscription = subscriptionApi.getSubscriptionForEntitlementId(entitlement.getBaseEntitlementId(), callContext);
assertEquals(subscription.getBillingEndDate(), new LocalDate(2013, 10, 6));
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
clock.addMonths(1);
+ assertTrue(testListener.isCompleted(DELAY));
final Entitlement entitlement4 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
assertEquals(entitlement4.getState(), EntitlementState.CANCELLED);
@@ -177,16 +208,19 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
final DateTime ctd = clock.getUTCNow().plusDays(30).plusMonths(1);
testListener.pushExpectedEvent(NextEvent.PHASE);
clock.addDays(32);
// Set manually since no invoice
subscriptionInternalApi.setChargedThroughDate(entitlement.getId(), ctd, internalCallContext);
- assertTrue(testListener.isCompleted(5000));
+ assertTrue(testListener.isCompleted(DELAY));
final Entitlement entitlement2 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
+
final Entitlement entitlement3 = entitlement2.cancelEntitlementWithPolicy(EntitlementActionPolicy.END_OF_TERM, callContext);
assertEquals(entitlement3.getState(), EntitlementState.ACTIVE);
assertEquals(entitlement3.getEffectiveEndDate(), new LocalDate(ctd));
@@ -195,7 +229,9 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final Subscription subscription = subscriptionApi.getSubscriptionForEntitlementId(entitlement.getBaseEntitlementId(), callContext);
assertEquals(subscription.getBillingEndDate(), new LocalDate(2013, 10, 6));
+ testListener.pushExpectedEvents(NextEvent.CANCEL, NextEvent.BLOCK);
clock.addMonths(1);
+ assertTrue(testListener.isCompleted(DELAY));
final Entitlement entitlement4 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
assertEquals(entitlement4.getState(), EntitlementState.CANCELLED);
@@ -212,15 +248,22 @@ public class TestDefaultEntitlement extends EntitlementTestSuiteWithEmbeddedDB {
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
// Immediate change during trial
+ testListener.pushExpectedEvent(NextEvent.CHANGE);
entitlement.changePlan("Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
+
// Verify the change is immediate
final Entitlement entitlement2 = entitlementApi.getEntitlementForId(entitlement.getId(), callContext);
assertEquals(entitlement2.getLastActivePhase().getPlan().getProduct().getName(), "Assault-Rifle");
+ testListener.pushExpectedEvents(NextEvent.CANCEL, NextEvent.BLOCK);
final Entitlement cancelledEntitlement = entitlement.cancelEntitlementWithPolicy(EntitlementActionPolicy.END_OF_TERM, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
assertEquals(cancelledEntitlement.getState(), EntitlementState.CANCELLED);
assertEquals(cancelledEntitlement.getEffectiveEndDate(), initialDate);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
index f21d92f..612a949 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
@@ -50,15 +50,20 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
clock.setDay(initialDate);
final Account account = accountApi.createAccount(getAccountData(7), callContext);
+
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Keep the same object for the whole test, to make sure we refresh its state before r/w calls
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
// Add ADD_ON
// Keep the same object for the whole test, to make sure we refresh its state before r/w calls
final PlanPhaseSpecifier addOnSpec = new PlanPhaseSpecifier("Telescopic-Scope", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement addOnEntitlement = entitlementApi.addEntitlement(entitlement.getBundleId(), addOnSpec, initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
/*
// TODO It looks like we don't check if there is a future cancellation. Maybe we should?
@@ -72,7 +77,9 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
clock.addDays(3);
// Cancelling the base entitlement will cancel the add-on
+ testListener.pushExpectedEvents(NextEvent.CANCEL, NextEvent.BLOCK, NextEvent.CANCEL, NextEvent.BLOCK);
entitlement.cancelEntitlementWithDateOverrideBillingPolicy(clock.getUTCToday(), BillingActionPolicy.IMMEDIATE, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
try {
entitlement.cancelEntitlementWithDateOverrideBillingPolicy(clock.getUTCToday(), BillingActionPolicy.IMMEDIATE, callContext);
@@ -113,7 +120,9 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
assertEquals(entitlement.getAccountId(), account.getId());
assertEquals(entitlement.getExternalKey(), account.getExternalKey());
@@ -203,11 +212,15 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement baseEntitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
// Add ADD_ON
final PlanPhaseSpecifier spec1 = new PlanPhaseSpecifier("Telescopic-Scope", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement telescopicEntitlement = entitlementApi.addEntitlement(baseEntitlement.getBundleId(), spec1, initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
assertEquals(telescopicEntitlement.getAccountId(), account.getId());
assertEquals(telescopicEntitlement.getExternalKey(), account.getExternalKey());
@@ -238,16 +251,24 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement baseEntitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
clock.addDays(1);
final LocalDate effectiveDateSpec1 = new LocalDate(clock.getUTCNow(), account.getTimeZone());
final PlanPhaseSpecifier spec1 = new PlanPhaseSpecifier("Telescopic-Scope", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement telescopicEntitlement = entitlementApi.addEntitlement(baseEntitlement.getBundleId(), spec1, effectiveDateSpec1, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
// Block all entitlement in the bundle
clock.addDays(5);
+
+ testListener.pushExpectedEvents(NextEvent.PAUSE, NextEvent.BLOCK);
entitlementApi.pause(baseEntitlement.getBundleId(), new LocalDate(clock.getUTCNow()), callContext);
+ // TODO
+ //assertTrue(testListener.isCompleted(DELAY));
// Verify blocking state
final Entitlement baseEntitlement2 = entitlementApi.getEntitlementForId(baseEntitlement.getId(), callContext);
@@ -280,7 +301,11 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
}
clock.addDays(3);
+
+ testListener.pushExpectedEvents(NextEvent.RESUME, NextEvent.BLOCK);
entitlementApi.resume(baseEntitlement.getBundleId(), new LocalDate(clock.getUTCNow()), callContext);
+ // TODO
+ //assertTrue(testListener.isCompleted(DELAY));
// Verify call is idempotent
entitlementApi.resume(baseEntitlement.getBundleId(), new LocalDate(clock.getUTCNow()), callContext);
@@ -305,26 +330,27 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
clock.setDay(initialDate);
final Account accountSrc = accountApi.createAccount(getAccountData(7), callContext);
-
final Account accountDesc = accountApi.createAccount(getAccountData(15), callContext);
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, null);
// Create entitlement
+ testListener.pushExpectedEvent(NextEvent.CREATE);
final Entitlement baseEntitlement = entitlementApi.createBaseEntitlement(accountSrc.getId(), spec, accountSrc.getExternalKey(), initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
final DateTime ctd = clock.getUTCNow().plusDays(30).plusMonths(1);
testListener.pushExpectedEvent(NextEvent.PHASE);
clock.addDays(32);
// Set manually since no invoice
subscriptionInternalApi.setChargedThroughDate(baseEntitlement.getId(), ctd, internalCallContext);
- assertTrue(testListener.isCompleted(5000));
+ assertTrue(testListener.isCompleted(DELAY));
// Transfer bundle to dest account
final LocalDate effectiveDate = new LocalDate(clock.getUTCNow(), accountSrc.getTimeZone());
- testListener.pushExpectedEvent(NextEvent.TRANSFER);
+ testListener.pushExpectedEvents(NextEvent.TRANSFER, NextEvent.BLOCK);
final UUID newBundleId = entitlementApi.transferEntitlementsOverrideBillingPolicy(accountSrc.getId(), accountDesc.getId(), baseEntitlement.getExternalKey(), effectiveDate, BillingActionPolicy.END_OF_TERM, callContext);
- assertTrue(testListener.isCompleted(5000));
+ assertTrue(testListener.isCompleted(DELAY));
final Entitlement oldBaseEntitlement = entitlementApi.getAllEntitlementsForAccountIdAndExternalKey(accountSrc.getId(), accountSrc.getExternalKey(), callContext).get(0);
assertEquals(oldBaseEntitlement.getEffectiveEndDate(), effectiveDate);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultSubscriptionApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultSubscriptionApi.java
index 3ac0011..0ffe7ba 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultSubscriptionApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultSubscriptionApi.java
@@ -19,11 +19,11 @@ package com.ning.billing.entitlement.api;
import java.util.List;
import org.joda.time.LocalDate;
-import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
+import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.PriceListSet;
@@ -32,107 +32,105 @@ import com.ning.billing.entitlement.EntitlementTestSuiteWithEmbeddedDB;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
public class TestDefaultSubscriptionApi extends EntitlementTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
- public void testWithMultipleBundle() {
-
- try {
-
-
- final String externalKey = "fooXXX";
-
- final LocalDate initialDate = new LocalDate(2013, 8, 7);
- clock.setDay(initialDate);
-
- final Account account = accountApi.createAccount(getAccountData(7), callContext);
-
- final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
-
- // Create entitlement and check each field
- final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, externalKey, initialDate, callContext);
- assertEquals(entitlement.getAccountId(), account.getId());
- assertEquals(entitlement.getExternalKey(), externalKey);
-
- assertEquals(entitlement.getEffectiveStartDate(), initialDate);
- assertNull(entitlement.getEffectiveEndDate());
-
- final List<SubscriptionBundle> bundles = subscriptionApi.getSubscriptionBundlesForExternalKey(externalKey, callContext);
- assertEquals(bundles.size(), 1);
-
- // Cancel entitlement
- clock.addDays(3);
- entitlement.cancelEntitlementWithDate(new LocalDate(clock.getUTCNow(), account.getTimeZone()), true, callContext);
-
- clock.addDays(1);
- // Re-create a new bundle with same externalKey
- final PlanPhaseSpecifier spec2 = new PlanPhaseSpecifier("Pistol", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
-
- // Create entitlement and check each field
- final Entitlement entitlement2 = entitlementApi.createBaseEntitlement(account.getId(), spec2, externalKey, new LocalDate(clock.getUTCNow(), account.getTimeZone()), callContext);
- assertEquals(entitlement2.getAccountId(), account.getId());
- assertEquals(entitlement2.getExternalKey(), externalKey);
-
- final List<SubscriptionBundle> bundles2 = subscriptionApi.getSubscriptionBundlesForExternalKey(externalKey, callContext);
- assertEquals(bundles2.size(), 2);
-
- SubscriptionBundle firstbundle = bundles2.get(0);
- assertEquals(firstbundle.getSubscriptions().size(), 1);
- assertEquals(firstbundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 7));
- assertEquals(firstbundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 7));
- assertEquals(firstbundle.getSubscriptions().get(0).getEffectiveEndDate(), new LocalDate(2013, 8, 10));
- assertEquals(firstbundle.getSubscriptions().get(0).getBillingEndDate(), new LocalDate(2013, 8, 10));
-
- SubscriptionBundle secondbundle = bundles2.get(1);
- assertEquals(secondbundle.getSubscriptions().size(), 1);
- assertEquals(secondbundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 11));
- assertEquals(secondbundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 11));
- assertNull(secondbundle.getSubscriptions().get(0).getEffectiveEndDate());
- assertNull(secondbundle.getSubscriptions().get(0).getBillingEndDate());
- assertEquals(secondbundle.getOriginalCreatedDate().compareTo(firstbundle.getCreatedDate()), 0);
-
- final List<SubscriptionBundle> bundles2Again = subscriptionApi.getSubscriptionBundlesForAccountIdAndExternalKey(account.getId(), externalKey, callContext);
- assertEquals(bundles2Again.size(), 2);
-
- clock.addDays(3);
- final Account account2 = accountApi.createAccount(getAccountData(7), callContext);
-
- entitlementApi.transferEntitlements(account.getId(), account2.getId(), externalKey, new LocalDate(clock.getUTCNow(), account.getTimeZone()), callContext);
-
- final List<SubscriptionBundle> bundles3 = subscriptionApi.getSubscriptionBundlesForExternalKey(externalKey, callContext);
- assertEquals(bundles3.size(), 3);
-
- firstbundle = bundles3.get(0);
- assertEquals(firstbundle.getSubscriptions().size(), 1);
- assertEquals(firstbundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 7));
- assertEquals(firstbundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 7));
- assertEquals(firstbundle.getSubscriptions().get(0).getEffectiveEndDate(), new LocalDate(2013, 8, 10));
- assertEquals(firstbundle.getSubscriptions().get(0).getBillingEndDate(), new LocalDate(2013, 8, 10));
-
- secondbundle = bundles3.get(1);
- assertEquals(secondbundle.getSubscriptions().size(), 1);
- assertEquals(secondbundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 11));
- assertEquals(secondbundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 11));
- assertEquals(secondbundle.getSubscriptions().get(0).getEffectiveEndDate(), new LocalDate(2013, 8, 14));
- assertEquals(secondbundle.getSubscriptions().get(0).getBillingEndDate(), new LocalDate(2013, 8, 14));
- assertEquals(secondbundle.getOriginalCreatedDate().compareTo(firstbundle.getCreatedDate()), 0);
-
- SubscriptionBundle thirdBundle = bundles3.get(2);
- assertEquals(thirdBundle.getSubscriptions().size(), 1);
- assertEquals(thirdBundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 14));
- assertEquals(thirdBundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 14));
- assertNull(thirdBundle.getSubscriptions().get(0).getEffectiveEndDate());
- assertNull(thirdBundle.getSubscriptions().get(0).getBillingEndDate());
- assertEquals(thirdBundle.getOriginalCreatedDate().compareTo(firstbundle.getCreatedDate()), 0);
-
- } catch (EntitlementApiException e) {
- Assert.fail("Test failed " + e.getMessage());
- } catch (AccountApiException e) {
- Assert.fail("Test failed " + e.getMessage());
- } catch (SubscriptionApiException e) {
- Assert.fail("Test failed " + e.getMessage());
- }
+ public void testWithMultipleBundle() throws AccountApiException, SubscriptionApiException, EntitlementApiException {
+ final String externalKey = "fooXXX";
+
+ final LocalDate initialDate = new LocalDate(2013, 8, 7);
+ clock.setDay(initialDate);
+
+ final Account account = accountApi.createAccount(getAccountData(7), callContext);
+
+ final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+
+ // Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
+ final Entitlement entitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, externalKey, initialDate, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
+ assertEquals(entitlement.getAccountId(), account.getId());
+ assertEquals(entitlement.getExternalKey(), externalKey);
+
+ assertEquals(entitlement.getEffectiveStartDate(), initialDate);
+ assertNull(entitlement.getEffectiveEndDate());
+
+ final List<SubscriptionBundle> bundles = subscriptionApi.getSubscriptionBundlesForExternalKey(externalKey, callContext);
+ assertEquals(bundles.size(), 1);
+
+ // Cancel entitlement
+ clock.addDays(3);
+ testListener.pushExpectedEvents(NextEvent.CANCEL, NextEvent.BLOCK);
+ entitlement.cancelEntitlementWithDate(new LocalDate(clock.getUTCNow(), account.getTimeZone()), true, callContext);
+ assertTrue(testListener.isCompleted(DELAY));
+
+ clock.addDays(1);
+ // Re-create a new bundle with same externalKey
+ final PlanPhaseSpecifier spec2 = new PlanPhaseSpecifier("Pistol", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+
+ // Create entitlement and check each field
+ testListener.pushExpectedEvent(NextEvent.CREATE);
+ final Entitlement entitlement2 = entitlementApi.createBaseEntitlement(account.getId(), spec2, externalKey, new LocalDate(clock.getUTCNow(), account.getTimeZone()), callContext);
+ assertTrue(testListener.isCompleted(DELAY));
+ assertEquals(entitlement2.getAccountId(), account.getId());
+ assertEquals(entitlement2.getExternalKey(), externalKey);
+
+ final List<SubscriptionBundle> bundles2 = subscriptionApi.getSubscriptionBundlesForExternalKey(externalKey, callContext);
+ assertEquals(bundles2.size(), 2);
+
+ SubscriptionBundle firstbundle = bundles2.get(0);
+ assertEquals(firstbundle.getSubscriptions().size(), 1);
+ assertEquals(firstbundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 7));
+ assertEquals(firstbundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 7));
+ assertEquals(firstbundle.getSubscriptions().get(0).getEffectiveEndDate(), new LocalDate(2013, 8, 10));
+ assertEquals(firstbundle.getSubscriptions().get(0).getBillingEndDate(), new LocalDate(2013, 8, 10));
+
+ SubscriptionBundle secondbundle = bundles2.get(1);
+ assertEquals(secondbundle.getSubscriptions().size(), 1);
+ assertEquals(secondbundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 11));
+ assertEquals(secondbundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 11));
+ assertNull(secondbundle.getSubscriptions().get(0).getEffectiveEndDate());
+ assertNull(secondbundle.getSubscriptions().get(0).getBillingEndDate());
+ assertEquals(secondbundle.getOriginalCreatedDate().compareTo(firstbundle.getCreatedDate()), 0);
+
+ final List<SubscriptionBundle> bundles2Again = subscriptionApi.getSubscriptionBundlesForAccountIdAndExternalKey(account.getId(), externalKey, callContext);
+ assertEquals(bundles2Again.size(), 2);
+
+ clock.addDays(3);
+
+ final Account account2 = accountApi.createAccount(getAccountData(7), callContext);
+
+ testListener.pushExpectedEvents(NextEvent.TRANSFER, NextEvent.CANCEL, NextEvent.BLOCK);
+ entitlementApi.transferEntitlements(account.getId(), account2.getId(), externalKey, new LocalDate(clock.getUTCNow(), account.getTimeZone()), callContext);
+ assertTrue(testListener.isCompleted(DELAY));
+
+ final List<SubscriptionBundle> bundles3 = subscriptionApi.getSubscriptionBundlesForExternalKey(externalKey, callContext);
+ assertEquals(bundles3.size(), 3);
+
+ firstbundle = bundles3.get(0);
+ assertEquals(firstbundle.getSubscriptions().size(), 1);
+ assertEquals(firstbundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 7));
+ assertEquals(firstbundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 7));
+ assertEquals(firstbundle.getSubscriptions().get(0).getEffectiveEndDate(), new LocalDate(2013, 8, 10));
+ assertEquals(firstbundle.getSubscriptions().get(0).getBillingEndDate(), new LocalDate(2013, 8, 10));
+
+ secondbundle = bundles3.get(1);
+ assertEquals(secondbundle.getSubscriptions().size(), 1);
+ assertEquals(secondbundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 11));
+ assertEquals(secondbundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 11));
+ assertEquals(secondbundle.getSubscriptions().get(0).getEffectiveEndDate(), new LocalDate(2013, 8, 14));
+ assertEquals(secondbundle.getSubscriptions().get(0).getBillingEndDate(), new LocalDate(2013, 8, 14));
+ assertEquals(secondbundle.getOriginalCreatedDate().compareTo(firstbundle.getCreatedDate()), 0);
+
+ SubscriptionBundle thirdBundle = bundles3.get(2);
+ assertEquals(thirdBundle.getSubscriptions().size(), 1);
+ assertEquals(thirdBundle.getSubscriptions().get(0).getEffectiveStartDate(), new LocalDate(2013, 8, 14));
+ assertEquals(thirdBundle.getSubscriptions().get(0).getBillingStartDate(), new LocalDate(2013, 8, 14));
+ assertNull(thirdBundle.getSubscriptions().get(0).getEffectiveEndDate());
+ assertNull(thirdBundle.getSubscriptions().get(0).getBillingEndDate());
+ assertEquals(thirdBundle.getOriginalCreatedDate().compareTo(firstbundle.getCreatedDate()), 0);
}
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/block/TestBlockingApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/block/TestBlockingApi.java
index 42b893e..395e22e 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/block/TestBlockingApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/block/TestBlockingApi.java
@@ -24,12 +24,15 @@ import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.entitlement.EntitlementTestSuiteWithEmbeddedDB;
import com.ning.billing.entitlement.api.BlockingState;
import com.ning.billing.entitlement.api.BlockingStateType;
import com.ning.billing.subscription.api.user.SubscriptionBaseBundle;
import com.ning.billing.junction.DefaultBlockingState;
+import static org.testng.Assert.assertTrue;
+
public class TestBlockingApi extends EntitlementTestSuiteWithEmbeddedDB {
@BeforeMethod(groups = "slow")
@@ -48,21 +51,24 @@ public class TestBlockingApi extends EntitlementTestSuiteWithEmbeddedDB {
final boolean blockEntitlement = false;
final boolean blockBilling = false;
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
final BlockingState state1 = new DefaultBlockingState(uuid, BlockingStateType.ACCOUNT,overdueStateName, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
blockingInternalApi.setBlockingState(state1, internalCallContext);
+ assertTrue(testListener.isCompleted(DELAY));
+
clock.setDeltaFromReality(1000 * 3600 * 24);
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
final String overdueStateName2 = "NoReallyThisCantGoOn";
final BlockingState state2 = new DefaultBlockingState(uuid, BlockingStateType.ACCOUNT, overdueStateName2, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
blockingInternalApi.setBlockingState(state2, internalCallContext);
+ assertTrue(testListener.isCompleted(DELAY));
final SubscriptionBaseBundle bundle = Mockito.mock(SubscriptionBaseBundle.class);
Mockito.when(bundle.getId()).thenReturn(uuid);
Assert.assertEquals(blockingInternalApi.getBlockingStateForService(bundle, service, internalCallContext).getStateName(), overdueStateName2);
Assert.assertEquals(blockingInternalApi.getBlockingStateForService(bundle.getId(), service, internalCallContext).getStateName(), overdueStateName2);
-
-
}
@Test(groups = "slow")
@@ -75,14 +81,18 @@ public class TestBlockingApi extends EntitlementTestSuiteWithEmbeddedDB {
final boolean blockEntitlement = false;
final boolean blockBilling = false;
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
final BlockingState state1 = new DefaultBlockingState(uuid, BlockingStateType.ACCOUNT, overdueStateName, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
blockingInternalApi.setBlockingState(state1, internalCallContext);
+ assertTrue(testListener.isCompleted(DELAY));
clock.setDeltaFromReality(1000 * 3600 * 24);
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
final String overdueStateName2 = "NoReallyThisCantGoOn";
final BlockingState state2 = new DefaultBlockingState(uuid, BlockingStateType.ACCOUNT, overdueStateName2, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
blockingInternalApi.setBlockingState(state2, internalCallContext);
+ assertTrue(testListener.isCompleted(DELAY));
final SubscriptionBaseBundle bundle = Mockito.mock(SubscriptionBaseBundle.class);
Mockito.when(bundle.getId()).thenReturn(uuid);
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/core/TestEntitlementUtils.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/core/TestEntitlementUtils.java
index 0f7c8e0..8a066aa 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/core/TestEntitlementUtils.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/core/TestEntitlementUtils.java
@@ -177,7 +177,7 @@ public class TestEntitlementUtils extends EntitlementTestSuiteWithEmbeddedDB {
checkBlockingStatesDAO(changedBaseEntitlement, addOnEntitlement, baseEffectiveCancellationOrChangeDate, false);
// Verify the notification kicks in
- testListener.pushExpectedEvent(NextEvent.BLOCK);
+ testListener.pushExpectedEvents(NextEvent.CHANGE, NextEvent.CANCEL, NextEvent.BLOCK);
clock.addDays(30);
assertTrue(testListener.isCompleted(DELAY));
@@ -201,7 +201,7 @@ public class TestEntitlementUtils extends EntitlementTestSuiteWithEmbeddedDB {
final LocalDate changeDate = clock.getUTCToday();
// Change plan IMM (upgrade) to Assault-Rifle (Telescopic-Scope is included)
- testListener.pushExpectedEvents(NextEvent.CANCEL, NextEvent.BLOCK);
+ testListener.pushExpectedEvents(NextEvent.CHANGE, NextEvent.CANCEL, NextEvent.BLOCK);
final DefaultEntitlement changedBaseEntitlement = (DefaultEntitlement) baseEntitlement.changePlan("Assault-Rifle", BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, callContext);
assertTrue(testListener.isCompleted(DELAY));