killbill-memoizeit

Create new entitlement module and move blocking API from junction

7/15/2013 11:58:04 PM

Changes

.gitignore 1(+1 -0)

beatrix/pom.xml 4(+4 -0)

entitlement/pom.xml 153(+153 -0)

junction/pom.xml 11(+11 -0)

pom.xml 1(+1 -0)

Details

.gitignore 1(+1 -0)

diff --git a/.gitignore b/.gitignore
index ccd6ef3..a7077d4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
 *.ipr
 *.iws
 *.DS_Store
+*.bak
 target
 staging
 overlays
diff --git a/api/src/main/java/com/ning/billing/glue/EntitlementModule.java b/api/src/main/java/com/ning/billing/glue/EntitlementModule.java
new file mode 100644
index 0000000..29ac72f
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/glue/EntitlementModule.java
@@ -0,0 +1,32 @@
+/*
+ * 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.glue;
+
+public interface EntitlementModule {
+    public void installAccountUserApi();
+
+    public void installSubscriptionUserApi();
+
+
+    public void installBlockingStateDao();
+
+    public void installBlockingApi();
+
+    public void installEntitlementApi();
+
+    public void installBlockingChecker();
+}
diff --git a/api/src/main/java/com/ning/billing/glue/JunctionModule.java b/api/src/main/java/com/ning/billing/glue/JunctionModule.java
index 0566fd7..b47b550 100644
--- a/api/src/main/java/com/ning/billing/glue/JunctionModule.java
+++ b/api/src/main/java/com/ning/billing/glue/JunctionModule.java
@@ -18,15 +18,5 @@ package com.ning.billing.glue;
 
 
 public interface JunctionModule {
-
     public void installBillingApi();
-
-    public void installAccountUserApi();
-
-    public void installBlockingApi();
-
-    public void installSubscriptionUserApi();
-
-    public void installJunctionApi();
-
 }

beatrix/pom.xml 4(+4 -0)

diff --git a/beatrix/pom.xml b/beatrix/pom.xml
index 9cd1141..43e61b2 100644
--- a/beatrix/pom.xml
+++ b/beatrix/pom.xml
@@ -70,6 +70,10 @@
         </dependency>
         <dependency>
             <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-entitlement</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
             <artifactId>killbill-internal-api</artifactId>
         </dependency>
         <dependency>
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixIntegrationModule.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixIntegrationModule.java
index ed0359f..9fe2a7d 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixIntegrationModule.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/BeatrixIntegrationModule.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.net.URL;
 import java.util.Set;
 
+import com.ning.billing.entitlement.glue.DefaultEntitlementModule;
 import org.skife.config.ConfigSource;
 
 import com.ning.billing.GuicyKillbillTestWithEmbeddedDBModule;
@@ -109,6 +110,7 @@ public class BeatrixIntegrationModule extends AbstractModule {
         install(new DefaultAccountModule(configSource));
         install(new CatalogModule(configSource));
         install(new DefaultSubscriptionModule(configSource));
+        install(new DefaultEntitlementModule(configSource));
         install(new DefaultInvoiceModuleWithSwitchRepairLogic(configSource));
         install(new TemplateModule());
         install(new PaymentPluginMockModule(configSource));
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBundleTransfer.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBundleTransfer.java
index 9650a47..e3cfad7 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBundleTransfer.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestBundleTransfer.java
@@ -16,13 +16,7 @@
 
 package com.ning.billing.beatrix.integration;
 
-import java.math.BigDecimal;
-import java.util.List;
-
-import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
-import org.testng.annotations.Test;
-
+import com.google.common.collect.ImmutableList;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.api.TestApiListener.NextEvent;
 import com.ning.billing.beatrix.util.InvoiceChecker.ExpectedInvoiceItemCheck;
@@ -30,13 +24,17 @@ import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.subscription.api.user.SubscriptionData;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoiceItemType;
 import com.ning.billing.subscription.api.user.SubscriptionBundle;
+import com.ning.billing.subscription.api.user.SubscriptionData;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.testng.annotations.Test;
 
-import com.google.common.collect.ImmutableList;
+import java.math.BigDecimal;
+import java.util.List;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
@@ -66,9 +64,9 @@ public class TestBundleTransfer extends TestIntegrationBase {
         busHandler.pushExpectedEvents(NextEvent.CREATE, NextEvent.INVOICE);
         final PlanPhaseSpecifier bpPlanPhaseSpecifier = new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSetName, null);
         final SubscriptionData bpSubscription = subscriptionDataFromSubscription(subscriptionUserApi.createSubscription(bundle.getId(),
-                                                                                                                       bpPlanPhaseSpecifier,
-                                                                                                                       null,
-                                                                                                                       callContext));
+                bpPlanPhaseSpecifier,
+                null,
+                callContext));
         assertNotNull(bpSubscription);
         assertTrue(busHandler.isCompleted(DELAY));
         assertListenerStatus();
@@ -126,9 +124,9 @@ public class TestBundleTransfer extends TestIntegrationBase {
         busHandler.pushExpectedEvents(NextEvent.CREATE, NextEvent.INVOICE);
         final PlanPhaseSpecifier bpPlanPhaseSpecifier = new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSetName, null);
         final SubscriptionData bpSubscription = subscriptionDataFromSubscription(subscriptionUserApi.createSubscription(bundle.getId(),
-                                                                                                                       bpPlanPhaseSpecifier,
-                                                                                                                       null,
-                                                                                                                       callContext));
+                bpPlanPhaseSpecifier,
+                null,
+                callContext));
         assertNotNull(bpSubscription);
         assertTrue(busHandler.isCompleted(DELAY));
         assertListenerStatus();
@@ -193,9 +191,9 @@ public class TestBundleTransfer extends TestIntegrationBase {
         busHandler.pushExpectedEvents(NextEvent.CREATE, NextEvent.INVOICE);
         final PlanPhaseSpecifier bpPlanPhaseSpecifier = new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSetName, null);
         final SubscriptionData bpSubscription = subscriptionDataFromSubscription(subscriptionUserApi.createSubscription(bundle.getId(),
-                                                                                                                       bpPlanPhaseSpecifier,
-                                                                                                                       null,
-                                                                                                                       callContext));
+                bpPlanPhaseSpecifier,
+                null,
+                callContext));
         assertNotNull(bpSubscription);
         assertTrue(busHandler.isCompleted(DELAY));
         assertListenerStatus();
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
index 1177ede..82b5e58 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationBase.java
@@ -16,24 +16,13 @@
 
 package com.ning.billing.beatrix.integration;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-
-import javax.annotation.Nullable;
-
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.joda.time.LocalDate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Stage;
+import com.google.inject.name.Named;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountData;
 import com.ning.billing.account.api.AccountService;
@@ -46,16 +35,17 @@ import com.ning.billing.beatrix.glue.BeatrixModule;
 import com.ning.billing.beatrix.lifecycle.Lifecycle;
 import com.ning.billing.beatrix.osgi.SetupBundleWithAssertion;
 import com.ning.billing.beatrix.util.AccountChecker;
-import com.ning.billing.beatrix.util.SubscriptionChecker;
 import com.ning.billing.beatrix.util.InvoiceChecker;
 import com.ning.billing.beatrix.util.PaymentChecker;
 import com.ning.billing.beatrix.util.RefundChecker;
+import com.ning.billing.beatrix.util.SubscriptionChecker;
 import com.ning.billing.bus.api.PersistentBus;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PriceListSet;
 import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.BlockingSubscription;
 import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceApiException;
 import com.ning.billing.invoice.api.InvoicePayment;
@@ -63,7 +53,6 @@ import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.invoice.api.InvoiceService;
 import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.invoice.model.InvoicingConfiguration;
-import com.ning.billing.junction.plumbing.api.BlockingSubscription;
 import com.ning.billing.mock.MockAccountBuilder;
 import com.ning.billing.overdue.OverdueUserApi;
 import com.ning.billing.overdue.wrapper.OverdueWrapperFactory;
@@ -88,14 +77,22 @@ import com.ning.billing.util.config.OSGIConfig;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
 import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
 import com.ning.billing.util.svcsapi.bus.BusService;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.joda.time.LocalDate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
 
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.Stage;
-import com.google.inject.name.Named;
+import javax.annotation.Nullable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
 
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
@@ -354,17 +351,17 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
 
     protected AccountData getAccountData(final int billingDay) {
         return new MockAccountBuilder().name(UUID.randomUUID().toString().substring(1, 8))
-                                       .firstNameLength(6)
-                                       .email(UUID.randomUUID().toString().substring(1, 8))
-                                       .phone(UUID.randomUUID().toString().substring(1, 8))
-                                       .migrated(false)
-                                       .isNotifiedForInvoices(false)
-                                       .externalKey(UUID.randomUUID().toString().substring(1, 8))
-                                       .billingCycleDayLocal(billingDay)
-                                       .currency(Currency.USD)
-                                       .paymentMethodId(UUID.randomUUID())
-                                       .timeZone(DateTimeZone.UTC)
-                                       .build();
+                .firstNameLength(6)
+                .email(UUID.randomUUID().toString().substring(1, 8))
+                .phone(UUID.randomUUID().toString().substring(1, 8))
+                .migrated(false)
+                .isNotifiedForInvoices(false)
+                .externalKey(UUID.randomUUID().toString().substring(1, 8))
+                .billingCycleDayLocal(billingDay)
+                .currency(Currency.USD)
+                .paymentMethodId(UUID.randomUUID())
+                .timeZone(DateTimeZone.UTC)
+                .build();
     }
 
     protected void addMonthsAndCheckForCompletion(final int nbMonth, final NextEvent... events) {
@@ -497,9 +494,9 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
             public Subscription apply(@Nullable final Void dontcare) {
                 try {
                     final Subscription subscription = subscriptionUserApi.createSubscription(bundleId,
-                                                                                            new PlanPhaseSpecifier(productName, productCategory, billingPeriod, PriceListSet.DEFAULT_PRICELIST_NAME, null),
-                                                                                            null,
-                                                                                            callContext);
+                            new PlanPhaseSpecifier(productName, productCategory, billingPeriod, PriceListSet.DEFAULT_PRICELIST_NAME, null),
+                            null,
+                            callContext);
                     assertNotNull(subscription);
                     return subscription;
                 } catch (SubscriptionUserApiException e) {
@@ -555,7 +552,7 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
             public Void apply(@Nullable final Void input) {
                 try {
                     invoiceUserApi.insertCreditForInvoice(account.getId(), invoice.getId(), invoice.getBalance(), invoice.getInvoiceDate(),
-                                                          account.getCurrency(), callContext);
+                            account.getCurrency(), callContext);
                 } catch (InvoiceApiException e) {
                     fail(e.toString());
                 }
@@ -570,7 +567,7 @@ public class TestIntegrationBase extends BeatrixTestSuiteWithEmbeddedDB implemen
             public Void apply(@Nullable final Void input) {
                 try {
                     invoiceUserApi.insertInvoiceItemAdjustment(account.getId(), invoice.getId(), invoice.getInvoiceItems().get(itemNb - 1).getId(),
-                                                               invoice.getInvoiceDate(), callContext);
+                            invoice.getInvoiceDate(), callContext);
                 } catch (InvoiceApiException e) {
                     fail(e.toString());
                 }
diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/util/SubscriptionChecker.java b/beatrix/src/test/java/com/ning/billing/beatrix/util/SubscriptionChecker.java
index ec855f2..7db4b52 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/util/SubscriptionChecker.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/util/SubscriptionChecker.java
@@ -16,24 +16,22 @@
 
 package com.ning.billing.beatrix.util;
 
-import java.util.List;
-import java.util.UUID;
-
-import javax.inject.Inject;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-
-import com.ning.billing.subscription.api.user.SubscriptionData;
-import com.ning.billing.subscription.api.user.SubscriptionTransitionData;
-import com.ning.billing.junction.plumbing.api.BlockingSubscription;
+import com.ning.billing.entitlement.api.BlockingSubscription;
 import com.ning.billing.subscription.api.user.Subscription;
 import com.ning.billing.subscription.api.user.SubscriptionBundle;
+import com.ning.billing.subscription.api.user.SubscriptionData;
 import com.ning.billing.subscription.api.user.SubscriptionTransition;
+import com.ning.billing.subscription.api.user.SubscriptionTransitionData;
 import com.ning.billing.subscription.api.user.SubscriptionUserApi;
 import com.ning.billing.subscription.api.user.SubscriptionUserApiException;
 import com.ning.billing.util.callcontext.CallContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+
+import javax.inject.Inject;
+import java.util.List;
+import java.util.UUID;
 
 public class SubscriptionChecker {
 

entitlement/pom.xml 153(+153 -0)

diff --git a/entitlement/pom.xml b/entitlement/pom.xml
new file mode 100644
index 0000000..c2e9192
--- /dev/null
+++ b/entitlement/pom.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>killbill</artifactId>
+        <groupId>com.ning.billing</groupId>
+        <version>0.3.4-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <artifactId>killbill-entitlement</artifactId>
+    <packaging>jar</packaging>
+    <name>killbill-entitlement</name>
+    <dependencies>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.inject</groupId>
+            <artifactId>guice</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-catalog</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-catalog</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-internal-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-util</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing.commons</groupId>
+            <artifactId>killbill-clock</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing.commons</groupId>
+            <artifactId>killbill-clock</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing.commons</groupId>
+            <artifactId>killbill-queue</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing.commons</groupId>
+            <artifactId>killbill-queue</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-mxj</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-mxj-db-files</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.antlr</groupId>
+            <artifactId>stringtemplate</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jdbi</groupId>
+            <artifactId>jdbi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.skife.config</groupId>
+            <artifactId>config-magic</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
new file mode 100644
index 0000000..3a9a99f
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
@@ -0,0 +1,66 @@
+package com.ning.billing.entitlement.glue;
+
+import com.google.inject.AbstractModule;
+import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.entitlement.api.BlockingAccountUserApi;
+import com.ning.billing.entitlement.api.BlockingSubscriptionUserApi;
+import com.ning.billing.entitlement.api.DefaultEntitlementApi;
+import com.ning.billing.entitlement.api.svcs.DefaultInternalBlockingApi;
+import com.ning.billing.entitlement.block.BlockingChecker;
+import com.ning.billing.entitlement.block.DefaultBlockingChecker;
+import com.ning.billing.entitlement.dao.BlockingStateDao;
+import com.ning.billing.entitlement.dao.DefaultBlockingStateDao;
+import com.ning.billing.glue.EntitlementModule;
+import com.ning.billing.junction.api.JunctionApi;
+import com.ning.billing.subscription.api.user.SubscriptionUserApi;
+import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
+import org.skife.config.ConfigSource;
+
+public class DefaultEntitlementModule extends AbstractModule implements EntitlementModule {
+
+
+    public DefaultEntitlementModule(final ConfigSource configSource) {
+    }
+
+    @Override
+    protected void configure() {
+        installAccountUserApi();
+        installSubscriptionUserApi();
+        installBlockingStateDao();
+        installBlockingApi();
+        installEntitlementApi();
+        installBlockingChecker();
+    }
+
+    @Override
+    public void installBlockingStateDao() {
+        bind(BlockingStateDao.class).to(DefaultBlockingStateDao.class).asEagerSingleton();
+    }
+
+    @Override
+    public void installBlockingApi() {
+        bind(BlockingInternalApi.class).to(DefaultInternalBlockingApi.class).asEagerSingleton();
+    }
+
+    @Override
+    public void installAccountUserApi() {
+        bind(AccountUserApi.class).to(BlockingAccountUserApi.class).asEagerSingleton();
+    }
+
+
+    @Override
+    public void installSubscriptionUserApi() {
+        bind(SubscriptionUserApi.class).to(BlockingSubscriptionUserApi.class).asEagerSingleton();
+    }
+
+    @Override
+    public void installEntitlementApi() {
+        bind(JunctionApi.class).to(DefaultEntitlementApi.class).asEagerSingleton();
+    }
+
+    public void installBlockingChecker() {
+        bind(BlockingChecker.class).to(DefaultBlockingChecker.class).asEagerSingleton();
+    }
+
+
+}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteNoDB.java b/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteNoDB.java
new file mode 100644
index 0000000..33467ec
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteNoDB.java
@@ -0,0 +1,66 @@
+package com.ning.billing.entitlement;
+
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.ning.billing.GuicyKillbillTestSuiteNoDB;
+import com.ning.billing.bus.api.PersistentBus;
+import com.ning.billing.catalog.api.CatalogService;
+import com.ning.billing.entitlement.block.BlockingChecker;
+import com.ning.billing.entitlement.dao.BlockingStateDao;
+import com.ning.billing.entitlement.glue.TestEntitlementModuleNoDB;
+import com.ning.billing.subscription.api.user.SubscriptionUserApi;
+import com.ning.billing.util.glue.RealImplementation;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.junction.BillingInternalApi;
+import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
+import com.ning.billing.util.svcapi.subscription.SubscriptionInternalApi;
+import com.ning.billing.util.svcapi.tag.TagInternalApi;
+import com.ning.billing.util.tag.dao.TagDao;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+public abstract class EntitlementTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
+
+    @Inject
+    protected AccountInternalApi accountInternalApi;
+    @Inject
+    protected BlockingInternalApi blockingInternalApi;
+    @Inject
+    protected BlockingStateDao blockingStateDao;
+    @Inject
+    protected CatalogService catalogService;
+    @Inject
+    @RealImplementation
+    protected SubscriptionUserApi subscriptionUserApi;
+    @Inject
+    protected SubscriptionInternalApi subscriptionInternalApi;
+    @Inject
+    protected PersistentBus bus;
+    @Inject
+    protected TagDao tagDao;
+    @Inject
+    protected TagInternalApi tagInternalApi;
+
+    @Inject
+    protected BlockingChecker blockingChecker;
+
+    @BeforeClass(groups = "fast")
+    protected void beforeClass() throws Exception {
+        final Injector injector = Guice.createInjector(new TestEntitlementModuleNoDB(configSource));
+        injector.injectMembers(this);
+    }
+
+    @BeforeMethod(groups = "fast")
+    public void beforeMethod() throws Exception {
+        bus.start();
+    }
+
+    @AfterMethod(groups = "fast")
+    public void afterMethod() {
+        bus.stop();
+    }
+
+
+}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java b/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java
new file mode 100644
index 0000000..b9999fa
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java
@@ -0,0 +1,62 @@
+package com.ning.billing.entitlement;
+
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.ning.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.bus.api.PersistentBus;
+import com.ning.billing.catalog.api.CatalogService;
+import com.ning.billing.entitlement.dao.BlockingStateDao;
+import com.ning.billing.entitlement.glue.TestEntitlementModuleWithEmbeddedDB;
+import com.ning.billing.subscription.api.user.SubscriptionUserApi;
+import com.ning.billing.util.glue.RealImplementation;
+import com.ning.billing.util.svcapi.account.AccountInternalApi;
+import com.ning.billing.util.svcapi.junction.BillingInternalApi;
+import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
+import com.ning.billing.util.svcapi.subscription.SubscriptionInternalApi;
+import com.ning.billing.util.svcapi.tag.TagInternalApi;
+import com.ning.billing.util.tag.dao.TagDao;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+public class EntitlementTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
+
+
+    @Inject
+    protected AccountInternalApi accountInternalApi;
+    @Inject
+    protected BlockingInternalApi blockingInternalApi;
+    @Inject
+    protected BlockingStateDao blockingStateDao;
+    @Inject
+    protected CatalogService catalogService;
+    @Inject
+    @RealImplementation
+    protected SubscriptionUserApi subscriptionUserApi;
+    @Inject
+    protected SubscriptionInternalApi subscriptionInternalApi;
+    @Inject
+    protected PersistentBus bus;
+    @Inject
+    protected TagDao tagDao;
+    @Inject
+    protected TagInternalApi tagInternalApi;
+
+    @BeforeClass(groups = "slow")
+    protected void beforeClass() throws Exception {
+        final Injector injector = Guice.createInjector(new TestEntitlementModuleWithEmbeddedDB(configSource));
+        injector.injectMembers(this);
+    }
+
+    @BeforeMethod(groups = "slow")
+    public void beforeMethod() throws Exception {
+        super.beforeMethod();
+        bus.start();
+    }
+
+    @AfterMethod(groups = "slow")
+    public void afterMethod() {
+        bus.stop();
+    }
+}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModule.java b/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModule.java
new file mode 100644
index 0000000..425b87b
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModule.java
@@ -0,0 +1,29 @@
+package com.ning.billing.entitlement.glue;
+
+import com.ning.billing.catalog.MockCatalogModule;
+import com.ning.billing.mock.glue.MockAccountModule;
+import com.ning.billing.mock.glue.MockSubscriptionModule;
+import com.ning.billing.util.glue.CacheModule;
+import com.ning.billing.util.glue.CallContextModule;
+import org.skife.config.ConfigSource;
+
+public class TestEntitlementModule extends DefaultEntitlementModule {
+
+    final protected ConfigSource configSource;
+
+    public TestEntitlementModule(final ConfigSource configSource) {
+        super(configSource);
+        this.configSource = configSource;
+    }
+
+    @Override
+    protected void configure() {
+        super.configure();
+        install(new CacheModule(configSource));
+        install(new CallContextModule());
+        install(new MockAccountModule());
+        install(new MockCatalogModule());
+        install(new MockSubscriptionModule());
+
+    }
+}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModuleNoDB.java b/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModuleNoDB.java
new file mode 100644
index 0000000..6d3319d
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModuleNoDB.java
@@ -0,0 +1,31 @@
+package com.ning.billing.entitlement.glue;
+
+import com.ning.billing.GuicyKillbillTestNoDBModule;
+import com.ning.billing.entitlement.dao.BlockingStateDao;
+import com.ning.billing.entitlement.dao.MockBlockingStateDao;
+import com.ning.billing.mock.glue.MockNonEntityDaoModule;
+import com.ning.billing.mock.glue.MockTagModule;
+import com.ning.billing.util.bus.InMemoryBusModule;
+import org.skife.config.ConfigSource;
+
+public class TestEntitlementModuleNoDB extends TestEntitlementModule {
+
+    public TestEntitlementModuleNoDB(final ConfigSource configSource) {
+        super(configSource);
+    }
+
+    @Override
+    protected void configure() {
+        super.configure();
+        install(new GuicyKillbillTestNoDBModule());
+        install(new MockNonEntityDaoModule());
+        install(new InMemoryBusModule(configSource));
+        install(new MockTagModule());
+    }
+
+    @Override
+    public void installBlockingStateDao() {
+        bind(BlockingStateDao.class).to(MockBlockingStateDao.class).asEagerSingleton();
+    }
+
+}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModuleWithEmbeddedDB.java b/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModuleWithEmbeddedDB.java
new file mode 100644
index 0000000..75f2325
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/glue/TestEntitlementModuleWithEmbeddedDB.java
@@ -0,0 +1,23 @@
+package com.ning.billing.entitlement.glue;
+
+import com.ning.billing.GuicyKillbillTestWithEmbeddedDBModule;
+import com.ning.billing.util.glue.BusModule;
+import com.ning.billing.util.glue.NonEntityDaoModule;
+import com.ning.billing.util.glue.TagStoreModule;
+import org.skife.config.ConfigSource;
+
+public class TestEntitlementModuleWithEmbeddedDB extends TestEntitlementModule {
+
+    public TestEntitlementModuleWithEmbeddedDB(final ConfigSource configSource) {
+        super(configSource);
+    }
+
+    @Override
+    protected void configure() {
+        super.configure();
+        install(new GuicyKillbillTestWithEmbeddedDBModule());
+        install(new NonEntityDaoModule());
+        install(new BusModule(configSource));
+        install(new TagStoreModule());
+    }
+}

junction/pom.xml 11(+11 -0)

diff --git a/junction/pom.xml b/junction/pom.xml
index 41e1860..42a7c6d 100644
--- a/junction/pom.xml
+++ b/junction/pom.xml
@@ -66,6 +66,17 @@
         </dependency>
         <dependency>
             <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-entitlement</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-entitlement</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
             <artifactId>killbill-internal-api</artifactId>
         </dependency>
         <dependency>
diff --git a/junction/src/main/java/com/ning/billing/junction/glue/DefaultJunctionModule.java b/junction/src/main/java/com/ning/billing/junction/glue/DefaultJunctionModule.java
index d9e4722..532fb35 100644
--- a/junction/src/main/java/com/ning/billing/junction/glue/DefaultJunctionModule.java
+++ b/junction/src/main/java/com/ning/billing/junction/glue/DefaultJunctionModule.java
@@ -16,26 +16,12 @@
 
 package com.ning.billing.junction.glue;
 
-import org.skife.config.ConfigSource;
-
-import com.ning.billing.account.api.AccountUserApi;
+import com.google.inject.AbstractModule;
 import com.ning.billing.glue.JunctionModule;
-import com.ning.billing.junction.api.DefaultJunctionApi;
-import com.ning.billing.junction.api.JunctionApi;
-import com.ning.billing.junction.api.svcs.DefaultInternalBlockingApi;
-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.junction.dao.DefaultBlockingStateDao;
-import com.ning.billing.junction.plumbing.api.BlockingAccountUserApi;
-import com.ning.billing.junction.plumbing.api.BlockingSubscriptionUserApi;
 import com.ning.billing.junction.plumbing.billing.BlockingCalculator;
 import com.ning.billing.junction.plumbing.billing.DefaultInternalBillingApi;
-import com.ning.billing.subscription.api.user.SubscriptionUserApi;
 import com.ning.billing.util.svcapi.junction.BillingInternalApi;
-import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
-
-import com.google.inject.AbstractModule;
+import org.skife.config.ConfigSource;
 
 public class DefaultJunctionModule extends AbstractModule implements JunctionModule {
 
@@ -47,49 +33,18 @@ public class DefaultJunctionModule extends AbstractModule implements JunctionMod
 
     @Override
     protected void configure() {
-        // External
-        installBlockingApi();
-        installAccountUserApi();
         installBillingApi();
-        installSubscriptionUserApi();
-        installBlockingChecker();
-        installJunctionApi();
-
-        // Internal
         installBlockingCalculator();
-        installBlockingStateDao();
-    }
-
-    public void installBlockingChecker() {
-        bind(BlockingChecker.class).to(DefaultBlockingChecker.class).asEagerSingleton();
     }
 
+    @Override
     public void installBillingApi() {
         bind(BillingInternalApi.class).to(DefaultInternalBillingApi.class).asEagerSingleton();
     }
 
-    public void installBlockingStateDao() {
-        bind(BlockingStateDao.class).to(DefaultBlockingStateDao.class).asEagerSingleton();
-    }
-
-    public void installAccountUserApi() {
-        bind(AccountUserApi.class).to(BlockingAccountUserApi.class).asEagerSingleton();
-    }
-
-    public void installSubscriptionUserApi() {
-        bind(SubscriptionUserApi.class).to(BlockingSubscriptionUserApi.class).asEagerSingleton();
-    }
-
-    public void installBlockingApi() {
-        bind(BlockingInternalApi.class).to(DefaultInternalBlockingApi.class).asEagerSingleton();
-    }
 
     public void installBlockingCalculator() {
         bind(BlockingCalculator.class).asEagerSingleton();
     }
 
-    @Override
-    public void installJunctionApi() {
-        bind(JunctionApi.class).to(DefaultJunctionApi.class).asEagerSingleton();
-    }
 }
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
index 732ff93..1324917 100644
--- a/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModule.java
+++ b/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModule.java
@@ -16,6 +16,11 @@
 
 package com.ning.billing.junction.glue;
 
+import com.ning.billing.entitlement.api.svcs.DefaultInternalBlockingApi;
+import com.ning.billing.entitlement.dao.BlockingStateDao;
+import com.ning.billing.entitlement.dao.MockBlockingStateDao;
+import com.ning.billing.mock.glue.MockEntitlementModule;
+import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
 import org.skife.config.ConfigSource;
 
 import com.ning.billing.catalog.MockCatalogModule;
@@ -39,5 +44,19 @@ public class TestJunctionModule extends DefaultJunctionModule {
         install(new MockAccountModule());
         install(new MockCatalogModule());
         install(new MockSubscriptionModule());
+        install(new MockEntitlementModuleForJunction());
+    }
+
+    public class MockEntitlementModuleForJunction extends MockEntitlementModule {
+
+        @Override
+        public void installBlockingApi() {
+            bind(BlockingInternalApi.class).to(DefaultInternalBlockingApi.class).asEagerSingleton();
+        }
+
+        @Override
+        public void installBlockingStateDao() {
+            bind(BlockingStateDao.class).to(MockBlockingStateDao.class).asEagerSingleton();
+        }
     }
 }
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
index 2139fe6..c7d2be2 100644
--- a/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModuleNoDB.java
+++ b/junction/src/test/java/com/ning/billing/junction/glue/TestJunctionModuleNoDB.java
@@ -19,8 +19,6 @@ package com.ning.billing.junction.glue;
 import org.skife.config.ConfigSource;
 
 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;
@@ -32,11 +30,6 @@ public class TestJunctionModuleNoDB extends TestJunctionModule {
     }
 
     @Override
-    public void installBlockingStateDao() {
-        bind(BlockingStateDao.class).toInstance(new MockBlockingStateDao());
-    }
-
-    @Override
     protected void configure() {
         super.configure();
 
diff --git a/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteNoDB.java b/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteNoDB.java
index 978268f..cc65b12 100644
--- a/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteNoDB.java
+++ b/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteNoDB.java
@@ -16,30 +16,27 @@
 
 package com.ning.billing.junction;
 
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
 import com.ning.billing.GuicyKillbillTestSuiteNoDB;
 import com.ning.billing.bus.api.PersistentBus;
 import com.ning.billing.catalog.api.CatalogService;
-import com.ning.billing.junction.block.BlockingChecker;
-import com.ning.billing.junction.dao.BlockingStateDao;
+import com.ning.billing.entitlement.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.subscription.api.user.SubscriptionUserApi;
 import com.ning.billing.util.glue.RealImplementation;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
-import com.ning.billing.util.svcapi.subscription.SubscriptionInternalApi;
 import com.ning.billing.util.svcapi.junction.BillingInternalApi;
 import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
+import com.ning.billing.util.svcapi.subscription.SubscriptionInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
 import com.ning.billing.util.tag.dao.TagDao;
-
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
 
 public abstract class JunctionTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
 
@@ -52,12 +49,8 @@ public abstract class JunctionTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
     @Inject
     protected BlockingCalculator blockingCalculator;
     @Inject
-    protected BlockingChecker blockingChecker;
-    @Inject
     protected BlockingInternalApi blockingInternalApi;
     @Inject
-    protected BlockingStateDao blockingStateDao;
-    @Inject
     protected CatalogService catalogService;
     @Inject
     @RealImplementation
@@ -70,6 +63,8 @@ public abstract class JunctionTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
     protected TagDao tagDao;
     @Inject
     protected TagInternalApi tagInternalApi;
+    @Inject
+    protected BlockingStateDao blockingStateDao;
 
     @BeforeClass(groups = "fast")
     protected void beforeClass() throws Exception {
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 a4625c9..28e5a88 100644
--- a/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteWithEmbeddedDB.java
+++ b/junction/src/test/java/com/ning/billing/junction/JunctionTestSuiteWithEmbeddedDB.java
@@ -16,29 +16,25 @@
 
 package com.ning.billing.junction;
 
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
 import com.ning.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
 import com.ning.billing.bus.api.PersistentBus;
 import com.ning.billing.catalog.api.CatalogService;
-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.subscription.api.user.SubscriptionUserApi;
 import com.ning.billing.util.glue.RealImplementation;
 import com.ning.billing.util.svcapi.account.AccountInternalApi;
-import com.ning.billing.util.svcapi.subscription.SubscriptionInternalApi;
 import com.ning.billing.util.svcapi.junction.BillingInternalApi;
 import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
+import com.ning.billing.util.svcapi.subscription.SubscriptionInternalApi;
 import com.ning.billing.util.svcapi.tag.TagInternalApi;
 import com.ning.billing.util.tag.dao.TagDao;
-
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
 
 public abstract class JunctionTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
 
@@ -49,12 +45,8 @@ public abstract class JunctionTestSuiteWithEmbeddedDB extends GuicyKillbillTestS
     @Inject
     protected BlockingCalculator blockingCalculator;
     @Inject
-    protected BlockingChecker blockingChecker;
-    @Inject
     protected BlockingInternalApi blockingInternalApi;
     @Inject
-    protected BlockingStateDao blockingStateDao;
-    @Inject
     protected CatalogService catalogService;
     @Inject
     @RealImplementation
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 98f7e6c..932b9e9 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,20 +16,7 @@
 
 package com.ning.billing.junction.plumbing.billing;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.UUID;
-
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.mockito.Mockito;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
+import com.google.common.collect.ImmutableList;
 import com.ning.billing.ObjectType;
 import com.ning.billing.account.api.Account;
 import com.ning.billing.account.api.AccountApiException;
@@ -42,16 +29,16 @@ import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.PlanPhase;
 import com.ning.billing.catalog.api.PriceList;
 import com.ning.billing.catalog.api.PriceListSet;
-import com.ning.billing.subscription.api.SubscriptionTransitionType;
-import com.ning.billing.subscription.api.user.Subscription;
-import com.ning.billing.subscription.api.user.SubscriptionState;
-import com.ning.billing.subscription.api.user.SubscriptionBundle;
+import com.ning.billing.entitlement.dao.MockBlockingStateDao;
 import com.ning.billing.junction.JunctionTestSuiteNoDB;
 import com.ning.billing.junction.api.BlockingState;
 import com.ning.billing.junction.api.Type;
-import com.ning.billing.junction.dao.MockBlockingStateDao;
 import com.ning.billing.mock.MockEffectiveSubscriptionEvent;
 import com.ning.billing.mock.MockSubscription;
+import com.ning.billing.subscription.api.SubscriptionTransitionType;
+import com.ning.billing.subscription.api.user.Subscription;
+import com.ning.billing.subscription.api.user.SubscriptionBundle;
+import com.ning.billing.subscription.api.user.SubscriptionState;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.events.EffectiveSubscriptionInternalEvent;
@@ -61,8 +48,19 @@ import com.ning.billing.util.svcapi.junction.BillingModeType;
 import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
 import com.ning.billing.util.tag.ControlTagType;
 import com.ning.billing.util.tag.dao.MockTagDao;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
 
-import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.UUID;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
@@ -81,7 +79,7 @@ public class TestBillingApi extends JunctionTestSuiteNoDB {
     private MockCatalog catalog;
 
     @BeforeMethod(groups = "fast")
-    public void beforeMethod() throws Exception  {
+    public void beforeMethod() throws Exception {
         super.beforeMethod();
         final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
         Mockito.when(bundle.getId()).thenReturn(bunId);
@@ -282,7 +280,7 @@ public class TestBillingApi extends JunctionTestSuiteNoDB {
                 eventId, subId, bunId, then, now, null, null, null, null, SubscriptionState.ACTIVE,
                 nextPlan.getName(), nextPhase.getName(),
                 nextPriceList.getName(), 1L,
-                SubscriptionTransitionType.CREATE,  1, null, 1L, 2L, null);
+                SubscriptionTransitionType.CREATE, 1, null, 1L, 2L, null);
 
         effectiveSubscriptionTransitions.add(t);
         return now;
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 172ffd3..46eef52 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,22 +16,6 @@
 
 package com.ning.billing.junction.plumbing.billing;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.UUID;
-
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.joda.time.LocalDate;
-import org.mockito.Mockito;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
 import com.ning.billing.account.api.Account;
 import com.ning.billing.catalog.MockPlan;
 import com.ning.billing.catalog.MockPlanPhase;
@@ -39,16 +23,31 @@ import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.catalog.api.Plan;
 import com.ning.billing.catalog.api.PlanPhase;
-import com.ning.billing.subscription.api.SubscriptionTransitionType;
-import com.ning.billing.subscription.api.user.Subscription;
+import com.ning.billing.entitlement.dao.MockBlockingStateDao;
 import com.ning.billing.junction.JunctionTestSuiteNoDB;
-import com.ning.billing.junction.api.Type;
 import com.ning.billing.junction.api.BlockingState;
-import com.ning.billing.junction.dao.MockBlockingStateDao;
+import com.ning.billing.junction.api.Type;
 import com.ning.billing.junction.plumbing.billing.BlockingCalculator.DisabledDuration;
+import com.ning.billing.subscription.api.SubscriptionTransitionType;
+import com.ning.billing.subscription.api.user.Subscription;
 import com.ning.billing.util.svcapi.junction.BillingEvent;
 import com.ning.billing.util.svcapi.junction.BillingModeType;
 import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.joda.time.LocalDate;
+import org.mockito.Mockito;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.UUID;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
@@ -539,9 +538,9 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
         final DateTimeZone tz = DateTimeZone.UTC;
 
         return new DefaultBillingEvent(account, subscription, effectiveDate, plan, planPhase,
-                                       fixedPrice, recurringPrice, currency,
-                                       billingPeriod, billCycleDay, billingModeType,
-                                       description, totalOrdering, type, tz);
+                fixedPrice, recurringPrice, currency,
+                billingPeriod, billCycleDay, billingModeType,
+                description, totalOrdering, type, tz);
     }
 
     @Test(groups = "fast")
@@ -611,7 +610,7 @@ public class TestBlockingCalculator extends JunctionTestSuiteNoDB {
 
         public MockBillingEvent() {
             super(account, subscription1, clock.getUTCNow(), null, null, BigDecimal.ZERO, BigDecimal.TEN, Currency.USD, BillingPeriod.ANNUAL,
-                  4, BillingModeType.IN_ADVANCE, "", 3L, SubscriptionTransitionType.CREATE, DateTimeZone.UTC);
+                    4, BillingModeType.IN_ADVANCE, "", 3L, SubscriptionTransitionType.CREATE, DateTimeZone.UTC);
         }
     }
 
diff --git a/overdue/src/test/java/com/ning/billing/overdue/glue/ApplicatorMockJunctionModule.java b/overdue/src/test/java/com/ning/billing/overdue/glue/ApplicatorMockJunctionModule.java
index 7d010dc..33422cc 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/glue/ApplicatorMockJunctionModule.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/glue/ApplicatorMockJunctionModule.java
@@ -16,21 +16,26 @@
 
 package com.ning.billing.overdue.glue;
 
-import java.util.List;
-import java.util.UUID;
-
-import org.joda.time.DateTime;
-
+import com.google.inject.AbstractModule;
 import com.ning.billing.junction.api.Blockable;
-import com.ning.billing.junction.api.Type;
 import com.ning.billing.junction.api.BlockingState;
+import com.ning.billing.junction.api.Type;
 import com.ning.billing.mock.glue.MockJunctionModule;
 import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.callcontext.InternalTenantContext;
 import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
 import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
+import org.joda.time.DateTime;
 
-public class ApplicatorMockJunctionModule extends MockJunctionModule {
+import java.util.List;
+import java.util.UUID;
+
+public class ApplicatorMockJunctionModule extends AbstractModule {
+
+    @Override
+    protected void configure() {
+        installBlockingApi();
+    }
 
     public static class ApplicatorBlockingApi implements BlockingInternalApi {
 
@@ -134,7 +139,6 @@ public class ApplicatorMockJunctionModule extends MockJunctionModule {
 
     }
 
-    @Override
     public void installBlockingApi() {
         bind(BlockingInternalApi.class).toInstance(new ApplicatorBlockingApi());
     }

pom.xml 1(+1 -0)

diff --git a/pom.xml b/pom.xml
index fcdb4f2..6fe176c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,7 @@
         <module>beatrix</module>
         <module>catalog</module>
         <module>subscription</module>
+        <module>entitlement</module>
         <module>invoice</module>
         <module>junction</module>
         <module>overdue</module>
diff --git a/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java b/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
index 8fd4034..bde80c8 100644
--- a/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
+++ b/server/src/main/java/com/ning/billing/server/modules/KillbillServerModule.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.server.modules;
 
+import com.ning.billing.entitlement.glue.DefaultEntitlementModule;
 import org.skife.config.ConfigSource;
 import org.skife.config.SimplePropertyConfigSource;
 import org.skife.jdbi.v2.DBI;
@@ -130,6 +131,7 @@ public class KillbillServerModule extends AbstractModule {
         install(new DefaultInvoiceModule(configSource));
         install(new TemplateModule());
         install(new DefaultSubscriptionModule(configSource));
+        install(new DefaultEntitlementModule(configSource));
         install(new PaymentModule(configSource));
         install(new BeatrixModule());
         install(new DefaultJunctionModule(configSource));
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
index 3233ebb..855471a 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import javax.inject.Inject;
 import javax.servlet.Servlet;
 
+import com.ning.billing.entitlement.glue.DefaultEntitlementModule;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.joda.time.LocalDate;
 import org.skife.config.ConfigSource;
@@ -209,6 +210,7 @@ public class TestJaxrsBase extends KillbillClient {
             install(new InvoiceModuleWithMockSender(configSource));
             install(new TemplateModule());
             install(new DefaultSubscriptionModule(configSource));
+            install(new DefaultEntitlementModule(configSource));
             install(new PaymentMockModule(configSource));
             install(new BeatrixModule());
             install(new DefaultJunctionModule(configSource));
diff --git a/util/src/test/java/com/ning/billing/dbi/DBTestingHelper.java b/util/src/test/java/com/ning/billing/dbi/DBTestingHelper.java
index 9c106af..a887961 100644
--- a/util/src/test/java/com/ning/billing/dbi/DBTestingHelper.java
+++ b/util/src/test/java/com/ning/billing/dbi/DBTestingHelper.java
@@ -96,7 +96,7 @@ public abstract class DBTestingHelper {
         initDb("drop table if exists subscriptions; create table subscriptions(record_id int(11) unsigned not null auto_increment, id char(36) not null, " +
                "account_record_id int(11) unsigned not null, tenant_record_id int(11) unsigned default 0, primary key(record_id));");
 
-        for (final String pack : new String[]{"account", "analytics", "beatrix", "subscription", "util", "payment", "invoice", "junction", "usage", "meter", "tenant"}) {
+        for (final String pack : new String[]{"account", "analytics", "beatrix", "subscription", "util", "payment", "invoice", "entitlement", "usage", "meter", "tenant"}) {
             for (final String ddlFile : new String[]{"ddl.sql", "ddl_test.sql"}) {
                 final String ddl;
                 try {
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockEntitlementModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockEntitlementModule.java
new file mode 100644
index 0000000..944ae7d
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockEntitlementModule.java
@@ -0,0 +1,71 @@
+/*
+ * 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.mock.glue;
+
+import com.google.inject.AbstractModule;
+import com.ning.billing.account.api.AccountUserApi;
+import com.ning.billing.glue.EntitlementModule;
+import com.ning.billing.junction.api.JunctionApi;
+import com.ning.billing.subscription.api.user.SubscriptionUserApi;
+import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
+import org.mockito.Mockito;
+
+public class MockEntitlementModule extends AbstractModule implements EntitlementModule {
+
+    private final AccountUserApi userApi = Mockito.mock(AccountUserApi.class);
+    private final SubscriptionUserApi entUserApi = Mockito.mock(SubscriptionUserApi.class);
+    private final BlockingInternalApi blockingApi = Mockito.mock(BlockingInternalApi.class);
+    private final JunctionApi junctionApi = Mockito.mock(JunctionApi.class);
+
+    @Override
+    protected void configure() {
+        installAccountUserApi();
+        installSubscriptionUserApi();
+        installBlockingStateDao();
+        installBlockingApi();
+        installEntitlementApi();
+    }
+
+    @Override
+    public void installAccountUserApi() {
+        bind(AccountUserApi.class).toInstance(userApi);
+    }
+
+    @Override
+    public void installSubscriptionUserApi() {
+        bind(SubscriptionUserApi.class).toInstance(entUserApi);
+    }
+
+    @Override
+    public void installBlockingStateDao() {
+    }
+
+    @Override
+    public void installBlockingApi() {
+        bind(BlockingInternalApi.class).toInstance(blockingApi);
+    }
+
+    @Override
+    public void installEntitlementApi() {
+        bind(JunctionApi.class).toInstance(junctionApi);
+    }
+
+    @Override
+    public void installBlockingChecker() {
+    }
+
+}
diff --git a/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java b/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
index 710026d..91ebb72 100644
--- a/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
+++ b/util/src/test/java/com/ning/billing/mock/glue/MockJunctionModule.java
@@ -16,56 +16,21 @@
 
 package com.ning.billing.mock.glue;
 
-import org.mockito.Mockito;
-
-import com.ning.billing.account.api.AccountUserApi;
-import com.ning.billing.subscription.api.user.SubscriptionUserApi;
+import com.google.inject.AbstractModule;
 import com.ning.billing.glue.JunctionModule;
-import com.ning.billing.junction.api.JunctionApi;
 import com.ning.billing.util.svcapi.junction.BillingInternalApi;
-import com.ning.billing.util.svcapi.junction.BlockingInternalApi;
-
-import com.google.inject.AbstractModule;
+import org.mockito.Mockito;
 
 public class MockJunctionModule extends AbstractModule implements JunctionModule {
     private final BillingInternalApi billingApi = Mockito.mock(BillingInternalApi.class);
-    private final BlockingInternalApi blockingApi = Mockito.mock(BlockingInternalApi.class);
-    private final AccountUserApi userApi = Mockito.mock(AccountUserApi.class);
-    private final SubscriptionUserApi entUserApi = Mockito.mock(SubscriptionUserApi.class);
-    private final JunctionApi junctionApi = Mockito.mock(JunctionApi.class);
 
     @Override
     protected void configure() {
-        installBlockingApi();
-        installAccountUserApi();
         installBillingApi();
-        installSubscriptionUserApi();
-        installJunctionApi();
     }
 
     @Override
     public void installBillingApi() {
         bind(BillingInternalApi.class).toInstance(billingApi);
     }
-
-    @Override
-    public void installAccountUserApi() {
-        bind(AccountUserApi.class).toInstance(userApi);
-    }
-
-    @Override
-    public void installBlockingApi() {
-        bind(BlockingInternalApi.class).toInstance(blockingApi);
-    }
-
-    @Override
-    public void installSubscriptionUserApi() {
-        bind(SubscriptionUserApi.class).toInstance(entUserApi);
-    }
-
-    @Override
-    public void installJunctionApi() {
-         bind(JunctionApi.class).toInstance(junctionApi);
-    }
-
 }