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 ace0c73..9a0b572 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
@@ -27,7 +27,6 @@ import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.user.DefaultAccountCreationEvent;
import com.ning.billing.account.dao.AccountModelDao;
import com.ning.billing.analytics.AnalyticsTestSuiteWithEmbeddedDB;
@@ -153,6 +152,10 @@ public class TestAnalyticsService extends AnalyticsTestSuiteWithEmbeddedDB {
null,
null,
null,
+ null,
+ null,
+ null,
+ null,
Subscription.SubscriptionState.ACTIVE,
plan,
phase,
diff --git a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
index c8a8bca..76ff799 100644
--- a/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
+++ b/api/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransition.java
@@ -35,12 +35,20 @@ public interface SubscriptionTransition {
public SubscriptionState getNextState();
+ public UUID getPreviousEventId();
+
+ public DateTime getPreviousEventCreatedDate();
+
public Plan getPreviousPlan();
public Plan getNextPlan();
public PlanPhase getPreviousPhase();
+ public UUID getNextEventId();
+
+ public DateTime getNextEventCreatedDate();
+
public PlanPhase getNextPhase();
public PriceList getPreviousPriceList();
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
index 47aa41e..5841a98 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
@@ -28,7 +28,6 @@ import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.ning.billing.ErrorCode;
import com.ning.billing.catalog.api.ActionPolicy;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Catalog;
@@ -517,19 +516,24 @@ public class SubscriptionData extends EntityBase implements Subscription {
this.events = inputEvents;
+ UUID nextUserToken = null;
+
+ UUID nextEventId = null;
+ DateTime nextCreatedDate = null;
SubscriptionState nextState = null;
String nextPlanName = null;
String nextPhaseName = null;
String nextPriceListName = null;
- UUID nextUserToken = null;
+ UUID prevEventId = null;
+ DateTime prevCreatedDate = null;
SubscriptionState previousState = null;
PriceList previousPriceList = null;
-
- transitions = new LinkedList<SubscriptionTransition>();
Plan previousPlan = null;
PlanPhase previousPhase = null;
+ transitions = new LinkedList<SubscriptionTransition>();
+
for (final EntitlementEvent cur : inputEvents) {
if (!cur.isActive() || cur.getActiveVersion() < activeVersion) {
@@ -540,6 +544,9 @@ public class SubscriptionData extends EntityBase implements Subscription {
boolean isFromDisk = true;
+ nextEventId = cur.getId();
+ nextCreatedDate = cur.getCreatedDate();
+
switch (cur.getType()) {
case PHASE:
@@ -558,6 +565,8 @@ public class SubscriptionData extends EntityBase implements Subscription {
case MIGRATE_ENTITLEMENT:
case CREATE:
case RE_CREATE:
+ prevEventId = null;
+ prevCreatedDate = null;
previousState = null;
previousPlan = null;
previousPhase = null;
@@ -605,8 +614,11 @@ public class SubscriptionData extends EntityBase implements Subscription {
final SubscriptionTransitionData transition = new SubscriptionTransitionData(
cur.getId(), id, bundleId, cur.getType(), apiEventType,
cur.getRequestedDate(), cur.getEffectiveDate(),
+ prevEventId, prevCreatedDate,
previousState, previousPlan, previousPhase,
- previousPriceList, nextState, nextPlan, nextPhase,
+ previousPriceList,
+ nextEventId, nextCreatedDate,
+ nextState, nextPlan, nextPhase,
nextPriceList, cur.getTotalOrdering(), nextUserToken,
isFromDisk);
@@ -616,8 +628,9 @@ public class SubscriptionData extends EntityBase implements Subscription {
previousPlan = nextPlan;
previousPhase = nextPhase;
previousPriceList = nextPriceList;
+ prevEventId = nextEventId;
+ prevCreatedDate = nextCreatedDate;
+
}
}
-
-
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
index 7e6db65..2cadced 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionTransitionData.java
@@ -40,8 +40,12 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
private final DateTime effectiveTransitionTime;
private final SubscriptionState previousState;
private final PriceList previousPriceList;
+ private final UUID previousEventId;
+ private final DateTime previousEventCreatedDate;
private final Plan previousPlan;
private final PlanPhase previousPhase;
+ private final UUID nextEventId;
+ private final DateTime nextEventCreatedDate;
private final SubscriptionState nextState;
private final PriceList nextPriceList;
private final Plan nextPlan;
@@ -57,10 +61,14 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
final ApiEventType apiEventType,
final DateTime requestedTransitionTime,
final DateTime effectiveTransitionTime,
+ final UUID previousEventId,
+ final DateTime previousEventCreatedDate,
final SubscriptionState previousState,
final Plan previousPlan,
final PlanPhase previousPhase,
final PriceList previousPriceList,
+ final UUID nextEventId,
+ final DateTime nextEventCreatedDate,
final SubscriptionState nextState,
final Plan nextPlan,
final PlanPhase nextPhase,
@@ -84,12 +92,16 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
this.nextPriceList = nextPriceList;
this.nextPhase = nextPhase;
this.totalOrdering = totalOrdering;
+ this.previousEventId = previousEventId;
+ this.previousEventCreatedDate = previousEventCreatedDate;
+ this.nextEventId = nextEventId;
+ this.nextEventCreatedDate = nextEventCreatedDate;
this.isFromDisk = isFromDisk;
this.userToken = userToken;
this.remainingEventsForUserOperation = 0;
}
- public SubscriptionTransitionData(final SubscriptionTransitionData input, final int remainingEventsForUserOperation) {
+ public SubscriptionTransitionData(final SubscriptionTransitionData input, int remainingEventsForUserOperation) {
super();
this.eventId = input.getId();
this.subscriptionId = input.getSubscriptionId();
@@ -98,10 +110,14 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
this.apiEventType = input.getApiEventType();
this.requestedTransitionTime = input.getRequestedTransitionTime();
this.effectiveTransitionTime = input.getEffectiveTransitionTime();
+ this.previousEventId = input.getPreviousEventId();
+ this.previousEventCreatedDate = input.getPreviousEventCreatedDate();
this.previousState = input.getPreviousState();
this.previousPriceList = input.getPreviousPriceList();
this.previousPlan = input.getPreviousPlan();
this.previousPhase = input.getPreviousPhase();
+ this.nextEventId = input.getNextEventId();
+ this.nextEventCreatedDate = input.getNextEventCreatedDate();
this.nextState = input.getNextState();
this.nextPlan = input.getNextPlan();
this.nextPriceList = input.getNextPriceList();
@@ -142,6 +158,16 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
}
@Override
+ public UUID getNextEventId() {
+ return nextEventId;
+ }
+
+ @Override
+ public DateTime getNextEventCreatedDate() {
+ return nextEventCreatedDate;
+ }
+
+ @Override
public Plan getNextPlan() {
return nextPlan;
}
@@ -157,6 +183,16 @@ public class SubscriptionTransitionData implements SubscriptionTransition {
}
@Override
+ public UUID getPreviousEventId() {
+ return previousEventId;
+ }
+
+ @Override
+ public DateTime getPreviousEventCreatedDate() {
+ return previousEventCreatedDate;
+ }
+
+ @Override
public PriceList getPreviousPriceList() {
return previousPriceList;
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
index 87d8533..4321cd1 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/events/EventBaseBuilder.java
@@ -46,7 +46,7 @@ public class EventBaseBuilder<T extends EventBaseBuilder<T>> {
this.requestedDate = copy.requestedDate;
this.effectiveDate = copy.effectiveDate;
this.processedDate = copy.processedDate;
-
+ this.createdDate = copy.getCreatedDate();
this.activeVersion = copy.activeVersion;
this.isActive = copy.isActive;
this.totalOrdering = copy.totalOrdering;
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
index da23035..d3c1929 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiChangePlan.java
@@ -433,6 +433,7 @@ public class TestUserApiChangePlan extends EntitlementTestSuiteWithEmbeddedDB {
PlanPhase trialPhase = subscription.getCurrentPhase();
assertEquals(trialPhase.getPhaseType(), PhaseType.TRIAL);
+
// MOVE 2 DAYS AHEAD
Interval it = new Interval(clock.getUTCNow(), clock.getUTCNow().plusDays(2));
clock.addDeltaFromReality(it.toDurationMillis());
@@ -468,8 +469,8 @@ public class TestUserApiChangePlan extends EntitlementTestSuiteWithEmbeddedDB {
final DateTime expectedNextPhaseDate = subscription.getStartDate().plusDays(30).plusMonths(6);
final SubscriptionTransition nextPhase = subscription.getPendingTransition();
- final DateTime nextPhaseEffectiveDate = nextPhase.getEffectiveTransitionTime();
+ final DateTime nextPhaseEffectiveDate = nextPhase.getEffectiveTransitionTime();
assertEquals(nextPhaseEffectiveDate, expectedNextPhaseDate);
assertListenerStatus();
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
index 22a09cc..ef3e65f 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiCreate.java
@@ -62,15 +62,33 @@ public class TestUserApiCreate extends EntitlementTestSuiteWithEmbeddedDB {
testUtil.getProductSpecifier(productName, planSetName, term, null), requestedDate, callContext);
assertNotNull(subscription);
+ //
+ // In addition to Alignment phase we also test SubscriptionTransition eventIds and created dates.
+ // Keep tracks of row events to compare with ids and created dates returned by SubscriptionTransition later.
+ //
+ final List<EntitlementEvent> events = subscription.getEvents();
+ Assert.assertEquals(events.size(), 2);
+
+ final EntitlementEvent trialEvent = events.get(0);
+ final EntitlementEvent phaseEvent = events.get(1);
+
+
assertEquals(subscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION);
//assertEquals(subscription.getAccount(), account.getId());
assertEquals(subscription.getBundleId(), bundle.getId());
assertEquals(subscription.getStartDate(), requestedDate);
assertTrue(testListener.isCompleted(5000));
-
assertListenerStatus();
+ final SubscriptionTransition transition = subscription.getPreviousTransition();
+
+ assertEquals(transition.getPreviousEventId(), trialEvent.getId());
+ assertEquals(transition.getNextEventId(), phaseEvent.getId());
+
+ assertEquals(transition.getPreviousEventCreatedDate().compareTo(trialEvent.getCreatedDate()), 0);
+ assertEquals(transition.getNextEventCreatedDate().compareTo(phaseEvent.getCreatedDate()), 0);
+
} catch (EntitlementUserApiException e) {
log.error("Unexpected exception", e);
Assert.fail(e.getMessage());