killbill-memoizeit
Changes
entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java 17(+10 -7)
entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java 12(+7 -5)
entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java 41(+23 -18)
entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java 10(+5 -5)
entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java 8(+4 -4)
entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java 14(+8 -6)
entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java 10(+5 -5)
entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java 42(+26 -16)
entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java 4(+2 -2)
invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java 11(+6 -5)
invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java 11(+7 -4)
pom.xml 5(+5 -0)
Details
diff --git a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
index 2a6f448..495e985 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/api/TestAnalyticsService.java
@@ -139,16 +139,15 @@ public class TestAnalyticsService {
private InvoiceCreationNotification invoiceCreationNotification;
private PaymentInfo paymentInfoNotification;
- @BeforeMethod
+ @BeforeMethod(groups = "slow")
public void cleanup() throws Exception
{
helper.cleanupTable("bst");
helper.cleanupTable("bac");
-
}
- @BeforeClass(alwaysRun = true)
+ @BeforeClass(groups = "slow")
public void startMysql() throws IOException, ClassNotFoundException, SQLException, EntitlementUserApiException {
// Killbill generic setup
setupBusAndMySQL();
@@ -269,7 +268,7 @@ public class TestAnalyticsService {
Assert.assertEquals(paymentDao.getPaymentInfo(Arrays.asList(invoice.getId().toString())).size(), 1);
}
- @AfterClass(alwaysRun = true)
+ @AfterClass(groups = "slow")
public void stopMysql() {
helper.stopMysql();
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
index b7613cc..1504b15 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/TestAnalyticsDao.java
@@ -53,7 +53,7 @@ import java.util.UUID;
public class TestAnalyticsDao
{
private static final UUID EVENT_ID = UUID.randomUUID();
- private static final String EVENT_KEY = "12345";
+ private static final String EVENT_KEY = "23456";
private static final String ACCOUNT_KEY = "pierre-143343-vcc";
private final MysqlTestingHelper helper = new MysqlTestingHelper();
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
index 5d2d871..f6feeac 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/billing/DefaultEntitlementBillingApi.java
@@ -53,6 +53,7 @@ import com.ning.billing.catalog.api.Product;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.api.user.SubscriptionFactory;
import com.ning.billing.entitlement.api.user.SubscriptionFactory.SubscriptionBuilder;
import com.ning.billing.entitlement.api.user.SubscriptionTransition;
import com.ning.billing.entitlement.api.user.SubscriptionTransition.SubscriptionTransitionType;
@@ -67,12 +68,14 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
private final EntitlementDao entitlementDao;
private final AccountUserApi accountApi;
private final CatalogService catalogService;
+ private final SubscriptionFactory subscriptionFactory;
private static final String SUBSCRIPTION_TABLE_NAME = "subscriptions";
@Inject
- public DefaultEntitlementBillingApi(final CallContextFactory factory, final EntitlementDao dao, final AccountUserApi accountApi, final CatalogService catalogService) {
+ public DefaultEntitlementBillingApi(final CallContextFactory factory, final SubscriptionFactory subscriptionFactory, final EntitlementDao dao, final AccountUserApi accountApi, final CatalogService catalogService) {
super();
this.factory = factory;
+ this.subscriptionFactory = subscriptionFactory;
this.entitlementDao = dao;
this.accountApi = accountApi;
this.catalogService = catalogService;
@@ -86,7 +89,7 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
List<SubscriptionBundle> bundles = entitlementDao.getSubscriptionBundleForAccount(accountId);
SortedSet<BillingEvent> result = new TreeSet<BillingEvent>();
for (final SubscriptionBundle bundle: bundles) {
- List<Subscription> subscriptions = entitlementDao.getSubscriptions(bundle.getId());
+ List<Subscription> subscriptions = entitlementDao.getSubscriptions(subscriptionFactory, bundle.getId());
for (final Subscription subscription: subscriptions) {
for (final SubscriptionTransition transition : ((SubscriptionData) subscription).getBillingTransitions()) {
@@ -152,7 +155,7 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
return result;
}
-
+
private int calculateBcdFromSubscription(Subscription subscription, Plan plan, Account account,
final CallContext context) throws AccountApiException {
int result = account.getBillCycleDay();
@@ -166,7 +169,7 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
} catch (CatalogApiException e) {
log.error("Unexpected catalog error encountered when updating BCD",e);
}
-
+
MutableAccountData modifiedData = account.toMutableAccountData();
modifiedData.setBillCycleDay(result);
@@ -185,7 +188,7 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
@Override
public void setChargedThroughDate(final UUID subscriptionId, final DateTime ctd, CallContext context) {
- SubscriptionData subscription = (SubscriptionData) entitlementDao.getSubscriptionFromId(subscriptionId);
+ SubscriptionData subscription = (SubscriptionData) entitlementDao.getSubscriptionFromId(subscriptionFactory, subscriptionId);
SubscriptionBuilder builder = new SubscriptionBuilder(subscription)
.setChargedThroughDate(ctd)
@@ -214,6 +217,6 @@ public class DefaultEntitlementBillingApi implements EntitlementBillingApi {
}
}
}
-
-
+
+
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
index 2c6d302..5554c9c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
@@ -45,16 +45,18 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
private final CatalogService catalogService;
private final SubscriptionApiService apiService;
private final AddonUtils addonUtils;
+ private final SubscriptionFactory subscriptionFactory;
@Inject
public DefaultEntitlementUserApi(Clock clock, EntitlementDao dao, CatalogService catalogService,
- SubscriptionApiService apiService, AddonUtils addonUtils) {
+ SubscriptionApiService apiService, final SubscriptionFactory subscriptionFactory, AddonUtils addonUtils) {
super();
this.clock = clock;
this.apiService = apiService;
this.dao = dao;
this.catalogService = catalogService;
this.addonUtils = addonUtils;
+ this.subscriptionFactory = subscriptionFactory;
}
@Override
@@ -64,7 +66,7 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
@Override
public Subscription getSubscriptionFromId(UUID id) {
- return dao.getSubscriptionFromId(id);
+ return dao.getSubscriptionFromId(subscriptionFactory, id);
}
@Override
@@ -79,12 +81,12 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
@Override
public List<Subscription> getSubscriptionsForKey(String bundleKey) {
- return dao.getSubscriptionsForKey(bundleKey);
+ return dao.getSubscriptionsForKey(subscriptionFactory, bundleKey);
}
@Override
public List<Subscription> getSubscriptionsForBundle(UUID bundleId) {
- return dao.getSubscriptions(bundleId);
+ return dao.getSubscriptions(subscriptionFactory, bundleId);
}
@Override
@@ -121,7 +123,7 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
}
DateTime bundleStartDate = null;
- SubscriptionData baseSubscription = (SubscriptionData) dao.getBaseSubscription(bundleId);
+ SubscriptionData baseSubscription = (SubscriptionData) dao.getBaseSubscription(subscriptionFactory, bundleId);
switch(plan.getProduct().getCategory()) {
case BASE:
if (baseSubscription != null) {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
index 2547a29..32ffb90 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
@@ -47,6 +47,7 @@ import com.ning.billing.entitlement.api.migration.EntitlementMigrationApi;
import com.ning.billing.entitlement.api.user.DefaultEntitlementUserApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.api.user.SubscriptionFactory;
import com.ning.billing.entitlement.api.user.Subscription.SubscriptionState;
import com.ning.billing.entitlement.api.user.SubscriptionData;
import com.ning.billing.entitlement.engine.addon.AddonUtils;
@@ -89,6 +90,7 @@ public class Engine implements EventListener, EntitlementService {
private final EntitlementConfig config;
private final NotificationQueueService notificationQueueService;
private final CallContextFactory factory;
+ private final SubscriptionFactory subscriptionFactory;
private NotificationQueue subscriptionEventQueue;
@Inject
@@ -97,6 +99,7 @@ public class Engine implements EventListener, EntitlementService {
DefaultEntitlementBillingApi billingApi,
DefaultEntitlementMigrationApi migrationApi, AddonUtils addonUtils, Bus eventBus,
NotificationQueueService notificationQueueService,
+ SubscriptionFactory subscriptionFactory,
CallContextFactory factory) {
super();
this.clock = clock;
@@ -109,6 +112,7 @@ public class Engine implements EventListener, EntitlementService {
this.config = config;
this.eventBus = eventBus;
this.notificationQueueService = notificationQueueService;
+ this.subscriptionFactory = subscriptionFactory;
this.factory = factory;
}
@@ -192,7 +196,7 @@ public class Engine implements EventListener, EntitlementService {
if (!event.isActive()) {
return;
}
- SubscriptionData subscription = (SubscriptionData) dao.getSubscriptionFromId(event.getSubscriptionId());
+ SubscriptionData subscription = (SubscriptionData) dao.getSubscriptionFromId(subscriptionFactory, event.getSubscriptionId());
if (subscription == null) {
log.warn("Failed to retrieve subscription for id %s", event.getSubscriptionId());
return;
@@ -236,7 +240,7 @@ public class Engine implements EventListener, EntitlementService {
Product baseProduct = (baseSubscription.getState() == SubscriptionState.CANCELLED ) ?
null : baseSubscription.getCurrentPlan().getProduct();
- List<Subscription> subscriptions = dao.getSubscriptions(baseSubscription.getBundleId());
+ List<Subscription> subscriptions = dao.getSubscriptions(subscriptionFactory, baseSubscription.getBundleId());
Iterator<Subscription> it = subscriptions.iterator();
while (it.hasNext()) {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
index a69024c..d79444a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementDao.java
@@ -26,56 +26,57 @@ import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.api.user.SubscriptionBundle;
import com.ning.billing.entitlement.api.user.SubscriptionBundleData;
import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.entitlement.api.user.SubscriptionFactory;
import com.ning.billing.entitlement.events.EntitlementEvent;
public interface EntitlementDao {
// Bundle apis
- public List<SubscriptionBundle> getSubscriptionBundleForAccount(UUID accountId);
+ public List<SubscriptionBundle> getSubscriptionBundleForAccount(final UUID accountId);
- public SubscriptionBundle getSubscriptionBundleFromKey(String bundleKey);
+ public SubscriptionBundle getSubscriptionBundleFromKey(final String bundleKey);
- public SubscriptionBundle getSubscriptionBundleFromId(UUID bundleId);
+ public SubscriptionBundle getSubscriptionBundleFromId(final UUID bundleId);
- public SubscriptionBundle createSubscriptionBundle(SubscriptionBundleData bundle, CallContext context);
+ public SubscriptionBundle createSubscriptionBundle(final SubscriptionBundleData bundle, CallContext context);
- public Subscription getSubscriptionFromId(UUID subscriptionId);
+ public Subscription getSubscriptionFromId(final SubscriptionFactory factory, final UUID subscriptionId);
// Account retrieval
- public UUID getAccountIdFromSubscriptionId(UUID subscriptionId);
+ public UUID getAccountIdFromSubscriptionId(final UUID subscriptionId);
// Subscription retrieval
- public Subscription getBaseSubscription(UUID bundleId);
+ public Subscription getBaseSubscription(final SubscriptionFactory factory, final UUID bundleId);
- public List<Subscription> getSubscriptions(UUID bundleId);
+ public List<Subscription> getSubscriptions(final SubscriptionFactory factory, final UUID bundleId);
- public List<Subscription> getSubscriptionsForKey(String bundleKey);
+ public List<Subscription> getSubscriptionsForKey(final SubscriptionFactory factory, final String bundleKey);
// Update
- public void updateSubscription(SubscriptionData subscription, CallContext context);
+ public void updateSubscription(final SubscriptionData subscription, final CallContext context);
// Event apis
- public void createNextPhaseEvent(UUID subscriptionId, EntitlementEvent nextPhase, CallContext context);
+ public void createNextPhaseEvent(final UUID subscriptionId, final EntitlementEvent nextPhase, final CallContext context);
- public EntitlementEvent getEventById(UUID eventId);
+ public EntitlementEvent getEventById(final UUID eventId);
- public List<EntitlementEvent> getEventsForSubscription(UUID subscriptionId);
+ public List<EntitlementEvent> getEventsForSubscription(final UUID subscriptionId);
- public List<EntitlementEvent> getPendingEventsForSubscription(UUID subscriptionId);
+ public List<EntitlementEvent> getPendingEventsForSubscription(final UUID subscriptionId);
// Subscription creation, cancellation, changePlan apis
- public void createSubscription(SubscriptionData subscription, List<EntitlementEvent> initialEvents, CallContext context);
+ public void createSubscription(final SubscriptionData subscription, final List<EntitlementEvent> initialEvents, final CallContext context);
- public void recreateSubscription(UUID subscriptionId, List<EntitlementEvent> recreateEvents , CallContext context);
+ public void recreateSubscription(final UUID subscriptionId, final List<EntitlementEvent> recreateEvents, final CallContext context);
- public void cancelSubscription(UUID subscriptionId, EntitlementEvent cancelEvent, CallContext context);
+ public void cancelSubscription(final UUID subscriptionId, final EntitlementEvent cancelEvent, final CallContext context);
- public void uncancelSubscription(UUID subscriptionId, List<EntitlementEvent> uncancelEvents, CallContext context);
+ public void uncancelSubscription(final UUID subscriptionId, final List<EntitlementEvent> uncancelEvents, final CallContext context);
- public void changePlan(UUID subscriptionId, List<EntitlementEvent> changeEvents, CallContext context);
+ public void changePlan(final UUID subscriptionId, final List<EntitlementEvent> changeEvents, final CallContext context);
- public void migrate(UUID accountId, AccountMigrationData data, CallContext context);
+ public void migrate(final UUID accountId, final AccountMigrationData data, final CallContext context);
// Custom Fields
- public void saveCustomFields(SubscriptionData subscription, CallContext context);
+ public void saveCustomFields(final SubscriptionData subscription, final CallContext context);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
index f52bd97..b0f1147 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
@@ -81,17 +81,21 @@ public class EntitlementSqlDao implements EntitlementDao {
private final SubscriptionSqlDao subscriptionsDao;
private final BundleSqlDao bundlesDao;
private final EventSqlDao eventsDao;
- private final SubscriptionFactory factory;
private final NotificationQueueService notificationQueueService;
private final AddonUtils addonUtils;
private final CustomFieldDao customFieldDao;
-
+
+ //
+ // We are not injecting SubscriptionFactory since that creates circular dependencies--
+ // Guice would still work, but this is playing with fire.
+ //
+ // Instead that factory passed through API top to bottom for the call where is it needed-- where we returned fully rehydrated Subscriptions
+ //
@Inject
- public EntitlementSqlDao(final IDBI dbi, final Clock clock, final SubscriptionFactory factory,
+ public EntitlementSqlDao(final IDBI dbi, final Clock clock,
final AddonUtils addonUtils, final NotificationQueueService notificationQueueService,
final CustomFieldDao customFieldDao) {
this.clock = clock;
- this.factory = factory;
this.subscriptionsDao = dbi.onDemand(SubscriptionSqlDao.class);
this.eventsDao = dbi.onDemand(EventSqlDao.class);
this.bundlesDao = dbi.onDemand(BundleSqlDao.class);
@@ -156,27 +160,27 @@ public class EntitlementSqlDao implements EntitlementDao {
}
@Override
- public Subscription getBaseSubscription(final UUID bundleId) {
- return getBaseSubscription(bundleId, true);
+ public Subscription getBaseSubscription(final SubscriptionFactory factory, final UUID bundleId) {
+ return getBaseSubscription(factory, bundleId, true);
}
@Override
- public Subscription getSubscriptionFromId(final UUID subscriptionId) {
- return buildSubscription(subscriptionsDao.getSubscriptionFromId(subscriptionId.toString()));
+ public Subscription getSubscriptionFromId(final SubscriptionFactory factory, final UUID subscriptionId) {
+ return buildSubscription(factory, subscriptionsDao.getSubscriptionFromId(subscriptionId.toString()));
}
@Override
- public List<Subscription> getSubscriptions(UUID bundleId) {
- return buildBundleSubscriptions(subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString()));
+ public List<Subscription> getSubscriptions(final SubscriptionFactory factory, final UUID bundleId) {
+ return buildBundleSubscriptions(factory, subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString()));
}
@Override
- public List<Subscription> getSubscriptionsForKey(String bundleKey) {
+ public List<Subscription> getSubscriptionsForKey(final SubscriptionFactory factory, final String bundleKey) {
SubscriptionBundle bundle = bundlesDao.getBundleFromKey(bundleKey);
if (bundle == null) {
return Collections.emptyList();
}
- return getSubscriptions(bundle.getId());
+ return getSubscriptions(factory, bundle.getId());
}
@Override
@@ -456,19 +460,19 @@ public class EntitlementSqlDao implements EntitlementDao {
customFieldDao.saveFields(transactionalDao, subscription.getId(), subscription.getObjectName(), subscription.getFieldList(), context);
}
- private Subscription buildSubscription(Subscription input) {
+ private Subscription buildSubscription(final SubscriptionFactory factory, final Subscription input) {
if (input == null) {
return null;
}
List<Subscription> bundleInput = new ArrayList<Subscription>();
if (input.getCategory() == ProductCategory.ADD_ON) {
- Subscription baseSubscription = getBaseSubscription(input.getBundleId(), false);
+ Subscription baseSubscription = getBaseSubscription(factory, input.getBundleId(), false);
bundleInput.add(baseSubscription);
bundleInput.add(input);
} else {
bundleInput.add(input);
}
- List<Subscription> reloadedSubscriptions = buildBundleSubscriptions(bundleInput);
+ List<Subscription> reloadedSubscriptions = buildBundleSubscriptions(factory, bundleInput);
for (Subscription cur : reloadedSubscriptions) {
if (cur.getId().equals(input.getId())) {
return cur;
@@ -477,7 +481,7 @@ public class EntitlementSqlDao implements EntitlementDao {
throw new EntitlementError(String.format("Unexpected code path in buildSubscription"));
}
- private List<Subscription> buildBundleSubscriptions(List<Subscription> input) {
+ private List<Subscription> buildBundleSubscriptions(final SubscriptionFactory factory, final List<Subscription> input) {
// Make sure BasePlan -- if exists-- is first
Collections.sort(input, new Comparator<Subscription>() {
@Override
@@ -600,11 +604,12 @@ public class EntitlementSqlDao implements EntitlementDao {
});
}
- public Subscription getBaseSubscription(final UUID bundleId, boolean rebuildSubscription) {
+
+ private Subscription getBaseSubscription(final SubscriptionFactory factory, final UUID bundleId, boolean rebuildSubscription) {
List<Subscription> subscriptions = subscriptionsDao.getSubscriptionsFromBundleId(bundleId.toString());
for (Subscription cur : subscriptions) {
if (cur.getCategory() == ProductCategory.BASE) {
- return rebuildSubscription ? buildSubscription(cur) : cur;
+ return rebuildSubscription ? buildSubscription(factory, cur) : cur;
}
}
return null;
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
index 6217d83..e167807 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
@@ -30,6 +30,7 @@ import com.ning.billing.entitlement.api.migration.EntitlementMigrationApi;
import com.ning.billing.entitlement.api.user.DefaultEntitlementUserApi;
import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.SubscriptionApiService;
+import com.ning.billing.entitlement.api.user.SubscriptionFactory;
import com.ning.billing.entitlement.engine.addon.AddonUtils;
import com.ning.billing.entitlement.engine.core.Engine;
import com.ning.billing.entitlement.engine.dao.EntitlementDao;
@@ -46,6 +47,7 @@ public class EntitlementModule extends AbstractModule {
}
protected void installEntitlementCore() {
+ bind(SubscriptionFactory.class).asEagerSingleton();
bind(SubscriptionApiService.class).asEagerSingleton();
bind(EntitlementService.class).to(Engine.class).asEagerSingleton();
bind(Engine.class).asEagerSingleton();
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
index 6e583ed..e940cd8 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/billing/TestDefaultEntitlementBillingApi.java
@@ -139,7 +139,7 @@ public class TestDefaultEntitlementBillingApi {
((ZombieControl) accountApi).addResult("getAccountById", account);
CallContextFactory factory = new DefaultCallContextFactory(clock);
- DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, dao, accountApi, catalogService);
+ DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, null, dao, accountApi, catalogService);
SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
Assert.assertEquals(events.size(), 0);
}
@@ -161,7 +161,7 @@ public class TestDefaultEntitlementBillingApi {
((ZombieControl)account).addResult("getCurrency", Currency.USD);
((ZombieControl)accountApi).addResult("getAccountById", account);
- DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, dao, accountApi, catalogService);
+ DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, null, dao, accountApi, catalogService);
SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
checkFirstEvent(events, nextPlan, 32, oneId, now, nextPhase, ApiEventType.CREATE.toString());
}
@@ -186,7 +186,7 @@ public class TestDefaultEntitlementBillingApi {
((ZombieControl)accountApi).addResult("getAccountById", account);
CallContextFactory factory = new DefaultCallContextFactory(clock);
- DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, dao, accountApi, catalogService);
+ DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, null, dao, accountApi, catalogService);
SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
checkFirstEvent(events, nextPlan, subscription.getStartDate().getDayOfMonth(), oneId, now, nextPhase, ApiEventType.CREATE.toString());
}
@@ -208,7 +208,7 @@ public class TestDefaultEntitlementBillingApi {
((ZombieControl)account).addResult("getCurrency", Currency.USD);
((ZombieControl)accountApi).addResult("getAccountById", account);
- DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, dao,accountApi,catalogService);
+ DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, null, dao,accountApi,catalogService);
SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
checkFirstEvent(events, nextPlan, 32, oneId, now, nextPhase, ApiEventType.CREATE.toString());
}
@@ -232,7 +232,7 @@ public class TestDefaultEntitlementBillingApi {
((ZombieControl)accountApi).addResult("getAccountById", account);
CallContextFactory factory = new DefaultCallContextFactory(clock);
- DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, dao, accountApi, catalogService);
+ DefaultEntitlementBillingApi api = new DefaultEntitlementBillingApi(factory, null, dao, accountApi, catalogService);
SortedSet<BillingEvent> events = api.getBillingEventsForAccount(new UUID(0L,0L));
checkFirstEvent(events, nextPlan, bundles.get(0).getStartDate().getDayOfMonth(), oneId, now, nextPhase, ApiEventType.CREATE.toString());
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
index fec3550..57e34e9 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCancelMemory.java
@@ -32,25 +32,25 @@ public class TestUserApiCancelMemory extends TestUserApiCancel {
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testCancelSubscriptionIMM() {
super.testCancelSubscriptionIMM();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testCancelSubscriptionEOTWithChargeThroughDate() throws EntitlementBillingApiException {
super.testCancelSubscriptionEOTWithChargeThroughDate();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testCancelSubscriptionEOTWithNoChargeThroughDate() {
super.testCancelSubscriptionEOTWithNoChargeThroughDate();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testUncancel() throws EntitlementBillingApiException {
super.testUncancel();
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
index ab76734..0351ea1 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlanMemory.java
@@ -32,44 +32,46 @@ public class TestUserApiChangePlanMemory extends TestUserApiChangePlan {
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testChangePlanBundleAlignEOTWithNoChargeThroughDate() {
super.testChangePlanBundleAlignEOTWithNoChargeThroughDate();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testChangePlanBundleAlignEOTWithChargeThroughDate() throws EntitlementBillingApiException {
super.testChangePlanBundleAlignEOTWithChargeThroughDate();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testChangePlanBundleAlignIMM() {
super.testChangePlanBundleAlignIMM();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testMultipleChangeLastIMM() throws EntitlementBillingApiException {
super.testMultipleChangeLastIMM();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testMultipleChangeLastEOT() throws EntitlementBillingApiException {
super.testMultipleChangeLastEOT();
}
+ /*
// Set to false until we implement rescue example.
@Override
@Test(enabled=false, groups={"fast"})
public void testChangePlanChangePlanAlignEOTWithChargeThroughDate() throws EntitlementBillingApiException {
super.testChangePlanChangePlanAlignEOTWithChargeThroughDate();
}
+ */
@Override
- @Test(enabled=true, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testCorrectPhaseAlignmentOnChange() {
super.testCorrectPhaseAlignmentOnChange();
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
index 047ca67..b674e34 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreateMemory.java
@@ -31,31 +31,31 @@ public class TestUserApiCreateMemory extends TestUserApiCreate {
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testCreateWithRequestedDate() {
super.testCreateWithRequestedDate();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testCreateWithInitialPhase() {
super.testSimpleSubscriptionThroughPhases();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
public void testSimpleCreateSubscription() {
super.testSimpleCreateSubscription();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
protected void testSimpleSubscriptionThroughPhases() {
super.testSimpleSubscriptionThroughPhases();
}
@Override
- @Test(enabled=false, groups={"fast"})
+ @Test(enabled=true, groups={"fast-disabled"})
protected void testSubscriptionWithAddOn() {
super.testSubscriptionWithAddOn();
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
index 6e28da8..94836a8 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoMemory.java
@@ -32,6 +32,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
+import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.catalog.api.ProductCategory;
import com.ning.billing.catalog.api.TimeUnit;
import com.ning.billing.config.EntitlementConfig;
@@ -64,17 +65,17 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
private final TreeSet<EntitlementEvent> events;
private final Clock clock;
private final EntitlementConfig config;
- private final SubscriptionFactory factory;
private final NotificationQueueService notificationQueueService;
+ private final CatalogService catalogService;
@Inject
public MockEntitlementDaoMemory(final Clock clock, final EntitlementConfig config,
- final SubscriptionFactory factory,
- final NotificationQueueService notificationQueueService) {
+ final NotificationQueueService notificationQueueService,
+ final CatalogService catalogService) {
super();
this.clock = clock;
this.config = config;
- this.factory = factory;
+ this.catalogService = catalogService;
this.notificationQueueService = notificationQueueService;
this.bundles = new ArrayList<SubscriptionBundle>();
this.subscriptions = new ArrayList<Subscription>();
@@ -126,10 +127,10 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
}
@Override
- public Subscription getSubscriptionFromId(final UUID subscriptionId) {
+ public Subscription getSubscriptionFromId(final SubscriptionFactory factory, final UUID subscriptionId) {
for (final Subscription cur : subscriptions) {
if (cur.getId().equals(subscriptionId)) {
- return buildSubscription((SubscriptionData) cur);
+ return buildSubscription(factory, (SubscriptionData) cur);
}
}
return null;
@@ -141,11 +142,11 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
}
@Override
- public List<Subscription> getSubscriptionsForKey(final String bundleKey) {
+ public List<Subscription> getSubscriptionsForKey(final SubscriptionFactory factory, final String bundleKey) {
for (final SubscriptionBundle cur : bundles) {
if (cur.getKey().equals(bundleKey)) {
- return getSubscriptions(cur.getId());
+ return getSubscriptions(factory, cur.getId());
}
}
return Collections.emptyList();
@@ -167,7 +168,7 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
});
}
}
- Subscription updatedSubscription = buildSubscription(subscription);
+ Subscription updatedSubscription = buildSubscription(null, subscription);
subscriptions.add(updatedSubscription);
}
@@ -189,12 +190,12 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
}
@Override
- public List<Subscription> getSubscriptions(final UUID bundleId) {
+ public List<Subscription> getSubscriptions(final SubscriptionFactory factory, final UUID bundleId) {
List<Subscription> results = new ArrayList<Subscription>();
for (final Subscription cur : subscriptions) {
if (cur.getBundleId().equals(bundleId)) {
- results.add(buildSubscription((SubscriptionData) cur));
+ results.add(buildSubscription(factory, (SubscriptionData) cur));
}
}
return results;
@@ -230,11 +231,11 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
@Override
- public Subscription getBaseSubscription(final UUID bundleId) {
+ public Subscription getBaseSubscription(final SubscriptionFactory factory, final UUID bundleId) {
for (final Subscription cur : subscriptions) {
if (cur.getBundleId().equals(bundleId) &&
cur.getCurrentPlan().getProduct().getCategory() == ProductCategory.BASE) {
- return buildSubscription((SubscriptionData) cur);
+ return buildSubscription(factory, (SubscriptionData) cur);
}
}
return null;
@@ -249,8 +250,16 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
- private Subscription buildSubscription(final SubscriptionData in) {
- return factory.createSubscription(new SubscriptionBuilder(in), getEventsForSubscription(in.getId()));
+ private Subscription buildSubscription(final SubscriptionFactory factory, final SubscriptionData in) {
+ if (factory != null) {
+ return factory.createSubscription(new SubscriptionBuilder(in), getEventsForSubscription(in.getId()));
+ } else {
+ SubscriptionData subscription = new SubscriptionData(new SubscriptionBuilder(in), null, clock);
+ if (events.size() > 0) {
+ subscription.rebuildTransitions(getEventsForSubscription(in.getId()), catalogService.getFullCatalog());
+ }
+ return subscription;
+ }
}
@Override
@@ -310,9 +319,10 @@ public class MockEntitlementDaoMemory implements EntitlementDao, MockEntitlement
}
}
+
private void cancelNextPhaseEvent(final UUID subscriptionId) {
- Subscription curSubscription = getSubscriptionFromId(subscriptionId);
+ Subscription curSubscription = getSubscriptionFromId(null, subscriptionId);
if (curSubscription.getCurrentPhase() == null ||
curSubscription.getCurrentPhase().getDuration().getUnit() == TimeUnit.UNLIMITED) {
return;
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
index 65d8495..4733f4a 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/engine/dao/MockEntitlementDaoSql.java
@@ -36,9 +36,9 @@ public class MockEntitlementDaoSql extends EntitlementSqlDao implements MockEnti
private final ResetSqlDao resetDao;
@Inject
- public MockEntitlementDaoSql(IDBI dbi, Clock clock, SubscriptionFactory factory, AddonUtils addonUtils, NotificationQueueService notificationQueueService,
+ public MockEntitlementDaoSql(IDBI dbi, Clock clock, AddonUtils addonUtils, NotificationQueueService notificationQueueService,
CustomFieldDao customFieldDao) {
- super(dbi, clock, factory, addonUtils, notificationQueueService, customFieldDao);
+ super(dbi, clock, addonUtils, notificationQueueService, customFieldDao);
this.resetDao = dbi.onDemand(ResetSqlDao.class);
}
diff --git a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
index 5107d71..03dc211 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/notification/DefaultNextBillingDateNotifier.java
@@ -25,8 +25,8 @@ import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
import com.ning.billing.config.InvoiceConfig;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.Subscription;
-import com.ning.billing.entitlement.engine.dao.EntitlementDao;
import com.ning.billing.invoice.InvoiceListener;
import com.ning.billing.invoice.api.DefaultInvoiceService;
import com.ning.billing.util.bus.Bus;
@@ -45,17 +45,18 @@ public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier
private final NotificationQueueService notificationQueueService;
private final InvoiceConfig config;
- private final EntitlementDao entitlementDao;
+ private final EntitlementUserApi entitlementUserApi;
+
private NotificationQueue nextBillingQueue;
private final InvoiceListener listener;
@Inject
public DefaultNextBillingDateNotifier(NotificationQueueService notificationQueueService,
- InvoiceConfig config, EntitlementDao entitlementDao, InvoiceListener listener){
+ InvoiceConfig config, EntitlementUserApi entitlementUserApi, InvoiceListener listener){
this.notificationQueueService = notificationQueueService;
this.config = config;
- this.entitlementDao = entitlementDao;
+ this.entitlementUserApi = entitlementUserApi;
this.listener = listener;
}
@@ -69,7 +70,7 @@ public class DefaultNextBillingDateNotifier implements NextBillingDateNotifier
public void handleReadyNotification(String notificationKey, DateTime eventDate) {
try {
UUID key = UUID.fromString(notificationKey);
- Subscription subscription = entitlementDao.getSubscriptionFromId(key);
+ Subscription subscription = entitlementUserApi.getSubscriptionFromId(key);
if (subscription == null) {
log.warn("Next Billing Date Notification Queue handled spurious notification (key: " + key + ")" );
} else {
diff --git a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
index adc78b7..26df2af 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/notification/TestNextBillingDateNotifier.java
@@ -61,6 +61,8 @@ import com.ning.billing.catalog.api.CatalogService;
import com.ning.billing.config.CatalogConfig;
import com.ning.billing.config.InvoiceConfig;
import com.ning.billing.dbi.MysqlTestingHelper;
+import com.ning.billing.entitlement.api.user.DefaultEntitlementUserApi;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
import com.ning.billing.entitlement.api.user.Subscription;
import com.ning.billing.entitlement.engine.dao.EntitlementDao;
import com.ning.billing.entitlement.engine.dao.EntitlementSqlDao;
@@ -132,14 +134,15 @@ public class TestNextBillingDateNotifier {
IDBI dbi = helper.getDBI();
bind(IDBI.class).toInstance(dbi);
bind(TagDao.class).to(AuditedTagDao.class).asEagerSingleton();
- bind(CustomFieldDao.class).to(AuditedCustomFieldDao.class).asEagerSingleton();
bind(EntitlementDao.class).to(EntitlementSqlDao.class).asEagerSingleton();
+ bind(CustomFieldDao.class).to(AuditedCustomFieldDao.class).asEagerSingleton();
bind(GlobalLocker.class).to(MySqlGlobalLocker.class).asEagerSingleton();
bind(InvoiceGenerator.class).to(DefaultInvoiceGenerator.class).asEagerSingleton();
bind(InvoiceDao.class).to(DefaultInvoiceDao.class);
bind(NextBillingDatePoster.class).to(DefaultNextBillingDatePoster.class).asEagerSingleton();
bind(AccountUserApi.class).to(MockAccountUserApi.class).asEagerSingleton();
bind(EntitlementBillingApi.class).to(DefaultEntitlementBillingApi.class).asEagerSingleton();
+ bind(EntitlementUserApi.class).to(DefaultEntitlementUserApi.class).asEagerSingleton();
}
});
@@ -152,12 +155,12 @@ public class TestNextBillingDateNotifier {
InvoiceDispatcher dispatcher = g.getInstance(InvoiceDispatcher.class);
Subscription subscription = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
- EntitlementDao entitlementDao = BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementDao.class);
- ((ZombieControl) entitlementDao).addResult("getSubscriptionFromId", subscription);
+ EntitlementUserApi entitlementUserApi = BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementUserApi.class);
+ ((ZombieControl) entitlementUserApi).addResult("getSubscriptionFromId", subscription);
CallContextFactory factory = new DefaultCallContextFactory(clock);
listener = new InvoiceListenerMock(factory, dispatcher);
- notifier = new DefaultNextBillingDateNotifier(notificationQueueService,g.getInstance(InvoiceConfig.class), entitlementDao, listener);
+ notifier = new DefaultNextBillingDateNotifier(notificationQueueService,g.getInstance(InvoiceConfig.class), entitlementUserApi, listener);
startMysql();
}
pom.xml 5(+5 -0)
diff --git a/pom.xml b/pom.xml
index c0c46a2..f8bc4c2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -396,6 +396,11 @@
<exclude>**/test-output/**</exclude>
<exclude>**/bin/**</exclude>
<exclude>.travis.yml</exclude>
+ <!-- until we merge from server branch we disable rat for those -->
+ <exclude>jaxrs/**</exclude>
+ <exclude>server/**</exclude>
+ <exclude>bin/**</exclude>
+
</excludes>
</configuration>
</execution>