killbill-memoizeit
Changes
junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java 33(+6 -27)
junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModuleWithEmbeddedDB.java 33(+10 -23)
junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java 11(+3 -8)
junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java 200(+92 -108)
Details
diff --git a/junction/src/test/java/com/ning/billing/junction/api/blocking/TestBlockingApi.java b/junction/src/test/java/com/ning/billing/junction/api/blocking/TestBlockingApi.java
index 106dd61..c9bef39 100644
--- a/junction/src/test/java/com/ning/billing/junction/api/blocking/TestBlockingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/api/blocking/TestBlockingApi.java
@@ -22,28 +22,15 @@ import java.util.UUID;
import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.junction.JunctionTestSuiteWithEmbeddedDB;
-import com.ning.billing.junction.MockModule;
import com.ning.billing.junction.api.Blockable;
import com.ning.billing.junction.api.BlockingState;
-import com.ning.billing.mock.glue.MockEntitlementModule;
-import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
-import com.google.inject.Inject;
-
-@Guice(modules = {MockModule.class, MockEntitlementModule.class})
public class TestBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
- @Inject
- private BlockingInternalApi api;
-
- @Inject
- private ClockMock clock;
@BeforeMethod(groups = "slow")
public void clean() {
@@ -61,18 +48,18 @@ public class TestBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
final boolean blockBilling = false;
final BlockingState state1 = new DefaultBlockingState(uuid, overdueStateName, Blockable.Type.SUBSCRIPTION_BUNDLE, service, blockChange, blockEntitlement, blockBilling);
- api.setBlockingState(state1, internalCallContext);
+ blockingInternalApi.setBlockingState(state1, internalCallContext);
clock.setDeltaFromReality(1000 * 3600 * 24);
final String overdueStateName2 = "NoReallyThisCantGoOn";
final BlockingState state2 = new DefaultBlockingState(uuid, overdueStateName2, Blockable.Type.SUBSCRIPTION_BUNDLE, service, blockChange, blockEntitlement, blockBilling);
- api.setBlockingState(state2, internalCallContext);
+ blockingInternalApi.setBlockingState(state2, internalCallContext);
final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
Mockito.when(bundle.getId()).thenReturn(uuid);
- Assert.assertEquals(api.getBlockingStateFor(bundle, internalCallContext).getStateName(), overdueStateName2);
- Assert.assertEquals(api.getBlockingStateFor(bundle.getId(), internalCallContext).getStateName(), overdueStateName2);
+ Assert.assertEquals(blockingInternalApi.getBlockingStateFor(bundle, internalCallContext).getStateName(), overdueStateName2);
+ Assert.assertEquals(blockingInternalApi.getBlockingStateFor(bundle.getId(), internalCallContext).getStateName(), overdueStateName2);
}
@Test(groups = "slow")
@@ -86,19 +73,19 @@ public class TestBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
final boolean blockBilling = false;
final BlockingState state1 = new DefaultBlockingState(uuid, overdueStateName, Blockable.Type.SUBSCRIPTION_BUNDLE, service, blockChange, blockEntitlement, blockBilling);
- api.setBlockingState(state1, internalCallContext);
+ blockingInternalApi.setBlockingState(state1, internalCallContext);
clock.setDeltaFromReality(1000 * 3600 * 24);
final String overdueStateName2 = "NoReallyThisCantGoOn";
final BlockingState state2 = new DefaultBlockingState(uuid, overdueStateName2, Blockable.Type.SUBSCRIPTION_BUNDLE, service, blockChange, blockEntitlement, blockBilling);
- api.setBlockingState(state2, internalCallContext);
+ blockingInternalApi.setBlockingState(state2, internalCallContext);
final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
Mockito.when(bundle.getId()).thenReturn(uuid);
- final List<BlockingState> history1 = api.getBlockingHistory(bundle, internalCallContext);
- final List<BlockingState> history2 = api.getBlockingHistory(bundle.getId(), internalCallContext);
+ final List<BlockingState> history1 = blockingInternalApi.getBlockingHistory(bundle, internalCallContext);
+ final List<BlockingState> history2 = blockingInternalApi.getBlockingHistory(bundle.getId(), internalCallContext);
Assert.assertEquals(history1.size(), 2);
Assert.assertEquals(history1.get(0).getStateName(), overdueStateName);
diff --git a/junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java b/junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java
index 8758d44..6c5aa5e 100644
--- a/junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/api/blocking/TestDefaultBlockingApi.java
@@ -23,39 +23,18 @@ import java.util.UUID;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.tweak.HandleCallback;
import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.ning.billing.junction.JunctionTestSuiteWithEmbeddedDB;
import com.ning.billing.junction.api.Blockable.Type;
-import com.ning.billing.junction.api.svcs.DefaultInternalBlockingApi;
import com.ning.billing.junction.api.BlockingState;
-import com.ning.billing.junction.dao.BlockingStateDao;
-import com.ning.billing.junction.dao.DefaultBlockingStateDao;
-import com.ning.billing.util.cache.CacheControllerDispatcher;
-import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.dao.DefaultNonEntityDao;
import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
public class TestDefaultBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
- private final ClockMock clock = new ClockMock();
- private final CacheControllerDispatcher controllerDispatcher = new CacheControllerDispatcher();
-
-
- private DefaultInternalBlockingApi blockingApi;
-
-
- @BeforeMethod(groups = "slow")
- public void setUp() throws Exception {
- final BlockingStateDao blockingStateDao = new DefaultBlockingStateDao(getDBI(), clock, controllerDispatcher, new DefaultNonEntityDao(getDBI()));
- blockingApi = new DefaultInternalBlockingApi(blockingStateDao, clock);
- }
-
- @Test(groups = "slow", enabled=false)
+ @Test(groups = "slow")
public void testSetBlockingStateOnBundle() throws Exception {
final UUID bundleId = UUID.randomUUID();
- final Long accountRecordId = 123049714L;
getDBI().withHandle(new HandleCallback<Void>() {
@Override
public Void withHandle(final Handle handle) throws Exception {
@@ -71,26 +50,26 @@ public class TestDefaultBlockingApi extends JunctionTestSuiteWithEmbeddedDB {
" PRIMARY KEY(record_id)\n" +
") ENGINE=innodb;");
handle.execute("insert into bundles (id, external_key, account_id, account_record_id) values (?, 'foo', ?, ?)",
- bundleId.toString(), UUID.randomUUID().toString(), accountRecordId);
+ bundleId.toString(), UUID.randomUUID().toString(), internalCallContext.getAccountRecordId());
return null;
}
});
final BlockingState blockingState = new DefaultBlockingState(UUID.randomUUID(), bundleId, "BLOCKED", Type.SUBSCRIPTION_BUNDLE, "myService", true, true, true, internalCallContext.getCreatedDate(), null);
- blockingApi.setBlockingState(blockingState, internalCallContext);
+ blockingInternalApi.setBlockingState(blockingState, internalCallContext);
// Verify the blocking state was applied
- final BlockingState resultState = blockingApi.getBlockingStateFor(bundleId, internalCallContext);
+ final BlockingState resultState = blockingInternalApi.getBlockingStateFor(bundleId, internalCallContext);
Assert.assertEquals(resultState.getStateName(), blockingState.getStateName());
// Verify the account_record_id was populated
getDBI().withHandle(new HandleCallback<Void>() {
@Override
public Void withHandle(final Handle handle) throws Exception {
- final List<Map<String, Object>> values = handle.select("select account_record_id from blocking_states where id = ?", bundleId.toString());
+ final List<Map<String, Object>> values = handle.select("select account_record_id from blocking_states where blockable_id = ?", bundleId.toString());
Assert.assertEquals(values.size(), 1);
Assert.assertEquals(values.get(0).keySet().size(), 1);
- Assert.assertEquals(values.get(0).get("account_record_id"), accountRecordId);
+ Assert.assertEquals(values.get(0).get("account_record_id"), internalCallContext.getAccountRecordId());
return null;
}
});
diff --git a/junction/src/test/java/com/ning/billing/junction/blocking/TestBlockingChecker.java b/junction/src/test/java/com/ning/billing/junction/blocking/TestBlockingChecker.java
index 1b3d1ba..9077cfb 100644
--- a/junction/src/test/java/com/ning/billing/junction/blocking/TestBlockingChecker.java
+++ b/junction/src/test/java/com/ning/billing/junction/blocking/TestBlockingChecker.java
@@ -16,75 +16,34 @@
package com.ning.billing.junction.blocking;
-import java.util.List;
import java.util.UUID;
import org.mockito.Mockito;
import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.ning.billing.account.api.Account;
-import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.junction.JunctionTestSuite;
+import com.ning.billing.junction.JunctionTestSuiteNoDB;
import com.ning.billing.junction.api.Blockable;
import com.ning.billing.junction.api.BlockingApiException;
import com.ning.billing.junction.api.BlockingState;
-import com.ning.billing.junction.block.BlockingChecker;
-import com.ning.billing.junction.block.DefaultBlockingChecker;
-import com.ning.billing.junction.dao.BlockingStateDao;
-import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.junction.dao.MockBlockingStateDao;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.callcontext.TenantContext;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
+public class TestBlockingChecker extends JunctionTestSuiteNoDB {
-public class TestBlockingChecker extends JunctionTestSuite {
- private BlockingState bundleState;
- private BlockingState subscriptionState;
- private BlockingState accountState;
-
- private final BlockingStateDao dao = new BlockingStateDao() {
-
-
- @Override
- public BlockingState getBlockingStateFor(final UUID blockableId, final InternalTenantContext context) {
- if (blockableId == account.getId()) {
- return accountState;
- } else if (blockableId == subscription.getId()) {
- return subscriptionState;
- } else {
- return bundleState;
- }
- }
-
-
- @Override
- public List<BlockingState> getBlockingHistoryFor(final UUID overdueableId, final InternalTenantContext context) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T extends Blockable> void setBlockingState(final BlockingState state, final Clock clock, final InternalCallContext context) {
- throw new UnsupportedOperationException();
- }
-
- };
- private BlockingChecker checker;
- private Subscription subscription;
private Account account;
private SubscriptionBundle bundle;
+ private Subscription subscription;
- @BeforeClass(groups = "fast")
- public void setup() {
+ @BeforeMethod(groups = "fast")
+ public void setupTest() {
final UUID accountId = UUID.randomUUID();
account = Mockito.mock(Account.class);
Mockito.when(account.getId()).thenReturn(accountId);
@@ -99,44 +58,32 @@ public class TestBlockingChecker extends JunctionTestSuite {
Mockito.when(subscription.getId()).thenReturn(UUID.randomUUID());
Mockito.when(subscription.getBundleId()).thenReturn(bundleId);
- final Injector i = Guice.createInjector(new AbstractModule() {
- @Override
- protected void configure() {
- bind(BlockingChecker.class).to(DefaultBlockingChecker.class).asEagerSingleton();
-
- bind(BlockingStateDao.class).toInstance(dao);
-
-
- // Since we re-enabled EntitlementUserApi for Checher we need a binding, that should go eventually
- final EntitlementUserApi entitlementUserApi = Mockito.mock(EntitlementUserApi.class);
- bind(EntitlementUserApi.class).toInstance(entitlementUserApi);
-
- final EntitlementInternalApi entitlementInternalApi = Mockito.mock(EntitlementInternalApi.class);
- bind(EntitlementInternalApi.class).toInstance(entitlementInternalApi);
+ try {
+ Mockito.when(entitlementUserApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<TenantContext>any())).thenReturn(bundle);
+ Mockito.when(entitlementInternalApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(bundle);
+ } catch (EntitlementUserApiException e) {
+ Assert.fail(e.toString());
+ }
- try {
- Mockito.when(entitlementUserApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<TenantContext>any())).thenReturn(bundle);
- Mockito.when(entitlementInternalApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(bundle);
- } catch (EntitlementUserApiException e) {
- Assert.fail(e.toString());
- }
- }
- });
- checker = i.getInstance(BlockingChecker.class);
+ // Cleanup mock daos
+ ((MockBlockingStateDao) blockingStateDao).clear();
}
private void setStateBundle(final boolean bC, final boolean bE, final boolean bB) {
- bundleState = new DefaultBlockingState(UUID.randomUUID(), "state", Blockable.Type.SUBSCRIPTION_BUNDLE, "test-service", bC, bE, bB);
+ final BlockingState bundleState = new DefaultBlockingState(bundle.getId(), "state", Blockable.Type.SUBSCRIPTION_BUNDLE, "test-service", bC, bE, bB);
Mockito.when(bundle.getBlockingState()).thenReturn(bundleState);
+ blockingStateDao.setBlockingState(bundleState, clock, internalCallContext);
}
private void setStateAccount(final boolean bC, final boolean bE, final boolean bB) {
- accountState = new DefaultBlockingState(UUID.randomUUID(), "state", Blockable.Type.SUBSCRIPTION_BUNDLE, "test-service", bC, bE, bB);
+ final BlockingState accountState = new DefaultBlockingState(account.getId(), "state", Blockable.Type.SUBSCRIPTION_BUNDLE, "test-service", bC, bE, bB);
+ blockingStateDao.setBlockingState(accountState, clock, internalCallContext);
}
private void setStateSubscription(final boolean bC, final boolean bE, final boolean bB) {
- subscriptionState = new DefaultBlockingState(UUID.randomUUID(), "state", Blockable.Type.SUBSCRIPTION_BUNDLE, "test-service", bC, bE, bB);
+ final BlockingState subscriptionState = new DefaultBlockingState(subscription.getId(), "state", Blockable.Type.SUBSCRIPTION_BUNDLE, "test-service", bC, bE, bB);
Mockito.when(subscription.getBlockingState()).thenReturn(subscriptionState);
+ blockingStateDao.setBlockingState(subscriptionState, clock, internalCallContext);
}
@Test(groups = "fast")
@@ -144,36 +91,36 @@ public class TestBlockingChecker extends JunctionTestSuite {
setStateAccount(false, false, false);
setStateBundle(false, false, false);
setStateSubscription(false, false, false);
- checker.checkBlockedChange(subscription, internalCallContext);
- checker.checkBlockedEntitlement(subscription, internalCallContext);
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
//BLOCKED SUBSCRIPTION
setStateSubscription(true, false, false);
- checker.checkBlockedEntitlement(subscription, internalCallContext);
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
try {
- checker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateSubscription(false, true, false);
- checker.checkBlockedChange(subscription, internalCallContext);
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
try {
- checker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateSubscription(false, false, true);
- checker.checkBlockedChange(subscription, internalCallContext);
- checker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
try {
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
@@ -182,30 +129,30 @@ public class TestBlockingChecker extends JunctionTestSuite {
//BLOCKED BUNDLE
setStateSubscription(false, false, false);
setStateBundle(true, false, false);
- checker.checkBlockedEntitlement(subscription, internalCallContext);
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
try {
- checker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateBundle(false, true, false);
- checker.checkBlockedChange(subscription, internalCallContext);
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
try {
- checker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateBundle(false, false, true);
- checker.checkBlockedChange(subscription, internalCallContext);
- checker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
try {
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
@@ -215,30 +162,30 @@ public class TestBlockingChecker extends JunctionTestSuite {
setStateSubscription(false, false, false);
setStateBundle(false, false, false);
setStateAccount(true, false, false);
- checker.checkBlockedEntitlement(subscription, internalCallContext);
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
try {
- checker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateAccount(false, true, false);
- checker.checkBlockedChange(subscription, internalCallContext);
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
try {
- checker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateAccount(false, false, true);
- checker.checkBlockedChange(subscription, internalCallContext);
- checker.checkBlockedEntitlement(subscription, internalCallContext);
+ blockingChecker.checkBlockedChange(subscription, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(subscription, internalCallContext);
try {
- checker.checkBlockedBilling(subscription, internalCallContext);
+ blockingChecker.checkBlockedBilling(subscription, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
@@ -250,37 +197,37 @@ public class TestBlockingChecker extends JunctionTestSuite {
setStateAccount(false, false, false);
setStateBundle(false, false, false);
setStateSubscription(false, false, false);
- checker.checkBlockedChange(bundle, internalCallContext);
- checker.checkBlockedEntitlement(bundle, internalCallContext);
- checker.checkBlockedBilling(bundle, internalCallContext);
+ blockingChecker.checkBlockedChange(bundle, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(bundle, internalCallContext);
+ blockingChecker.checkBlockedBilling(bundle, internalCallContext);
//BLOCKED BUNDLE
setStateSubscription(false, false, false);
setStateBundle(true, false, false);
- checker.checkBlockedEntitlement(bundle, internalCallContext);
- checker.checkBlockedBilling(bundle, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(bundle, internalCallContext);
+ blockingChecker.checkBlockedBilling(bundle, internalCallContext);
try {
- checker.checkBlockedChange(bundle, internalCallContext);
+ blockingChecker.checkBlockedChange(bundle, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateBundle(false, true, false);
- checker.checkBlockedChange(bundle, internalCallContext);
- checker.checkBlockedBilling(bundle, internalCallContext);
+ blockingChecker.checkBlockedChange(bundle, internalCallContext);
+ blockingChecker.checkBlockedBilling(bundle, internalCallContext);
try {
- checker.checkBlockedEntitlement(bundle, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(bundle, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateBundle(false, false, true);
- checker.checkBlockedChange(bundle, internalCallContext);
- checker.checkBlockedEntitlement(bundle, internalCallContext);
+ blockingChecker.checkBlockedChange(bundle, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(bundle, internalCallContext);
try {
- checker.checkBlockedBilling(bundle, internalCallContext);
+ blockingChecker.checkBlockedBilling(bundle, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
@@ -290,30 +237,30 @@ public class TestBlockingChecker extends JunctionTestSuite {
setStateSubscription(false, false, false);
setStateBundle(false, false, false);
setStateAccount(true, false, false);
- checker.checkBlockedEntitlement(bundle, internalCallContext);
- checker.checkBlockedBilling(bundle, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(bundle, internalCallContext);
+ blockingChecker.checkBlockedBilling(bundle, internalCallContext);
try {
- checker.checkBlockedChange(bundle, internalCallContext);
+ blockingChecker.checkBlockedChange(bundle, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateAccount(false, true, false);
- checker.checkBlockedChange(bundle, internalCallContext);
- checker.checkBlockedBilling(bundle, internalCallContext);
+ blockingChecker.checkBlockedChange(bundle, internalCallContext);
+ blockingChecker.checkBlockedBilling(bundle, internalCallContext);
try {
- checker.checkBlockedEntitlement(bundle, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(bundle, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateAccount(false, false, true);
- checker.checkBlockedChange(bundle, internalCallContext);
- checker.checkBlockedEntitlement(bundle, internalCallContext);
+ blockingChecker.checkBlockedChange(bundle, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(bundle, internalCallContext);
try {
- checker.checkBlockedBilling(bundle, internalCallContext);
+ blockingChecker.checkBlockedBilling(bundle, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
@@ -325,38 +272,38 @@ public class TestBlockingChecker extends JunctionTestSuite {
setStateAccount(false, false, false);
setStateBundle(false, false, false);
setStateSubscription(false, false, false);
- checker.checkBlockedChange(account, internalCallContext);
- checker.checkBlockedEntitlement(account, internalCallContext);
- checker.checkBlockedBilling(account, internalCallContext);
+ blockingChecker.checkBlockedChange(account, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(account, internalCallContext);
+ blockingChecker.checkBlockedBilling(account, internalCallContext);
//BLOCKED ACCOUNT
setStateSubscription(false, false, false);
setStateBundle(false, false, false);
setStateAccount(true, false, false);
- checker.checkBlockedEntitlement(account, internalCallContext);
- checker.checkBlockedBilling(account, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(account, internalCallContext);
+ blockingChecker.checkBlockedBilling(account, internalCallContext);
try {
- checker.checkBlockedChange(account, internalCallContext);
+ blockingChecker.checkBlockedChange(account, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateAccount(false, true, false);
- checker.checkBlockedChange(account, internalCallContext);
- checker.checkBlockedBilling(account, internalCallContext);
+ blockingChecker.checkBlockedChange(account, internalCallContext);
+ blockingChecker.checkBlockedBilling(account, internalCallContext);
try {
- checker.checkBlockedEntitlement(account, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(account, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
}
setStateAccount(false, false, true);
- checker.checkBlockedChange(account, internalCallContext);
- checker.checkBlockedEntitlement(account, internalCallContext);
+ blockingChecker.checkBlockedChange(account, internalCallContext);
+ blockingChecker.checkBlockedEntitlement(account, internalCallContext);
try {
- checker.checkBlockedBilling(account, internalCallContext);
+ blockingChecker.checkBlockedBilling(account, internalCallContext);
Assert.fail("The call should have been blocked!");
} catch (BlockingApiException e) {
//Expected behavior
diff --git a/junction/src/test/java/com/ning/billing/junction/dao/MockBlockingStateDao.java b/junction/src/test/java/com/ning/billing/junction/dao/MockBlockingStateDao.java
new file mode 100644
index 0000000..94f5881
--- /dev/null
+++ b/junction/src/test/java/com/ning/billing/junction/dao/MockBlockingStateDao.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.junction.dao;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import com.ning.billing.junction.api.Blockable;
+import com.ning.billing.junction.api.BlockingState;
+import com.ning.billing.util.callcontext.InternalCallContext;
+import com.ning.billing.util.callcontext.InternalTenantContext;
+import com.ning.billing.util.clock.Clock;
+
+public class MockBlockingStateDao implements BlockingStateDao {
+
+ private final Map<UUID, List<BlockingState>> blockingStates = new HashMap<UUID, List<BlockingState>>();
+
+ @Override
+ public BlockingState getBlockingStateFor(final UUID blockableId, final InternalTenantContext context) {
+ final List<BlockingState> blockingStates = getBlockingHistoryFor(blockableId, context);
+ return blockingStates == null ? null : blockingStates.get(blockingStates.size() - 1);
+ }
+
+ @Override
+ public List<BlockingState> getBlockingHistoryFor(final UUID overdueableId, final InternalTenantContext context) {
+ final List<BlockingState> states = blockingStates.get(overdueableId);
+ // Note! The returned list cannot be immutable!
+ return states == null ? new ArrayList<BlockingState>() : states;
+ }
+
+ @Override
+ public synchronized <T extends Blockable> void setBlockingState(final BlockingState state, final Clock clock, final InternalCallContext context) {
+ if (blockingStates.get(state.getBlockedId()) == null) {
+ blockingStates.put(state.getBlockedId(), new ArrayList<BlockingState>());
+ }
+ blockingStates.get(state.getBlockedId()).add(state);
+ }
+
+ public synchronized <T extends Blockable> void setBlockingStates(final UUID blockedId, final List<BlockingState> states) {
+ blockingStates.put(blockedId, states);
+ }
+
+ public synchronized void clear() {
+ blockingStates.clear();
+ }
+}
diff --git a/junction/src/test/java/com/ning/billing/junction/dao/TestBlockingDao.java b/junction/src/test/java/com/ning/billing/junction/dao/TestBlockingDao.java
index 5730a39..b3e1430 100644
--- a/junction/src/test/java/com/ning/billing/junction/dao/TestBlockingDao.java
+++ b/junction/src/test/java/com/ning/billing/junction/dao/TestBlockingDao.java
@@ -21,32 +21,18 @@ import java.util.UUID;
import org.mockito.Mockito;
import org.testng.Assert;
-import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.junction.JunctionTestSuiteWithEmbeddedDB;
-import com.ning.billing.junction.MockModule;
import com.ning.billing.junction.api.Blockable;
import com.ning.billing.junction.api.BlockingState;
-import com.ning.billing.mock.glue.MockEntitlementModule;
-import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.clock.ClockMock;
import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
-import com.google.inject.Inject;
-
-@Guice(modules = {MockModule.class, MockEntitlementModule.class})
public class TestBlockingDao extends JunctionTestSuiteWithEmbeddedDB {
- @Inject
- private BlockingStateDao dao;
-
-
@Test(groups = "slow")
public void testDao() {
- final ClockMock clock = new ClockMock();
final UUID uuid = UUID.randomUUID();
final String overdueStateName = "WayPassedItMan";
final String service = "TEST";
@@ -56,22 +42,21 @@ public class TestBlockingDao extends JunctionTestSuiteWithEmbeddedDB {
final boolean blockBilling = false;
final BlockingState state1 = new DefaultBlockingState(uuid, overdueStateName, Blockable.Type.SUBSCRIPTION_BUNDLE, service, blockChange, blockEntitlement, blockBilling);
- dao.setBlockingState(state1, clock, internalCallContext);
+ blockingStateDao.setBlockingState(state1, clock, internalCallContext);
clock.setDeltaFromReality(1000 * 3600 * 24);
final String overdueStateName2 = "NoReallyThisCantGoOn";
final BlockingState state2 = new DefaultBlockingState(uuid, overdueStateName2, Blockable.Type.SUBSCRIPTION_BUNDLE, service, blockChange, blockEntitlement, blockBilling);
- dao.setBlockingState(state2, clock, internalCallContext);
+ blockingStateDao.setBlockingState(state2, clock, internalCallContext);
final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
Mockito.when(bundle.getId()).thenReturn(uuid);
- Assert.assertEquals(dao.getBlockingStateFor(uuid, internalCallContext).getStateName(), state2.getStateName());
+ Assert.assertEquals(blockingStateDao.getBlockingStateFor(uuid, internalCallContext).getStateName(), state2.getStateName());
}
@Test(groups = "slow")
public void testDaoHistory() throws Exception {
- final ClockMock clock = new ClockMock();
final UUID uuid = UUID.randomUUID();
final String overdueStateName = "WayPassedItMan";
final String service = "TEST";
@@ -81,18 +66,17 @@ public class TestBlockingDao extends JunctionTestSuiteWithEmbeddedDB {
final boolean blockBilling = false;
final BlockingState state1 = new DefaultBlockingState(uuid, overdueStateName, Blockable.Type.SUBSCRIPTION_BUNDLE, service, blockChange, blockEntitlement, blockBilling);
- dao.setBlockingState(state1, clock, internalCallContext);
+ blockingStateDao.setBlockingState(state1, clock, internalCallContext);
clock.setDeltaFromReality(1000 * 3600 * 24);
final String overdueStateName2 = "NoReallyThisCantGoOn";
final BlockingState state2 = new DefaultBlockingState(uuid, overdueStateName2, Blockable.Type.SUBSCRIPTION_BUNDLE, service, blockChange, blockEntitlement, blockBilling);
- dao.setBlockingState(state2, clock, internalCallContext);
+ blockingStateDao.setBlockingState(state2, clock, internalCallContext);
final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
Mockito.when(bundle.getId()).thenReturn(uuid);
-
- final List<BlockingState> history2 = dao.getBlockingHistoryFor(bundle.getId(), internalCallContext);
+ final List<BlockingState> history2 = blockingStateDao.getBlockingHistoryFor(bundle.getId(), internalCallContext);
Assert.assertEquals(history2.size(), 2);
Assert.assertEquals(history2.get(0).getStateName(), overdueStateName);
Assert.assertEquals(history2.get(1).getStateName(), overdueStateName2);
diff --git a/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModule.java b/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModule.java
new file mode 100644
index 0000000..964344c
--- /dev/null
+++ b/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModule.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.junction.glue;
+
+import java.util.Properties;
+
+import org.skife.config.ConfigSource;
+import org.skife.config.SimplePropertyConfigSource;
+
+import com.ning.billing.catalog.MockCatalogModule;
+import com.ning.billing.mock.glue.MockAccountModule;
+import com.ning.billing.mock.glue.MockEntitlementModule;
+import com.ning.billing.util.glue.CacheModule;
+import com.ning.billing.util.glue.CallContextModule;
+
+public class TestJunctionModule extends DefaultJunctionModule {
+
+ protected final ConfigSource configSource;
+
+ public TestJunctionModule() {
+ final Properties properties = new Properties(System.getProperties());
+ // Speed up the bus
+ properties.put("killbill.billing.util.persistent.bus.sleep", "10");
+ properties.put("killbill.billing.util.persistent.bus.nbThreads", "1");
+ configSource = new SimplePropertyConfigSource(properties);
+
+ // Ignore ehcache checks. Unfortunately, ehcache looks at system properties directly...
+ System.setProperty("net.sf.ehcache.skipUpdateCheck", "true");
+ }
+
+ @Override
+ protected void configure() {
+ super.configure();
+
+ install(new CacheModule());
+ install(new CallContextModule());
+ install(new MockAccountModule());
+ install(new MockCatalogModule());
+ install(new MockEntitlementModule());
+ }
+}
diff --git a/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModuleNoDB.java b/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModuleNoDB.java
new file mode 100644
index 0000000..f188d30
--- /dev/null
+++ b/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModuleNoDB.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.junction.glue;
+
+import com.ning.billing.GuicyKillbillTestNoDBModule;
+import com.ning.billing.junction.dao.BlockingStateDao;
+import com.ning.billing.junction.dao.MockBlockingStateDao;
+import com.ning.billing.mock.glue.MockNonEntityDaoModule;
+import com.ning.billing.mock.glue.MockTagModule;
+import com.ning.billing.util.bus.InMemoryBusModule;
+
+public class TestJunctionModuleNoDB extends TestJunctionModule {
+
+ @Override
+ public void installBlockingStateDao() {
+ bind(BlockingStateDao.class).toInstance(new MockBlockingStateDao());
+ }
+
+ @Override
+ protected void configure() {
+ super.configure();
+
+ install(new GuicyKillbillTestNoDBModule());
+ install(new MockNonEntityDaoModule());
+ install(new InMemoryBusModule(configSource));
+ install(new MockTagModule());
+ }
+}
diff --git a/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteNoDB.java b/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteNoDB.java
new file mode 100644
index 0000000..fae3b87
--- /dev/null
+++ b/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteNoDB.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.junction;
+
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+import com.ning.billing.GuicyKillbillTestSuiteNoDB;
+import com.ning.billing.catalog.api.CatalogService;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.junction.block.BlockingChecker;
+import com.ning.billing.junction.dao.BlockingStateDao;
+import com.ning.billing.junction.glue.TestJunctionModuleNoDB;
+import com.ning.billing.junction.plumbing.billing.BillCycleDayCalculator;
+import com.ning.billing.junction.plumbing.billing.BlockingCalculator;
+import com.ning.billing.util.glue.RealImplementation;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
+import com.ning.billing.util.svcapi.junction.BillingInternalApi;
+import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
+import com.ning.billing.util.svcapi.tag.TagInternalApi;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.tag.dao.TagDao;
+
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+public abstract class JunctionTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
+
+ @Inject
+ protected AccountInternalApi accountInternalApi;
+ @Inject
+ protected BillCycleDayCalculator billCycleDayCalculator;
+ @Inject
+ protected BillingInternalApi billingInternalApi;
+ @Inject
+ protected BlockingCalculator blockingCalculator;
+ @Inject
+ protected BlockingChecker blockingChecker;
+ @Inject
+ protected BlockingInternalApi blockingInternalApi;
+ @Inject
+ protected BlockingStateDao blockingStateDao;
+ @Inject
+ protected CatalogService catalogService;
+ @Inject
+ @RealImplementation
+ protected EntitlementUserApi entitlementUserApi;
+ @Inject
+ protected EntitlementInternalApi entitlementInternalApi;
+ @Inject
+ protected InternalBus bus;
+ @Inject
+ protected TagDao tagDao;
+ @Inject
+ protected TagInternalApi tagInternalApi;
+
+ @BeforeClass(groups = "fast")
+ protected void setup() throws Exception {
+ final Injector injector = Guice.createInjector(new TestJunctionModuleNoDB());
+ injector.injectMembers(this);
+ }
+
+ @BeforeMethod(groups = "fast")
+ public void setupTest() {
+ bus.start();
+ }
+
+ @AfterMethod(groups = "fast")
+ public void cleanupTest() {
+ bus.stop();
+ }
+}
diff --git a/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteWithEmbeddedDB.java b/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteWithEmbeddedDB.java
index 3089ee7..192a1d2 100644
--- a/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteWithEmbeddedDB.java
+++ b/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteWithEmbeddedDB.java
@@ -16,7 +16,71 @@
package com.ning.billing.junction;
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
-public abstract class JunctionTestSuiteWithEmbeddedDB extends KillbillTestSuiteWithEmbeddedDB {
+import com.ning.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.catalog.api.CatalogService;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.junction.block.BlockingChecker;
+import com.ning.billing.junction.dao.BlockingStateDao;
+import com.ning.billing.junction.glue.TestJunctionModuleWithEmbeddedDB;
+import com.ning.billing.junction.plumbing.billing.BlockingCalculator;
+import com.ning.billing.util.glue.RealImplementation;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
+import com.ning.billing.util.svcapi.junction.BillingInternalApi;
+import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
+import com.ning.billing.util.svcapi.tag.TagInternalApi;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.tag.dao.TagDao;
+
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+public abstract class JunctionTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
+
+ @Inject
+ protected AccountInternalApi accountInternalApi;
+ @Inject
+ protected BillingInternalApi billingInternalApi;
+ @Inject
+ protected BlockingCalculator blockingCalculator;
+ @Inject
+ protected BlockingChecker blockingChecker;
+ @Inject
+ protected BlockingInternalApi blockingInternalApi;
+ @Inject
+ protected BlockingStateDao blockingStateDao;
+ @Inject
+ protected CatalogService catalogService;
+ @Inject
+ @RealImplementation
+ protected EntitlementUserApi entitlementUserApi;
+ @Inject
+ protected EntitlementInternalApi entitlementInternalApi;
+ @Inject
+ protected InternalBus bus;
+ @Inject
+ protected TagDao tagDao;
+ @Inject
+ protected TagInternalApi tagInternalApi;
+
+ @BeforeClass(groups = "fast")
+ protected void setup() throws Exception {
+ final Injector injector = Guice.createInjector(new TestJunctionModuleWithEmbeddedDB());
+ injector.injectMembers(this);
+ }
+
+ @BeforeMethod(groups = "fast")
+ public void setupTest() {
+ bus.start();
+ }
+
+ @AfterMethod(groups = "fast")
+ public void cleanupTest() {
+ bus.stop();
+ }
}
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
index cb843c0..0d5e9da 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillCycleDayCalculator.java
@@ -34,11 +34,11 @@ import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Plan;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.junction.JunctionTestSuite;
+import com.ning.billing.junction.JunctionTestSuiteNoDB;
import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
-public class TestBillCycleDayCalculator extends JunctionTestSuite {
+public class TestBillCycleDayCalculator extends JunctionTestSuiteNoDB {
@Test(groups = "fast")
public void testCalculateBCDForAOWithBPCancelledBundleAligned() throws Exception {
@@ -46,18 +46,13 @@ public class TestBillCycleDayCalculator extends JunctionTestSuite {
final DateTime bpStartDateUTC = new DateTime(2012, 7, 16, 21, 0, 0, DateTimeZone.UTC);
final int expectedBCDUTC = 16;
- // Create the calculator
- final CatalogService catalogService = Mockito.mock(CatalogService.class);
- final EntitlementInternalApi entitlementApi = Mockito.mock(EntitlementInternalApi.class);
- final BillCycleDayCalculator billCycleDayCalculator = new BillCycleDayCalculator(catalogService, entitlementApi);
-
// Create a Bundle associated with a subscription
final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
final Subscription subscription = Mockito.mock(Subscription.class);
Mockito.when(subscription.getStartDate()).thenReturn(bpStartDateUTC);
// subscription.getCurrentPlan() will return null as expected (cancelled BP)
- Mockito.when(entitlementApi.getBaseSubscription(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscription);
+ Mockito.when(entitlementInternalApi.getBaseSubscription(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscription);
// Create a the base plan associated with that subscription
final Plan plan = Mockito.mock(Plan.class);
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
index 2ab8a90..73fb2f0 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBillingApi.java
@@ -16,17 +16,10 @@
package com.ning.billing.junction.plumbing.billing;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
-
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
import java.util.SortedSet;
import java.util.UUID;
@@ -35,17 +28,14 @@ import org.joda.time.DateTimeZone;
import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import com.ning.billing.ObjectType;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.catalog.MockCatalog;
-import com.ning.billing.catalog.MockCatalogService;
import com.ning.billing.catalog.api.BillingAlignment;
import com.ning.billing.catalog.api.CatalogApiException;
-import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.InternationalPrice;
import com.ning.billing.catalog.api.Plan;
@@ -57,32 +47,29 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApiException;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
-import com.ning.billing.junction.JunctionTestSuite;
+import com.ning.billing.junction.JunctionTestSuiteNoDB;
import com.ning.billing.junction.api.Blockable;
import com.ning.billing.junction.api.BlockingState;
-import com.ning.billing.lifecycle.KillbillService.ServiceException;
+import com.ning.billing.junction.dao.MockBlockingStateDao;
import com.ning.billing.mock.MockEffectiveSubscriptionEvent;
import com.ning.billing.mock.MockSubscription;
import com.ning.billing.mock.api.MockBillCycleDay;
-import com.ning.billing.util.callcontext.InternalCallContext;
-import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.callcontext.InternalTenantContext;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.clock.ClockMock;
import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
-import com.ning.billing.util.svcapi.account.AccountInternalApi;
-import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
import com.ning.billing.util.svcapi.junction.BillingEvent;
import com.ning.billing.util.svcapi.junction.BillingEventSet;
-import com.ning.billing.util.svcapi.junction.BillingInternalApi;
import com.ning.billing.util.svcapi.junction.BillingModeType;
-import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
-import com.ning.billing.util.svcapi.tag.TagInternalApi;
import com.ning.billing.util.tag.ControlTagType;
-import com.ning.billing.util.tag.Tag;
+import com.ning.billing.util.tag.dao.MockTagDao;
+
+import com.google.common.collect.ImmutableList;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
-public class TestBillingApi extends JunctionTestSuite {
+public class TestBillingApi extends JunctionTestSuiteNoDB {
private static final String DISABLED_BUNDLE = "disabled-bundle";
private static final String CLEAR_BUNDLE = "clear-bundle";
@@ -91,134 +78,107 @@ public class TestBillingApi extends JunctionTestSuite {
private static final UUID subId = new UUID(1L, 0L);
private static final UUID bunId = new UUID(2L, 0L);
- private CatalogService catalogService;
-
private List<EffectiveSubscriptionInternalEvent> effectiveSubscriptionTransitions;
- private EntitlementInternalApi entitlementApi;
-
- private final BlockingCalculator blockCalculator = new BlockingCalculator(null) {
- @Override
- public void insertBlockingEvents(final SortedSet<BillingEvent> billingEvents, final InternalTenantContext context) {
- }
- };
-
- private Clock clock;
-
- private AccountInternalApi accountApi;
- private BillCycleDayCalculator bcdCalculator;
- private InternalCallContextFactory factory;
- private BillingInternalApi api;
private Subscription subscription;
- private TagInternalApi tagApi;
-
- @BeforeSuite(groups = "fast")
- public void setup() throws ServiceException {
- catalogService = new MockCatalogService(new MockCatalog());
- clock = new ClockMock();
- }
+ private MockCatalog catalog;
@BeforeMethod(groups = "fast")
public void setupEveryTime() throws EntitlementUserApiException {
- accountApi = Mockito.mock(AccountInternalApi.class);
-
- final List<SubscriptionBundle> bundles = new ArrayList<SubscriptionBundle>();
final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
Mockito.when(bundle.getId()).thenReturn(bunId);
-
- bundles.add(bundle);
+ final List<SubscriptionBundle> bundles = ImmutableList.<SubscriptionBundle>of(bundle);
effectiveSubscriptionTransitions = new LinkedList<EffectiveSubscriptionInternalEvent>();
- final List<Subscription> subscriptions = new LinkedList<Subscription>();
final DateTime subscriptionStartDate = clock.getUTCNow().minusDays(3);
subscription = new MockSubscription(subId, bunId, null, subscriptionStartDate, effectiveSubscriptionTransitions);
-
- subscriptions.add(subscription);
-
- entitlementApi = Mockito.mock(EntitlementInternalApi.class);
- Mockito.when(entitlementApi.getBundlesForAccount(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(bundles);
- Mockito.when(entitlementApi.getSubscriptionsForBundle(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscriptions);
- Mockito.when(entitlementApi.getSubscriptionFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscription);
- Mockito.when(entitlementApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(bundle);
- Mockito.when(entitlementApi.getBaseSubscription(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscription);
- Mockito.when(entitlementApi.getBillingTransitions(Mockito.<Subscription>any(), Mockito.<InternalTenantContext>any())).thenReturn(effectiveSubscriptionTransitions);
- Mockito.when(entitlementApi.getAllTransitions(Mockito.<Subscription>any(), Mockito.<InternalTenantContext>any())).thenReturn(effectiveSubscriptionTransitions);
- tagApi = mock(TagInternalApi.class);
-
- bcdCalculator = new BillCycleDayCalculator(catalogService, entitlementApi);
-
- api = new DefaultInternalBillingApi(accountApi, bcdCalculator, entitlementApi, blockCalculator, catalogService, tagApi);
-
+ final List<Subscription> subscriptions = ImmutableList.<Subscription>of(subscription);
+
+ Mockito.when(entitlementInternalApi.getBundlesForAccount(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(bundles);
+ Mockito.when(entitlementInternalApi.getSubscriptionsForBundle(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscriptions);
+ Mockito.when(entitlementInternalApi.getSubscriptionFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscription);
+ Mockito.when(entitlementInternalApi.getBundleFromId(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(bundle);
+ Mockito.when(entitlementInternalApi.getBaseSubscription(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(subscription);
+ Mockito.when(entitlementInternalApi.getBillingTransitions(Mockito.<Subscription>any(), Mockito.<InternalTenantContext>any())).thenReturn(effectiveSubscriptionTransitions);
+ Mockito.when(entitlementInternalApi.getAllTransitions(Mockito.<Subscription>any(), Mockito.<InternalTenantContext>any())).thenReturn(effectiveSubscriptionTransitions);
+
+ catalog = ((MockCatalog) catalogService.getCurrentCatalog());
+ // TODO The MockCatalog module returns two different things for full vs current catalog
+ Mockito.when(catalogService.getFullCatalog()).thenReturn(catalog);
// Set a default alignment
- ((MockCatalog) catalogService.getFullCatalog()).setBillingAlignment(BillingAlignment.ACCOUNT);
+ catalog.setBillingAlignment(BillingAlignment.ACCOUNT);
+
+ // Cleanup mock daos
+ ((MockBlockingStateDao) blockingStateDao).clear();
+ ((MockTagDao) tagDao).clear();
}
@Test(groups = "fast")
public void testBillingEventsEmpty() throws AccountApiException {
- final SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(new UUID(0L, 0L), internalCallContext);
+ final SortedSet<BillingEvent> events = billingInternalApi.getBillingEventsForAccountAndUpdateAccountBCD(new UUID(0L, 0L), internalCallContext);
Assert.assertEquals(events.size(), 0);
}
@Test(groups = "fast")
public void testBillingEventsNoBillingPeriod() throws CatalogApiException, AccountApiException {
- final Plan nextPlan = catalogService.getFullCatalog().findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
+ final Plan nextPlan = catalog.findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
// The trial has no billing period
final PlanPhase nextPhase = nextPlan.getAllPhases()[0];
final DateTime now = createSubscriptionCreationEvent(nextPlan, nextPhase);
final Account account = createAccount(10);
- final SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
+ final SortedSet<BillingEvent> events = billingInternalApi.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
checkFirstEvent(events, nextPlan, account.getBillCycleDay().getDayOfMonthUTC(), subId, now, nextPhase, SubscriptionTransitionType.CREATE.toString());
}
@Test(groups = "fast")
public void testBillingEventsSubscriptionAligned() throws CatalogApiException, AccountApiException {
- final Plan nextPlan = catalogService.getFullCatalog().findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
+ final Plan nextPlan = catalog.findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
final PlanPhase nextPhase = nextPlan.getAllPhases()[1];
final DateTime now = createSubscriptionCreationEvent(nextPlan, nextPhase);
final Account account = createAccount(1);
- ((MockCatalog) catalogService.getFullCatalog()).setBillingAlignment(BillingAlignment.SUBSCRIPTION);
+ catalog.setBillingAlignment(BillingAlignment.SUBSCRIPTION);
- final SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
+ final SortedSet<BillingEvent> events = billingInternalApi.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
// The expected BCD is when the subscription started since we skip the trial phase
checkFirstEvent(events, nextPlan, subscription.getStartDate().getDayOfMonth(), subId, now, nextPhase, SubscriptionTransitionType.CREATE.toString());
}
@Test(groups = "fast")
public void testBillingEventsAccountAligned() throws CatalogApiException, AccountApiException {
- final Plan nextPlan = catalogService.getFullCatalog().findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
+ final Plan nextPlan = catalog.findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
final PlanPhase nextPhase = nextPlan.getAllPhases()[1];
final DateTime now = createSubscriptionCreationEvent(nextPlan, nextPhase);
final Account account = createAccount(32);
- final SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
+ final SortedSet<BillingEvent> events = billingInternalApi.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
// The expected BCD is the account BCD (account aligned by default)
checkFirstEvent(events, nextPlan, 32, subId, now, nextPhase, SubscriptionTransitionType.CREATE.toString());
}
@Test(groups = "fast")
public void testBillingEventsBundleAligned() throws CatalogApiException, AccountApiException {
- final Plan nextPlan = catalogService.getFullCatalog().findPlan("Horn1USD", clock.getUTCNow());
+ final Plan nextPlan = catalog.findPlan("Horn1USD", clock.getUTCNow());
final PlanPhase nextPhase = nextPlan.getAllPhases()[0];
final DateTime now = createSubscriptionCreationEvent(nextPlan, nextPhase);
final Account account = createAccount(1);
- ((MockCatalog) catalogService.getFullCatalog()).setBillingAlignment(BillingAlignment.BUNDLE);
- ((MockSubscription) subscription).setPlan(catalogService.getFullCatalog().findPlan("PickupTrialEvergreen10USD", now));
+ catalog.setBillingAlignment(BillingAlignment.BUNDLE);
+ ((MockSubscription) subscription).setPlan(catalog.findPlan("PickupTrialEvergreen10USD", now));
- final SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
+ final SortedSet<BillingEvent> events = billingInternalApi.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
// The expected BCD is when the subscription started
checkFirstEvent(events, nextPlan, subscription.getStartDate().getDayOfMonth(), subId, now, nextPhase, SubscriptionTransitionType.CREATE.toString());
}
@Test(groups = "fast")
public void testBillingEventsWithBlock() throws CatalogApiException, AccountApiException {
- final Plan nextPlan = catalogService.getFullCatalog().findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
+ final Plan nextPlan = catalog.findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
final PlanPhase nextPhase = nextPlan.getAllPhases()[1];
final DateTime now = createSubscriptionCreationEvent(nextPlan, nextPhase);
@@ -226,39 +186,10 @@ public class TestBillingApi extends JunctionTestSuite {
final List<BlockingState> blockingStates = new ArrayList<BlockingState>();
blockingStates.add(new DefaultBlockingState(UUID.randomUUID(), bunId, DISABLED_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
- blockingStates.add(new DefaultBlockingState(UUID.randomUUID(),bunId, CLEAR_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2), null));
-
- final BlockingCalculator blockingCal = new BlockingCalculator(new BlockingInternalApi() {
- @Override
- public <T extends Blockable> void setBlockingState(final BlockingState state, final InternalCallContext context) {
- }
-
- @Override
- public BlockingState getBlockingStateFor(final UUID overdueableId, final InternalTenantContext context) {
- return null;
- }
-
- @Override
- public BlockingState getBlockingStateFor(final Blockable overdueable, final InternalTenantContext context) {
- return null;
- }
-
- @Override
- public List<BlockingState> getBlockingHistory(final UUID overdueableId, final InternalTenantContext context) {
- if (overdueableId == bunId) {
- return blockingStates;
- }
- return new ArrayList<BlockingState>();
- }
-
- @Override
- public List<BlockingState> getBlockingHistory(final Blockable overdueable, final InternalTenantContext context) {
- return new ArrayList<BlockingState>();
- }
- });
-
- final BillingInternalApi api = new DefaultInternalBillingApi(accountApi, bcdCalculator, entitlementApi, blockingCal, catalogService, tagApi);
- final SortedSet<BillingEvent> events = api.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
+ blockingStates.add(new DefaultBlockingState(UUID.randomUUID(), bunId, CLEAR_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2), null));
+
+ ((MockBlockingStateDao) blockingStateDao).setBlockingStates(bunId, blockingStates);
+ final SortedSet<BillingEvent> events = billingInternalApi.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
Assert.assertEquals(events.size(), 3);
final Iterator<BillingEvent> it = events.iterator();
@@ -269,42 +200,32 @@ public class TestBillingApi extends JunctionTestSuite {
}
@Test(groups = "fast")
- public void testBillingEventsAutoInvoicingOffAccount() throws CatalogApiException, AccountApiException {
- final Plan nextPlan = catalogService.getFullCatalog().findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
+ public void testBillingEventsAutoInvoicingOffAccount() throws CatalogApiException, AccountApiException, TagApiException {
+ final Plan nextPlan = catalog.findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
final PlanPhase nextPhase = nextPlan.getAllPhases()[1];
createSubscriptionCreationEvent(nextPlan, nextPhase);
final Account account = createAccount(32);
- final Tag aioTag = mock(Tag.class);
- when(aioTag.getTagDefinitionId()).thenReturn(ControlTagType.AUTO_INVOICING_OFF.getId());
- final List<Tag> tags = new ArrayList<Tag>();
- tags.add(aioTag);
-
- when(tagApi.getTags(account.getId(), ObjectType.ACCOUNT, internalCallContext)).thenReturn(tags);
- assertEquals(tagApi.getTags(account.getId(), ObjectType.ACCOUNT, internalCallContext), tags);
+ tagInternalApi.addTag(account.getId(), ObjectType.ACCOUNT, ControlTagType.AUTO_INVOICING_OFF.getId(), internalCallContext);
- final BillingEventSet events = api.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
+ final BillingEventSet events = billingInternalApi.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
assertEquals(events.isAccountAutoInvoiceOff(), true);
assertEquals(events.size(), 0);
}
@Test(groups = "fast")
- public void testBillingEventsAutoInvoicingOffBundle() throws CatalogApiException, AccountApiException {
- final Plan nextPlan = catalogService.getFullCatalog().findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
+ public void testBillingEventsAutoInvoicingOffBundle() throws CatalogApiException, AccountApiException, TagApiException {
+ final Plan nextPlan = catalog.findPlan("PickupTrialEvergreen10USD", clock.getUTCNow());
final PlanPhase nextPhase = nextPlan.getAllPhases()[1];
createSubscriptionCreationEvent(nextPlan, nextPhase);
final Account account = createAccount(32);
- final List<Tag> tags = new ArrayList<Tag>();
- final Tag aioTag = mock(Tag.class);
- when(aioTag.getTagDefinitionId()).thenReturn(ControlTagType.AUTO_INVOICING_OFF.getId());
- tags.add(aioTag);
- when(tagApi.getTags(bunId, ObjectType.BUNDLE, internalCallContext)).thenReturn(tags);
+ tagInternalApi.addTag(bunId, ObjectType.BUNDLE, ControlTagType.AUTO_INVOICING_OFF.getId(), internalCallContext);
- final BillingEventSet events = api.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
+ final BillingEventSet events = billingInternalApi.getBillingEventsForAccountAndUpdateAccountBCD(account.getId(), internalCallContext);
assertEquals(events.getSubscriptionIdsWithAutoInvoiceOff().size(), 1);
assertEquals(events.getSubscriptionIdsWithAutoInvoiceOff().get(0), subId);
@@ -349,14 +270,14 @@ public class TestBillingApi extends JunctionTestSuite {
Mockito.when(account.getCurrency()).thenReturn(Currency.USD);
Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
Mockito.when(account.getTimeZone()).thenReturn(DateTimeZone.UTC);
- Mockito.when(accountApi.getAccountById(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(account);
+ Mockito.when(accountInternalApi.getAccountById(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(account);
return account;
}
private DateTime createSubscriptionCreationEvent(final Plan nextPlan, final PlanPhase nextPhase) throws CatalogApiException {
final DateTime now = clock.getUTCNow();
final DateTime then = now.minusDays(1);
- final PriceList nextPriceList = catalogService.getFullCatalog().findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME, now);
+ final PriceList nextPriceList = catalog.findPriceList(PriceListSet.DEFAULT_PRICELIST_NAME, now);
final EffectiveSubscriptionInternalEvent t = new MockEffectiveSubscriptionEvent(
eventId, subId, bunId, then, now, null, null, null, null, SubscriptionState.ACTIVE,
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
index 89ca328..aa9c5b3 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestBlockingCalculator.java
@@ -16,10 +16,6 @@
package com.ning.billing.junction.plumbing.billing;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNull;
-
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Hashtable;
@@ -33,7 +29,7 @@ import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.mockito.Mockito;
-import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.ning.billing.account.api.Account;
@@ -46,69 +42,53 @@ import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.entitlement.api.SubscriptionTransitionType;
import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.junction.JunctionTestSuite;
+import com.ning.billing.junction.JunctionTestSuiteNoDB;
import com.ning.billing.junction.api.Blockable;
-import com.ning.billing.junction.api.BlockingState;
import com.ning.billing.junction.api.Blockable.Type;
-import com.ning.billing.junction.dao.BlockingStateDao;
+import com.ning.billing.junction.api.BlockingState;
+import com.ning.billing.junction.dao.MockBlockingStateDao;
import com.ning.billing.junction.plumbing.billing.BlockingCalculator.DisabledDuration;
import com.ning.billing.mock.api.MockBillCycleDay;
-import com.ning.billing.util.clock.ClockMock;
import com.ning.billing.util.svcapi.junction.BillingEvent;
import com.ning.billing.util.svcapi.junction.BillingModeType;
-import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
-public class TestBlockingCalculator extends JunctionTestSuite {
+public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
private static final String DISABLED_BUNDLE = "disabled-bundle";
private static final String CLEAR_BUNDLE = "clear-bundle";
- private BlockingInternalApi blockingApi;
+ private final UUID bundleId1 = UUID.randomUUID();
+ private final UUID bundleId2 = UUID.randomUUID();
+
private Account account;
private Subscription subscription1;
private Subscription subscription2;
private Subscription subscription3;
private Subscription subscription4;
- private final UUID bundleId1 = UUID.randomUUID();
- private final UUID bundleId2 = UUID.randomUUID();
- private ClockMock clock;
- private BlockingCalculator odc;
-
- @BeforeClass(groups = "fast")
- public void setUpBeforeClass() throws Exception {
- clock = new ClockMock();
-
- final Injector i = Guice.createInjector(new AbstractModule() {
- @Override
- protected void configure() {
- blockingApi = Mockito.mock(BlockingInternalApi.class);
- account = Mockito.mock(Account.class);
- subscription1 = Mockito.mock(Subscription.class);
- subscription2 = Mockito.mock(Subscription.class);
- subscription3 = Mockito.mock(Subscription.class);
- subscription4 = Mockito.mock(Subscription.class);
- Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
- Mockito.when(subscription1.getBundleId()).thenReturn(bundleId1);
- Mockito.when(subscription2.getBundleId()).thenReturn(bundleId1);
- Mockito.when(subscription3.getBundleId()).thenReturn(bundleId1);
- Mockito.when(subscription4.getBundleId()).thenReturn(bundleId2);
- Mockito.when(subscription1.getId()).thenReturn(UUID.randomUUID());
- Mockito.when(subscription2.getId()).thenReturn(UUID.randomUUID());
- Mockito.when(subscription3.getId()).thenReturn(UUID.randomUUID());
- Mockito.when(subscription4.getId()).thenReturn(UUID.randomUUID());
-
- bind(BlockingStateDao.class).toInstance(Mockito.mock(BlockingStateDao.class));
- bind(BlockingInternalApi.class).toInstance(blockingApi);
- }
-
- });
- odc = i.getInstance(BlockingCalculator.class);
+ @BeforeMethod(groups = "fast")
+ public void setUpTest() throws Exception {
+ account = Mockito.mock(Account.class);
+ subscription1 = Mockito.mock(Subscription.class);
+ subscription2 = Mockito.mock(Subscription.class);
+ subscription3 = Mockito.mock(Subscription.class);
+ subscription4 = Mockito.mock(Subscription.class);
+ Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscription1.getBundleId()).thenReturn(bundleId1);
+ Mockito.when(subscription2.getBundleId()).thenReturn(bundleId1);
+ Mockito.when(subscription3.getBundleId()).thenReturn(bundleId1);
+ Mockito.when(subscription4.getBundleId()).thenReturn(bundleId2);
+ Mockito.when(subscription1.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscription2.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscription3.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscription4.getId()).thenReturn(UUID.randomUUID());
+
+ ((MockBlockingStateDao) blockingStateDao).clear();
}
// S1-S2-S3 subscriptions in B1
@@ -139,25 +119,25 @@ public class TestBlockingCalculator extends JunctionTestSuite {
blockingStates.add(new DefaultBlockingState(UUID.randomUUID(), bundleId1, DISABLED_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now, null));
blockingStates.add(new DefaultBlockingState(UUID.randomUUID(), bundleId1, CLEAR_BUNDLE, Blockable.Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2), null));
- Mockito.when(blockingApi.getBlockingHistory(bundleId1, internalCallContext)).thenReturn(blockingStates);
+ setBlockingStates(bundleId1, blockingStates);
- odc.insertBlockingEvents(billingEvents, internalCallContext);
+ blockingCalculator.insertBlockingEvents(billingEvents, internalCallContext);
assertEquals(billingEvents.size(), 7);
- final SortedSet<BillingEvent> s1Events = odc.filter(billingEvents, subscription1);
+ final SortedSet<BillingEvent> s1Events = blockingCalculator.filter(billingEvents, subscription1);
final Iterator<BillingEvent> it1 = s1Events.iterator();
assertEquals(it1.next(), A);
assertEquals(it1.next().getTransitionType(), SubscriptionTransitionType.START_BILLING_DISABLED);
assertEquals(it1.next().getTransitionType(), SubscriptionTransitionType.END_BILLING_DISABLED);
- final SortedSet<BillingEvent> s2Events = odc.filter(billingEvents, subscription2);
+ final SortedSet<BillingEvent> s2Events = blockingCalculator.filter(billingEvents, subscription2);
final Iterator<BillingEvent> it2 = s2Events.iterator();
assertEquals(it2.next(), B);
assertEquals(it2.next().getTransitionType(), SubscriptionTransitionType.START_BILLING_DISABLED);
assertEquals(it2.next().getTransitionType(), SubscriptionTransitionType.END_BILLING_DISABLED);
- final SortedSet<BillingEvent> s3Events = odc.filter(billingEvents, subscription3);
+ final SortedSet<BillingEvent> s3Events = blockingCalculator.filter(billingEvents, subscription3);
final Iterator<BillingEvent> it3 = s3Events.iterator();
assertEquals(it3.next(), D);
}
@@ -173,7 +153,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
disabledDuration.add(new DisabledDuration(now, null));
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 0);
}
@@ -192,7 +172,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(e1);
billingEvents.add(e2);
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -210,7 +190,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
final BillingEvent e1 = createRealEvent(now.plusDays(1), subscription1);
billingEvents.add(e1);
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.first(), e1);
@@ -228,7 +208,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
final BillingEvent e1 = createRealEvent(now.minusDays(1), subscription1);
billingEvents.add(e1);
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 0);
}
@@ -247,7 +227,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(e1);
billingEvents.add(e2);
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -269,7 +249,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(e2);
billingEvents.add(e3);
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -287,7 +267,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
final BillingEvent e2 = createRealEvent(now.plusDays(1), subscription1);
billingEvents.add(e2);
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -308,7 +288,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(e2);
billingEvents.add(e3);
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.first(), e2);
@@ -328,7 +308,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(e3);
- final SortedSet<BillingEvent> results = odc.eventsToRemove(disabledDuration, billingEvents, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.eventsToRemove(disabledDuration, billingEvents, subscription1);
assertEquals(results.size(), 0);
}
@@ -344,7 +324,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
disabledDuration.add(new DisabledDuration(now, null));
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.first().getEffectiveDate(), now);
@@ -366,7 +346,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.first().getEffectiveDate(), now);
@@ -387,7 +367,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
disabledDuration.add(new DisabledDuration(now, null));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 0);
}
@@ -403,7 +383,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
disabledDuration.add(new DisabledDuration(now, now.plusDays(2)));
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 2);
assertEquals(results.first().getEffectiveDate(), now);
@@ -428,7 +408,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(createRealEvent(now.minusDays(1), subscription1));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 2);
assertEquals(results.first().getEffectiveDate(), now);
@@ -454,7 +434,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
billingEvents.add(createRealEvent(now.plusDays(3), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 2);
assertEquals(results.first().getEffectiveDate(), now);
@@ -478,7 +458,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
disabledDuration.add(new DisabledDuration(now, now.plusDays(2)));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.last().getEffectiveDate(), now.plusDays(2));
@@ -497,7 +477,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
disabledDuration.add(new DisabledDuration(now, now.plusDays(2)));
billingEvents.add(createRealEvent(now.plusDays(1), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 1);
assertEquals(results.last().getEffectiveDate(), now.plusDays(2));
@@ -516,7 +496,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
disabledDuration.add(new DisabledDuration(now, now.plusDays(2)));
billingEvents.add(createRealEvent(now.plusDays(3), subscription1));
- final SortedSet<BillingEvent> results = odc.createNewEvents(disabledDuration, billingEvents, account, subscription1);
+ final SortedSet<BillingEvent> results = blockingCalculator.createNewEvents(disabledDuration, billingEvents, account, subscription1);
assertEquals(results.size(), 0);
}
@@ -532,10 +512,10 @@ public class TestBlockingCalculator extends JunctionTestSuite {
events.add(createRealEvent(now.minusDays(5), subscription1));
events.add(createRealEvent(now.minusDays(1), subscription1));
- final BillingEvent minus11 = odc.precedingBillingEventForSubscription(now.minusDays(11), events, subscription1);
+ final BillingEvent minus11 = blockingCalculator.precedingBillingEventForSubscription(now.minusDays(11), events, subscription1);
assertNull(minus11);
- final BillingEvent minus5andAHalf = odc.precedingBillingEventForSubscription(now.minusDays(5).minusHours(12), events, subscription1);
+ final BillingEvent minus5andAHalf = blockingCalculator.precedingBillingEventForSubscription(now.minusDays(5).minusHours(12), events, subscription1);
assertNotNull(minus5andAHalf);
assertEquals(minus5andAHalf.getEffectiveDate(), now.minusDays(6));
@@ -575,9 +555,9 @@ public class TestBlockingCalculator extends JunctionTestSuite {
events.add(createBillingEvent(subscription1));
events.add(createBillingEvent(subscription2));
- final SortedSet<BillingEvent> result1 = odc.filter(events, subscription1);
- final SortedSet<BillingEvent> result2 = odc.filter(events, subscription2);
- final SortedSet<BillingEvent> result3 = odc.filter(events, subscription3);
+ final SortedSet<BillingEvent> result1 = blockingCalculator.filter(events, subscription1);
+ final SortedSet<BillingEvent> result2 = blockingCalculator.filter(events, subscription2);
+ final SortedSet<BillingEvent> result3 = blockingCalculator.filter(events, subscription3);
assertEquals(result1.size(), 3);
assertEquals(result1.first().getSubscription(), subscription1);
@@ -592,7 +572,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
final DateTime now = clock.getUTCNow();
final BillingEvent event = new MockBillingEvent();
- final BillingEvent result = odc.createNewDisableEvent(now, event);
+ final BillingEvent result = blockingCalculator.createNewDisableEvent(now, event);
assertEquals(result.getBillCycleDay(), event.getBillCycleDay());
assertEquals(result.getEffectiveDate(), now);
assertEquals(result.getPlanPhase(), event.getPlanPhase());
@@ -613,7 +593,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
final DateTime now = clock.getUTCNow();
final BillingEvent event = new MockBillingEvent();
- final BillingEvent result = odc.createNewReenableEvent(now, event);
+ final BillingEvent result = blockingCalculator.createNewReenableEvent(now, event);
assertEquals(result.getBillCycleDay(), event.getBillCycleDay());
assertEquals(result.getEffectiveDate(), now);
assertEquals(result.getPlanPhase(), event.getPlanPhase());
@@ -645,7 +625,7 @@ public class TestBlockingCalculator extends JunctionTestSuite {
events.add(createBillingEvent(subscription3));
events.add(createBillingEvent(subscription4));
- final Hashtable<UUID, List<Subscription>> map = odc.createBundleSubscriptionMap(events);
+ final Hashtable<UUID, List<Subscription>> map = blockingCalculator.createBundleSubscriptionMap(events);
assertNotNull(map);
assertEquals(map.keySet().size(), 2);
@@ -669,10 +649,10 @@ public class TestBlockingCalculator extends JunctionTestSuite {
//simple events open clear -> disabled
blockingEvents = new ArrayList<BlockingState>();
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
- List<DisabledDuration> pairs = odc.createBlockingDurations(blockingEvents);
+ List<DisabledDuration> pairs = blockingCalculator.createBlockingDurations(blockingEvents);
assertEquals(pairs.size(), 1);
assertNotNull(pairs.get(0).getStart());
assertEquals(pairs.get(0).getStart(), now.plusDays(1));
@@ -680,11 +660,11 @@ public class TestBlockingCalculator extends JunctionTestSuite {
//simple events closed clear -> disabled
blockingEvents = new ArrayList<BlockingState>();
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2), null));
- pairs = odc.createBlockingDurations(blockingEvents);
+ pairs = blockingCalculator.createBlockingDurations(blockingEvents);
assertEquals(pairs.size(), 1);
assertNotNull(pairs.get(0).getStart());
assertEquals(pairs.get(0).getStart(), now.plusDays(1));
@@ -693,11 +673,11 @@ public class TestBlockingCalculator extends JunctionTestSuite {
//simple BUNDLE events closed clear -> disabled
blockingEvents = new ArrayList<BlockingState>();
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(2), null));
- pairs = odc.createBlockingDurations(blockingEvents);
+ pairs = blockingCalculator.createBlockingDurations(blockingEvents);
assertEquals(pairs.size(), 1);
assertNotNull(pairs.get(0).getStart());
assertEquals(pairs.get(0).getStart(), now.plusDays(1));
@@ -706,12 +686,12 @@ public class TestBlockingCalculator extends JunctionTestSuite {
//two or more disableds in a row
blockingEvents = new ArrayList<BlockingState>();
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(2), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(3), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(2), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(3), null));
- pairs = odc.createBlockingDurations(blockingEvents);
+ pairs = blockingCalculator.createBlockingDurations(blockingEvents);
assertEquals(pairs.size(), 1);
assertNotNull(pairs.get(0).getStart());
assertEquals(pairs.get(0).getStart(), now.plusDays(1));
@@ -719,13 +699,13 @@ public class TestBlockingCalculator extends JunctionTestSuite {
assertEquals(pairs.get(0).getEnd(), now.plusDays(3));
blockingEvents = new ArrayList<BlockingState>();
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(2), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(3), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(4), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now, null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(1), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(2), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, now.plusDays(3), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, now.plusDays(4), null));
- pairs = odc.createBlockingDurations(blockingEvents);
+ pairs = blockingCalculator.createBlockingDurations(blockingEvents);
assertEquals(pairs.size(), 1);
assertNotNull(pairs.get(0).getStart());
assertEquals(pairs.get(0).getStart(), now.plusDays(1));
@@ -746,14 +726,14 @@ public class TestBlockingCalculator extends JunctionTestSuite {
billingEvents.add(upgrade);
final List<BlockingState> blockingEvents = new ArrayList<BlockingState>();
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, false, false, new LocalDate(2012, 7, 5).toDateTimeAtStartOfDay(DateTimeZone.UTC), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, new LocalDate(2012, 7, 15).toDateTimeAtStartOfDay(DateTimeZone.UTC), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, new LocalDate(2012, 7, 25).toDateTimeAtStartOfDay(DateTimeZone.UTC), null));
- blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(),ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, new LocalDate(2012, 7, 25).toDateTimeAtStartOfDay(DateTimeZone.UTC), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, false, false, new LocalDate(2012, 7, 5).toDateTimeAtStartOfDay(DateTimeZone.UTC), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, new LocalDate(2012, 7, 15).toDateTimeAtStartOfDay(DateTimeZone.UTC), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, DISABLED_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", true, true, true, new LocalDate(2012, 7, 25).toDateTimeAtStartOfDay(DateTimeZone.UTC), null));
+ blockingEvents.add(new DefaultBlockingState(UUID.randomUUID(), ovdId, CLEAR_BUNDLE, Type.SUBSCRIPTION_BUNDLE, "test", false, false, false, new LocalDate(2012, 7, 25).toDateTimeAtStartOfDay(DateTimeZone.UTC), null));
- Mockito.when(blockingApi.getBlockingHistory(bundleId1, internalCallContext)).thenReturn(blockingEvents);
+ setBlockingStates(bundleId1, blockingEvents);
- odc.insertBlockingEvents(billingEvents, internalCallContext);
+ blockingCalculator.insertBlockingEvents(billingEvents, internalCallContext);
assertEquals(billingEvents.size(), 5);
final List<BillingEvent> events = new ArrayList<BillingEvent>(billingEvents);
@@ -768,4 +748,8 @@ public class TestBlockingCalculator extends JunctionTestSuite {
assertEquals(events.get(4).getEffectiveDate(), new LocalDate(2012, 7, 25).toDateTimeAtStartOfDay(DateTimeZone.UTC));
assertEquals(events.get(4).getTransitionType(), SubscriptionTransitionType.CHANGE);
}
+
+ private void setBlockingStates(final UUID blockedId, final List<BlockingState> blockingStates) {
+ ((MockBlockingStateDao) blockingStateDao).setBlockingStates(blockedId, blockingStates);
+ }
}
diff --git a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
index 58145d2..3fb781b 100644
--- a/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
+++ b/junction/src/test/java/com/ning/billing/junction/plumbing/billing/TestDefaultBillingEvent.java
@@ -42,13 +42,13 @@ import com.ning.billing.catalog.api.Plan;
import com.ning.billing.catalog.api.PlanPhase;
import com.ning.billing.entitlement.api.SubscriptionTransitionType;
import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.junction.JunctionTestSuite;
+import com.ning.billing.junction.JunctionTestSuiteNoDB;
import com.ning.billing.mock.MockAccountBuilder;
import com.ning.billing.mock.api.MockBillCycleDay;
import com.ning.billing.util.svcapi.junction.BillingEvent;
import com.ning.billing.util.svcapi.junction.BillingModeType;
-public class TestDefaultBillingEvent extends JunctionTestSuite {
+public class TestDefaultBillingEvent extends JunctionTestSuiteNoDB {
private static final UUID ID_ZERO = new UUID(0L, 0L);
private static final UUID ID_ONE = new UUID(0L, 1L);
diff --git a/util/src/main/java/com/ning/billing/util/glue/TagStoreModule.java b/util/src/main/java/com/ning/billing/util/glue/TagStoreModule.java
index 2bf9f5f..2369714 100644
--- a/util/src/main/java/com/ning/billing/util/glue/TagStoreModule.java
+++ b/util/src/main/java/com/ning/billing/util/glue/TagStoreModule.java
@@ -28,15 +28,24 @@ import com.ning.billing.util.tag.dao.TagDefinitionDao;
import com.google.inject.AbstractModule;
public class TagStoreModule extends AbstractModule {
- protected void installDaos() {
- bind(TagDefinitionDao.class).to(DefaultTagDefinitionDao.class).asEagerSingleton();
- bind(TagDao.class).to(DefaultTagDao.class).asEagerSingleton();
- }
@Override
protected void configure() {
+ installUserApi();
+ installInternalApi();
installDaos();
+ }
+
+ protected void installUserApi() {
bind(TagUserApi.class).to(DefaultTagUserApi.class).asEagerSingleton();
+ }
+
+ protected void installInternalApi() {
bind(TagInternalApi.class).to(DefaultTagInternalApi.class).asEagerSingleton();
}
+
+ protected void installDaos() {
+ bind(TagDefinitionDao.class).to(DefaultTagDefinitionDao.class).asEagerSingleton();
+ bind(TagDao.class).to(DefaultTagDao.class).asEagerSingleton();
+ }
}
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
index 309e20f..053232f 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/MockTagDao.java
@@ -77,4 +77,8 @@ public class MockTagDao implements TagDao {
}
}));
}
+
+ public void clear() {
+ tagStore.clear();
+ }
}