killbill-memoizeit

junction: update tests to new conventions See #38. Signed-off-by:

2/1/2013 11:09:45 PM

Changes

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();
+    }
 }