Details
diff --git a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
index 4af7004..3c3bab3 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/AnalyticsListener.java
@@ -39,12 +39,16 @@ public class AnalyticsListener {
@Subscribe
public void handleSubscriptionTransitionChange(final SubscriptionTransition event) throws AccountApiException {
switch (event.getTransitionType()) {
+ // A susbcription enters either through migration or as newly created subscription
case MIGRATE_ENTITLEMENT:
- // TODO do nothing for now
- break;
case CREATE:
bstRecorder.subscriptionCreated(event);
break;
+ case RE_CREATE:
+ bstRecorder.subscriptionRecreated(event);
+ break;
+ case MIGRATE_BILLING:
+ break;
case CANCEL:
bstRecorder.subscriptionCancelled(event);
break;
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
index 5b6b078..2d45fd5 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionEvent.java
@@ -33,9 +33,8 @@ public class BusinessSubscriptionEvent
{
ADD,
CANCEL,
+ RE_ADD,
CHANGE,
- PAUSE,
- RESUME,
SYSTEM_CANCEL,
SYSTEM_CHANGE
}
@@ -94,14 +93,9 @@ public class BusinessSubscriptionEvent
return eventFromType(EventType.CHANGE, plan);
}
- public static BusinessSubscriptionEvent subscriptionPaused(final Plan plan)
+ public static BusinessSubscriptionEvent subscriptionRecreated(final Plan plan)
{
- return eventFromType(EventType.PAUSE, plan);
- }
-
- public static BusinessSubscriptionEvent subscriptionResumed(final Plan plan)
- {
- return eventFromType(EventType.RESUME, plan);
+ return eventFromType(EventType.RE_ADD, plan);
}
public static BusinessSubscriptionEvent subscriptionPhaseChanged(final Plan plan, final SubscriptionState state)
diff --git a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
index 438850f..09fbc96 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
@@ -54,6 +54,13 @@ public class BusinessSubscriptionTransitionRecorder
recordTransition(event, created);
}
+ public void subscriptionRecreated(final SubscriptionTransition recreated) throws AccountApiException
+ {
+ final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionRecreated(recreated.getNextPlan());
+ recordTransition(event, recreated);
+ }
+
+
public void subscriptionCancelled(final SubscriptionTransition cancelled) throws AccountApiException
{
// cancelled.getNextPlan() is null here - need to look at the previous one to create the correct event name
@@ -67,18 +74,6 @@ public class BusinessSubscriptionTransitionRecorder
recordTransition(event, changed);
}
- public void subscriptionPaused(final SubscriptionTransition paused) throws AccountApiException
- {
- final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionPaused(paused.getNextPlan());
- recordTransition(event, paused);
- }
-
- public void subscriptionResumed(final SubscriptionTransition resumed) throws AccountApiException
- {
- final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionResumed(resumed.getNextPlan());
- recordTransition(event, resumed);
- }
-
public void subscriptionPhaseChanged(final SubscriptionTransition phaseChanged) throws AccountApiException
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionPhaseChanged(phaseChanged.getNextPlan(), phaseChanged.getNextState());
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
index 6d8e587..0b420f0 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
@@ -80,6 +80,16 @@ public class TestAnalyticsListener
listener.handleSubscriptionTransitionChange(cancelledSubscriptionTransition);
Assert.assertEquals(dao.getTransitions(KEY).size(), 2);
Assert.assertEquals(dao.getTransitions(KEY).get(1), cancelledBST);
+
+ // Recreate it
+ final DateTime effectiveRecreatedTransitionTime = new DateTime(DateTimeZone.UTC);
+ final DateTime requestedRecreatedTransitionTime = new DateTime(DateTimeZone.UTC);
+ final SubscriptionTransitionData recreatedSubscriptionTransition = createRecreatedSubscriptionTransition(requestedRecreatedTransitionTime, effectiveRecreatedTransitionTime, cancelledSubscriptionTransition.getNextState());
+ final BusinessSubscriptionTransition recreatedBST = createExpectedRecreatedBST(recreatedSubscriptionTransition.getId(), requestedRecreatedTransitionTime, effectiveRecreatedTransitionTime, cancelledBST.getNextSubscription());
+ listener.handleSubscriptionTransitionChange(recreatedSubscriptionTransition);
+ Assert.assertEquals(dao.getTransitions(KEY).size(), 3);
+ Assert.assertEquals(dao.getTransitions(KEY).get(2), recreatedBST);
+
}
private BusinessSubscriptionTransition createExpectedFirstBST(final UUID id, final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime)
@@ -95,6 +105,14 @@ public class TestAnalyticsListener
return createExpectedBST(id, event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, null);
}
+ private BusinessSubscriptionTransition createExpectedRecreatedBST(final UUID id, final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final BusinessSubscription lastSubscription)
+ {
+ final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionRecreated(plan);
+ final Subscription.SubscriptionState subscriptionState = Subscription.SubscriptionState.ACTIVE;
+ return createExpectedBST(id, event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, subscriptionState);
+ }
+
+
private BusinessSubscriptionTransition createExpectedBST(
final UUID eventId,
final BusinessSubscriptionEvent eventType,
@@ -175,6 +193,32 @@ public class TestAnalyticsListener
);
}
+ private SubscriptionTransitionData createRecreatedSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState)
+ {
+ final ApiEventType eventType = ApiEventType.RE_CREATE;
+ final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.ACTIVE;
+ return new SubscriptionTransitionData(
+ UUID.randomUUID(),
+ subscriptionId,
+ bundleUUID,
+ EntitlementEvent.EventType.API_USER,
+ eventType,
+ requestedTransitionTime,
+ effectiveTransitionTime,
+ previousState,
+ null,
+ null,
+ null,
+ nextState,
+ plan,
+ phase,
+ priceList,
+ 1L,
+ true
+ );
+ }
+
+
private SubscriptionTransitionData createSubscriptionTransition(
final ApiEventType eventType,
final DateTime requestedTransitionTime,
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
index a3ca56c..793feac 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionEvent.java
@@ -31,7 +31,7 @@ public class TestBusinessSubscriptionEvent
private Product product;
private Plan plan;
private PlanPhase phase;
- private Subscription isubscription;
+ private Subscription subscription;
@BeforeMethod(alwaysRun = true)
public void setUp() throws Exception
@@ -39,7 +39,7 @@ public class TestBusinessSubscriptionEvent
product = new MockProduct("platinium", "subscription", ProductCategory.BASE);
plan = new MockPlan("platinum-monthly", product);
phase = new MockPhase(PhaseType.EVERGREEN, plan, MockDuration.UNLIMITED(), 25.95);
- isubscription = new MockSubscription(Subscription.SubscriptionState.ACTIVE, plan, phase);
+ subscription = new MockSubscription(Subscription.SubscriptionState.ACTIVE, plan, phase);
}
@Test(groups = "fast")
@@ -55,53 +55,39 @@ public class TestBusinessSubscriptionEvent
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.CANCEL);
Assert.assertEquals(event.getCategory(), ProductCategory.BASE);
- event = BusinessSubscriptionEvent.valueOf("PAUSE_MISC");
- Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.PAUSE);
- Assert.assertNull(event.getCategory());
-
event = BusinessSubscriptionEvent.valueOf("SYSTEM_CANCEL_ADD_ON");
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.SYSTEM_CANCEL);
Assert.assertEquals(event.getCategory(), ProductCategory.ADD_ON);
}
@Test(groups = "fast")
- public void testFromISubscription() throws Exception
+ public void testFromSubscription() throws Exception
{
BusinessSubscriptionEvent event;
- event = BusinessSubscriptionEvent.subscriptionCreated(isubscription.getCurrentPlan());
+ event = BusinessSubscriptionEvent.subscriptionCreated(subscription.getCurrentPlan());
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.ADD);
Assert.assertEquals(event.getCategory(), product.getCategory());
Assert.assertEquals(event.toString(), "ADD_BASE");
- event = BusinessSubscriptionEvent.subscriptionCancelled(isubscription.getCurrentPlan());
+ event = BusinessSubscriptionEvent.subscriptionCancelled(subscription.getCurrentPlan());
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.CANCEL);
Assert.assertEquals(event.getCategory(), product.getCategory());
Assert.assertEquals(event.toString(), "CANCEL_BASE");
- event = BusinessSubscriptionEvent.subscriptionChanged(isubscription.getCurrentPlan());
+ event = BusinessSubscriptionEvent.subscriptionChanged(subscription.getCurrentPlan());
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.CHANGE);
Assert.assertEquals(event.getCategory(), product.getCategory());
Assert.assertEquals(event.toString(), "CHANGE_BASE");
- event = BusinessSubscriptionEvent.subscriptionPaused(isubscription.getCurrentPlan());
- Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.PAUSE);
- Assert.assertEquals(event.getCategory(), product.getCategory());
- Assert.assertEquals(event.toString(), "PAUSE_BASE");
-
- event = BusinessSubscriptionEvent.subscriptionResumed(isubscription.getCurrentPlan());
- Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.RESUME);
- Assert.assertEquals(event.getCategory(), product.getCategory());
- Assert.assertEquals(event.toString(), "RESUME_BASE");
-
- event = BusinessSubscriptionEvent.subscriptionPhaseChanged(isubscription.getCurrentPlan(), isubscription.getState());
+ event = BusinessSubscriptionEvent.subscriptionPhaseChanged(subscription.getCurrentPlan(), subscription.getState());
// The subscription is still active, it's a system change
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.SYSTEM_CHANGE);
Assert.assertEquals(event.getCategory(), product.getCategory());
Assert.assertEquals(event.toString(), "SYSTEM_CHANGE_BASE");
- isubscription = new MockSubscription(Subscription.SubscriptionState.CANCELLED, plan, phase);
- event = BusinessSubscriptionEvent.subscriptionPhaseChanged(isubscription.getCurrentPlan(), isubscription.getState());
+ subscription = new MockSubscription(Subscription.SubscriptionState.CANCELLED, plan, phase);
+ event = BusinessSubscriptionEvent.subscriptionPhaseChanged(subscription.getCurrentPlan(), subscription.getState());
// The subscription is cancelled, it's a system cancellation
Assert.assertEquals(event.getEventType(), BusinessSubscriptionEvent.EventType.SYSTEM_CANCEL);
Assert.assertEquals(event.getCategory(), product.getCategory());
@@ -111,12 +97,9 @@ public class TestBusinessSubscriptionEvent
@Test(groups = "fast")
public void testEquals() throws Exception
{
- final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionChanged(isubscription.getCurrentPlan());
+ final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionChanged(subscription.getCurrentPlan());
Assert.assertSame(event, event);
Assert.assertEquals(event, event);
Assert.assertTrue(event.equals(event));
-
- final BusinessSubscriptionEvent otherEvent = BusinessSubscriptionEvent.subscriptionPaused(isubscription.getCurrentPlan());
- Assert.assertTrue(!event.equals(otherEvent));
}
}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
index 3b33bef..eaa4c96 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestBusinessSubscriptionTransition.java
@@ -86,9 +86,6 @@ public class TestBusinessSubscriptionTransition
otherTransition = new BusinessSubscriptionTransition(id, "12345", accountKey, requestedTimestamp, event, prevSubscription, nextSubscription);
Assert.assertTrue(!transition.equals(otherTransition));
- otherTransition = new BusinessSubscriptionTransition(id, key, accountKey, requestedTimestamp, BusinessSubscriptionEvent.subscriptionPaused(null), prevSubscription, nextSubscription);
- Assert.assertTrue(!transition.equals(otherTransition));
-
otherTransition = new BusinessSubscriptionTransition(id, key, accountKey, requestedTimestamp, event, prevSubscription, prevSubscription);
Assert.assertTrue(!transition.equals(otherTransition));