killbill-memoizeit
analytics: fix for cancellation events in BusinessSubscriptionTransitionRecorder The …
2/21/2012 5:20:45 PM
Changes
Details
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 0384fab..61dc207 100644
--- a/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
+++ b/analytics/src/main/java/com/ning/billing/analytics/BusinessSubscriptionTransitionRecorder.java
@@ -47,37 +47,45 @@ public class BusinessSubscriptionTransitionRecorder
this.accountApi = accountApi;
}
- public void subscriptionCreated(final SubscriptionTransition created) throws AccountApiException {
+ public void subscriptionCreated(final SubscriptionTransition created) throws AccountApiException
+ {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCreated(created.getNextPlan());
recordTransition(event, created);
}
- public void subscriptionCancelled(final SubscriptionTransition cancelled) throws AccountApiException {
- final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(cancelled.getNextPlan());
+ 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
+ final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(cancelled.getPreviousPlan());
recordTransition(event, cancelled);
}
- public void subscriptionChanged(final SubscriptionTransition changed) throws AccountApiException {
+ public void subscriptionChanged(final SubscriptionTransition changed) throws AccountApiException
+ {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionChanged(changed.getNextPlan());
recordTransition(event, changed);
}
- public void subscriptionPaused(final SubscriptionTransition paused) throws AccountApiException {
+ 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 {
+ 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 {
+ public void subscriptionPhaseChanged(final SubscriptionTransition phaseChanged) throws AccountApiException
+ {
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionPhaseChanged(phaseChanged.getNextPlan(), phaseChanged.getNextState());
recordTransition(event, phaseChanged);
}
- public void recordTransition(final BusinessSubscriptionEvent event, final SubscriptionTransition transition) throws AccountApiException {
+ public void recordTransition(final BusinessSubscriptionEvent event, final SubscriptionTransition transition) throws AccountApiException
+ {
Currency currency = null;
String transitionKey = null;
String accountKey = null;
@@ -113,7 +121,15 @@ public class BusinessSubscriptionTransitionRecorder
else {
prevSubscription = new BusinessSubscription(transition.getPreviousPriceList(), transition.getPreviousPlan(), transition.getPreviousPhase(), currency, previousEffectiveTransitionTime, transition.getPreviousState(), transition.getSubscriptionId(), transition.getBundleId());
}
- final BusinessSubscription nextSubscription = new BusinessSubscription(transition.getNextPriceList(), transition.getNextPlan(), transition.getNextPhase(), currency, transition.getEffectiveTransitionTime(), transition.getNextState(), transition.getSubscriptionId(), transition.getBundleId());
+ final BusinessSubscription nextSubscription;
+
+ // next plan is null for CANCEL events
+ if (transition.getNextPlan() == null) {
+ nextSubscription = null;
+ }
+ else {
+ nextSubscription = new BusinessSubscription(transition.getNextPriceList(), transition.getNextPlan(), transition.getNextPhase(), currency, transition.getEffectiveTransitionTime(), transition.getNextState(), transition.getSubscriptionId(), transition.getBundleId());
+ }
record(transitionKey, accountKey, transition.getRequestedTransitionTime(), event, prevSubscription, nextSubscription);
}
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 ec6d9ae..9f9e3c8 100644
--- a/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
+++ b/analytics/src/test/java/com/ning/billing/analytics/TestAnalyticsListener.java
@@ -17,8 +17,6 @@
package com.ning.billing.analytics;
-import java.util.UUID;
-
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.Plan;
@@ -30,13 +28,14 @@ import com.ning.billing.entitlement.api.user.SubscriptionTransitionData;
import com.ning.billing.entitlement.events.EntitlementEvent;
import com.ning.billing.entitlement.events.user.ApiEventType;
import com.ning.billing.util.clock.ClockMock;
-
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import java.util.UUID;
+
public class TestAnalyticsListener
{
@@ -125,7 +124,7 @@ public class TestAnalyticsListener
{
final BusinessSubscriptionEvent event = BusinessSubscriptionEvent.subscriptionCancelled(plan);
final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.CANCELLED;
- return createExpectedBST(event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, nextState);
+ return createExpectedBST(event, requestedTransitionTime, effectiveTransitionTime, lastSubscription, null);
}
private BusinessSubscriptionTransition createExpectedBST(
@@ -142,7 +141,7 @@ public class TestAnalyticsListener
requestedTransitionTime,
eventType,
previousSubscription,
- new BusinessSubscription(
+ nextState == null ? null : new BusinessSubscription(
null,
plan,
phase,
@@ -195,8 +194,24 @@ public class TestAnalyticsListener
private SubscriptionTransitionData createCancelSubscriptionTransition(final DateTime requestedTransitionTime, final DateTime effectiveTransitionTime, final Subscription.SubscriptionState previousState)
{
final ApiEventType eventType = ApiEventType.CANCEL;
- final Subscription.SubscriptionState nextState = Subscription.SubscriptionState.CANCELLED;
- return createSubscriptionTransition(eventType, requestedTransitionTime, effectiveTransitionTime, previousState, nextState);
+ // next state is null for canceled events
+ return new SubscriptionTransitionData(
+ UUID.randomUUID(),
+ subscriptionId,
+ bundleUUID,
+ EntitlementEvent.EventType.API_USER,
+ eventType,
+ requestedTransitionTime,
+ effectiveTransitionTime,
+ previousState,
+ plan,
+ phase,
+ priceList,
+ null,
+ null,
+ null,
+ null
+ );
}
private SubscriptionTransitionData createSubscriptionTransition(