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 d575ee2..defdcef 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
@@ -40,6 +40,7 @@ import org.skife.jdbi.v2.IDBI;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.io.IOException;
@@ -55,6 +56,9 @@ public class TestAnalyticsDao
private static final String ACCOUNT_KEY = "pierre-143343-vcc";
private final MysqlTestingHelper helper = new MysqlTestingHelper();
+ private final IProduct product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
+ private final IPlan plan = new MockPlan("platinum-monthly", product);
+ private final IPlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
private BusinessSubscriptionTransitionDao businessSubscriptionTransitionDao;
private BusinessSubscriptionTransition transition;
@@ -75,10 +79,6 @@ public class TestAnalyticsDao
private void setupBusinessSubscriptionTransition()
{
- final IProduct product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
- final IPlan plan = new MockPlan("platinum-monthly", product);
- final IPlanPhase phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
-
final BusinessSubscription prevSubscription = new BusinessSubscription(plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), ISubscription.SubscriptionState.ACTIVE, UUID.randomUUID(), UUID.randomUUID());
final BusinessSubscription nextSubscription = new BusinessSubscription(plan, phase, Currency.USD, new DateTime(DateTimeZone.UTC), ISubscription.SubscriptionState.CANCELLED, UUID.randomUUID(), UUID.randomUUID());
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(plan);
@@ -123,6 +123,131 @@ public class TestAnalyticsDao
helper.stopMysql();
}
+ @BeforeMethod
+ public void cleanup() throws Exception
+ {
+ helper.cleanupTable("bst");
+ }
+
+ @Test(groups = "slow")
+ public void testTransitionsWithNullPrevSubscription()
+ {
+ final BusinessSubscriptionTransition transitionWithNullPrev = new BusinessSubscriptionTransition(
+ transition.getKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ null,
+ transition.getNextSubscription()
+ );
+ businessSubscriptionTransitionDao.createTransition(transitionWithNullPrev);
+
+ final List<BusinessSubscriptionTransition> transitions = businessSubscriptionTransitionDao.getTransitions(EVENT_KEY);
+ Assert.assertEquals(transitions.size(), 1);
+ Assert.assertEquals(transitions.get(0), transitionWithNullPrev);
+ }
+
+ @Test(groups = "slow")
+ public void testTransitionsWithNullNextSubscription()
+ {
+ final BusinessSubscriptionTransition transitionWithNullNext = new BusinessSubscriptionTransition(
+ transition.getKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ transition.getPreviousSubscription(),
+ null
+ );
+ businessSubscriptionTransitionDao.createTransition(transitionWithNullNext);
+
+ final List<BusinessSubscriptionTransition> transitions = businessSubscriptionTransitionDao.getTransitions(EVENT_KEY);
+ Assert.assertEquals(transitions.size(), 1);
+ Assert.assertEquals(transitions.get(0), transitionWithNullNext);
+ }
+
+ @Test(groups = "slow")
+ public void testTransitionsWithNullFieldsInSubscription()
+ {
+ final BusinessSubscription subscriptionWithNullFields = new BusinessSubscription(plan, phase, Currency.USD, null, null, null, null);
+ final BusinessSubscriptionTransition transitionWithNullFields = new BusinessSubscriptionTransition(
+ transition.getKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ subscriptionWithNullFields,
+ subscriptionWithNullFields
+ );
+ businessSubscriptionTransitionDao.createTransition(transitionWithNullFields);
+
+ final List<BusinessSubscriptionTransition> transitions = businessSubscriptionTransitionDao.getTransitions(EVENT_KEY);
+ Assert.assertEquals(transitions.size(), 1);
+ Assert.assertEquals(transitions.get(0), transitionWithNullFields);
+ }
+
+ @Test(groups = "slow")
+ public void testTransitionsWithNullPlanAndPhase() throws Exception
+ {
+ final BusinessSubscription subscriptionWithNullPlanAndPhase = new BusinessSubscription(null, null, Currency.USD, null, null, null, null);
+ final BusinessSubscriptionTransition transitionWithNullPlanAndPhase = new BusinessSubscriptionTransition(
+ transition.getKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ subscriptionWithNullPlanAndPhase,
+ subscriptionWithNullPlanAndPhase
+ );
+ businessSubscriptionTransitionDao.createTransition(transitionWithNullPlanAndPhase);
+
+ final List<BusinessSubscriptionTransition> transitions = businessSubscriptionTransitionDao.getTransitions(EVENT_KEY);
+ Assert.assertEquals(transitions.size(), 1);
+ Assert.assertEquals(transitions.get(0).getKey(), transition.getKey());
+ Assert.assertEquals(transitions.get(0).getRequestedTimestamp(), transition.getRequestedTimestamp());
+ Assert.assertEquals(transitions.get(0).getEvent(), transition.getEvent());
+ // Null Plan and Phase doesn't make sense so we turn the subscription into a null
+ Assert.assertNull(transitions.get(0).getPreviousSubscription());
+ Assert.assertNull(transitions.get(0).getNextSubscription());
+ }
+
+ @Test(groups = "slow")
+ public void testTransitionsWithNullPlan() throws Exception
+ {
+ final BusinessSubscription subscriptionWithNullPlan = new BusinessSubscription(null, phase, Currency.USD, null, null, null, null);
+ final BusinessSubscriptionTransition transitionWithNullPlan = new BusinessSubscriptionTransition(
+ transition.getKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ subscriptionWithNullPlan,
+ subscriptionWithNullPlan
+ );
+ businessSubscriptionTransitionDao.createTransition(transitionWithNullPlan);
+
+ final List<BusinessSubscriptionTransition> transitions = businessSubscriptionTransitionDao.getTransitions(EVENT_KEY);
+ Assert.assertEquals(transitions.size(), 1);
+ // Null Plan but Phase - we don't turn the subscription into a null
+ Assert.assertEquals(transitions.get(0), transitionWithNullPlan);
+ }
+
+ @Test(groups = "slow")
+ public void testTransitionsWithNullPhase() throws Exception
+ {
+ final BusinessSubscription subscriptionWithNullPhase = new BusinessSubscription(plan, null, Currency.USD, null, null, null, null);
+ final BusinessSubscriptionTransition transitionWithNullPhase = new BusinessSubscriptionTransition(
+ transition.getKey(),
+ transition.getRequestedTimestamp(),
+ transition.getEvent(),
+ subscriptionWithNullPhase,
+ subscriptionWithNullPhase
+ );
+ businessSubscriptionTransitionDao.createTransition(transitionWithNullPhase);
+
+ final List<BusinessSubscriptionTransition> transitions = businessSubscriptionTransitionDao.getTransitions(EVENT_KEY);
+ Assert.assertEquals(transitions.size(), 1);
+ Assert.assertEquals(transitions.get(0).getKey(), transition.getKey());
+ Assert.assertEquals(transitions.get(0).getRequestedTimestamp(), transition.getRequestedTimestamp());
+ Assert.assertEquals(transitions.get(0).getEvent(), transition.getEvent());
+
+ // Null Phase but Plan - we don't turn the subscription into a null, however price and mrr are both set to 0 (not null)
+ final BusinessSubscription blankSubscription = new BusinessSubscription(plan, new MockPhase(null, null, null, 0.0), Currency.USD, null, null, null, null);
+ Assert.assertEquals(transitions.get(0).getPreviousSubscription(), blankSubscription);
+ Assert.assertEquals(transitions.get(0).getNextSubscription(), blankSubscription);
+ }
+
@Test(groups = "slow")
public void testCreateAndRetrieveTransitions()
{