killbill-aplcache
Changes
entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundleTimeline.java 7(+2 -5)
Details
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundleTimeline.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundleTimeline.java
index f78a0ef..796bd34 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundleTimeline.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundleTimeline.java
@@ -191,7 +191,7 @@ public class DefaultSubscriptionBundleTimeline implements SubscriptionBundleTime
if (tr.getTransitionType() == SubscriptionBaseTransitionType.CREATE ||
tr.getTransitionType() == SubscriptionBaseTransitionType.TRANSFER) {
final SubscriptionEvent billingEvent = toSubscriptionEvent(tr, SubscriptionEventType.START_BILLING, accountTimeZone);
- insertSubscriptionEvent(event, result);
+ insertSubscriptionEvent(billingEvent, result);
}
}
}
@@ -245,14 +245,11 @@ public class DefaultSubscriptionBundleTimeline implements SubscriptionBundleTime
if (event.getSubscriptionEventType().ordinal() < cur.getSubscriptionEventType().ordinal()) {
// Same EffectiveDate, CreatedDate and ID, but event type is lower -- as described in enum
break;
- } else {
- // If we are here : Same EffectiveDate, CreatedDate and ID, but event type is greater (or equal),
- // then we look for next entry and restart the process
- index++;
}
}
}
}
+ index++;
}
result.add(index, event);
}
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultSubscriptionBundleTimeline.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultSubscriptionBundleTimeline.java
new file mode 100644
index 0000000..2c35cd8
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultSubscriptionBundleTimeline.java
@@ -0,0 +1,164 @@
+package com.ning.billing.entitlement.api;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.joda.time.LocalDate;
+import org.mockito.Mockito;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.CatalogApiException;
+import com.ning.billing.catalog.api.Plan;
+import com.ning.billing.catalog.api.PlanPhase;
+import com.ning.billing.catalog.api.PriceList;
+import com.ning.billing.catalog.api.PriceListSet;
+import com.ning.billing.catalog.api.Product;
+import com.ning.billing.entitlement.EntitlementTestSuiteNoDB;
+import com.ning.billing.entitlement.api.SubscriptionBundleTimeline.SubscriptionEvent;
+import com.ning.billing.entitlement.api.SubscriptionBundleTimeline.SubscriptionEventType;
+import com.ning.billing.subscription.api.SubscriptionBase;
+import com.ning.billing.subscription.api.user.SubscriptionBaseTransition;
+import com.ning.billing.subscription.api.user.SubscriptionBaseTransitionData;
+import com.ning.billing.subscription.events.SubscriptionBaseEvent.EventType;
+import com.ning.billing.subscription.events.user.ApiEventType;
+
+import static org.testng.Assert.assertEquals;
+
+public class TestDefaultSubscriptionBundleTimeline extends EntitlementTestSuiteNoDB {
+
+ private UUID bundleId;
+
+ @BeforeClass(groups = "fast")
+ protected void beforeClass() throws Exception {
+ super.beforeClass();
+ bundleId = UUID.randomUUID();
+ }
+
+ @Test(groups = "fast")
+ public void testSimple() throws CatalogApiException {
+
+ clock.setDay(new LocalDate(2013, 1, 1));
+
+ final DateTimeZone accountTimeZone = DateTimeZone.UTC;
+ final UUID accountId = UUID.randomUUID();
+ final UUID bundleId = UUID.randomUUID();
+ final String externalKey = "foo";
+
+
+ final UUID entitlementId = UUID.randomUUID();
+
+ final List<SubscriptionBaseTransition> allTransitions = new ArrayList<SubscriptionBaseTransition>();
+
+ final DateTime requestedDate = new DateTime();
+ DateTime effectiveDate = new DateTime(2013, 1, 1, 15, 43, 25, 0, DateTimeZone.UTC);
+ final SubscriptionBaseTransition tr1 = createTransition(entitlementId, EventType.API_USER, ApiEventType.CREATE, requestedDate, effectiveDate, clock.getUTCNow());
+ allTransitions.add(tr1);
+
+ effectiveDate = effectiveDate.plusDays(30);
+ clock.addDays(30);
+ final SubscriptionBaseTransition tr2 = createTransition(entitlementId, EventType.PHASE, null, requestedDate, effectiveDate, clock.getUTCNow());
+ allTransitions.add(tr2);
+
+
+ effectiveDate = effectiveDate.plusDays(15);
+ clock.addDays(15);
+ final SubscriptionBaseTransition tr3 = createTransition(entitlementId, EventType.API_USER, ApiEventType.CANCEL, requestedDate, effectiveDate, clock.getUTCNow());
+ allTransitions.add(tr3);
+
+
+ final List<Entitlement> entitlements = new ArrayList<Entitlement>();
+ final Entitlement entitlement = createEntitlement(entitlementId, allTransitions);
+ entitlements.add(entitlement);
+
+ final DefaultSubscriptionBundleTimeline timeline = new DefaultSubscriptionBundleTimeline(accountTimeZone, accountId, bundleId, externalKey, entitlements, Collections.<BlockingState>emptyList());
+
+ assertEquals(timeline.getAccountId(), accountId);
+ assertEquals(timeline.getBundleId(), bundleId);
+ assertEquals(timeline.getExternalKey(), externalKey);
+
+ List<SubscriptionEvent> events = timeline.getSubscriptionEvents();
+ assertEquals(events.size(), 4);
+
+ assertEquals(events.get(0).getEffectiveDate().compareTo(new LocalDate(tr1.getEffectiveTransitionTime(), accountTimeZone)), 0);
+ assertEquals(events.get(1).getEffectiveDate().compareTo(new LocalDate(tr1.getEffectiveTransitionTime(), accountTimeZone)), 0);
+ assertEquals(events.get(2).getEffectiveDate().compareTo(new LocalDate(tr2.getEffectiveTransitionTime(), accountTimeZone)), 0);
+ assertEquals(events.get(3).getEffectiveDate().compareTo(new LocalDate(tr3.getEffectiveTransitionTime(), accountTimeZone)), 0);
+
+ assertEquals(events.get(0).getSubscriptionEventType(), SubscriptionEventType.START_ENTITLEMENT);
+ assertEquals(events.get(1).getSubscriptionEventType(), SubscriptionEventType.START_BILLING);
+ assertEquals(events.get(2).getSubscriptionEventType(), SubscriptionEventType.PHASE);
+ assertEquals(events.get(3).getSubscriptionEventType(), SubscriptionEventType.STOP_BILLING);
+ }
+
+ private DefaultEntitlement createEntitlement(final UUID entitlementId, final List<SubscriptionBaseTransition> allTransitions) {
+
+ final DefaultEntitlement result = Mockito.mock(DefaultEntitlement.class);
+ Mockito.when(result.getId()).thenReturn(entitlementId);
+
+ final SubscriptionBase base = Mockito.mock(SubscriptionBase.class);
+ Mockito.when(base.getAllTransitions()).thenReturn(allTransitions);
+ Mockito.when(result.getSubscriptionBase()).thenReturn(base);
+ return result;
+ }
+
+ private SubscriptionBaseTransition createTransition(final UUID entitlementId,
+ final EventType eventType,
+ final ApiEventType apiEventType,
+ final DateTime requestedDate,
+ final DateTime effectiveDate,
+ final DateTime createdDate
+ ) throws CatalogApiException {
+
+
+ final PlanPhase phase = Mockito.mock(PlanPhase.class);
+ Mockito.when(phase.getName()).thenReturn("phase");
+
+ //catalogService.getCurrentCatalog().findCurrentPhase("pistol-monthly-trial");
+ final Plan plan = Mockito.mock(Plan.class);
+ Mockito.when(plan.getName()).thenReturn("plan");
+
+
+ //catalogService.getCurrentCatalog().findCurrentPlan("pistol-monthly");
+ final Product product = Mockito.mock(Product.class);
+ Mockito.when(product.getName()).thenReturn("product");
+
+ //catalogService.getCurrentCatalog().findCurrentProduct("Pistol");
+
+ final PriceList priceList = Mockito.mock(PriceList.class);
+ Mockito.when(priceList.getName()).thenReturn("pricelist");
+
+ //catalogService.getCurrentCatalog().findCurrentPricelist(PriceListSet.DEFAULT_PRICELIST_NAME);
+ final BillingPeriod billingPeriod = BillingPeriod.MONTHLY;
+
+ final SubscriptionBaseTransition transition = new SubscriptionBaseTransitionData(UUID.randomUUID(),
+ entitlementId,
+ bundleId,
+ eventType,
+ apiEventType,
+ requestedDate,
+ effectiveDate,
+ null,
+ null,
+ null,
+ plan,
+ phase,
+ priceList,
+ null,
+ null,
+ null,
+ plan,
+ phase,
+ priceList,
+ 1L,
+ createdDate,
+ UUID.randomUUID(),
+ true);
+ return transition;
+ }
+}
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
index 9934bf4..16a318b 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonNoSubscriptions.java
@@ -33,7 +33,7 @@ public class BundleJsonNoSubscriptions extends BundleJsonSimple {
public BundleJsonNoSubscriptions(@JsonProperty("bundleId") final String bundleId,
@JsonProperty("accountId") final String accountId,
@JsonProperty("externalKey") final String externalKey,
- @JsonProperty("subscriptions") @Nullable final List<EntitlementJsonWithEvents> subscriptions,
+ @JsonProperty("subscriptions") @Nullable final List<SubscriptionJsonWithEvents> subscriptions,
@JsonProperty("auditLogs") @Nullable final List<AuditLogJson> auditLogs) {
super(bundleId, externalKey, auditLogs);
this.accountId = accountId;
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonWithSubscriptions.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonWithSubscriptions.java
index d019836..e0d0539 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonWithSubscriptions.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/BundleJsonWithSubscriptions.java
@@ -26,8 +26,6 @@ import javax.annotation.Nullable;
import com.ning.billing.entitlement.api.Subscription;
import com.ning.billing.entitlement.api.SubscriptionBundle;
import com.ning.billing.entitlement.api.SubscriptionBundleTimeline.SubscriptionEvent;
-import com.ning.billing.subscription.api.timeline.BundleBaseTimeline;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline;
import com.ning.billing.util.audit.AuditLog;
import com.fasterxml.jackson.annotation.JsonCreator;
@@ -38,37 +36,40 @@ import com.google.common.collect.ImmutableList;
public class BundleJsonWithSubscriptions extends BundleJsonSimple {
- private final List<EntitlementJsonWithEvents> subscriptions;
+ private final List<SubscriptionJsonWithEvents> subscriptions;
@JsonCreator
public BundleJsonWithSubscriptions(@JsonProperty("bundleId") @Nullable final String bundleId,
@JsonProperty("externalKey") @Nullable final String externalKey,
- @JsonProperty("subscriptions") @Nullable final List<EntitlementJsonWithEvents> subscriptions,
+ @JsonProperty("subscriptions") @Nullable final List<SubscriptionJsonWithEvents> subscriptions,
@JsonProperty("auditLogs") @Nullable final List<AuditLogJson> auditLogs) {
super(bundleId, externalKey, auditLogs);
this.subscriptions = subscriptions;
}
@JsonProperty("subscriptions")
- public List<EntitlementJsonWithEvents> getSubscriptions() {
+ public List<SubscriptionJsonWithEvents> getSubscriptions() {
return subscriptions;
}
public BundleJsonWithSubscriptions(final SubscriptionBundle bundle, final List<AuditLog> auditLogs,
final Map<UUID, List<AuditLog>> subscriptionsAuditLogs, final Map<UUID, List<AuditLog>> subscriptionEventsAuditLogs) {
super(bundle.getId(), bundle.getExternalKey(), auditLogs);
- this.subscriptions = new LinkedList<EntitlementJsonWithEvents>();
+ this.subscriptions = new LinkedList<SubscriptionJsonWithEvents>();
for (final Subscription cur : bundle.getSubscriptions()) {
- final ImmutableList<SubscriptionEvent> events = ImmutableList.<SubscriptionEvent>copyOf(Collections2.filter(bundle.getTimeline().getSubscriptionEvents(), new Predicate<SubscriptionEvent>() {
+ final ImmutableList<SubscriptionEvent> events = ImmutableList.<SubscriptionEvent>copyOf(Collections2.filter(bundle.getTimeline().getSubscriptionEvents(), new Predicate<SubscriptionEvent>() {
@Override
public boolean apply(@Nullable final SubscriptionEvent input) {
return input.getEntitlementId().equals(cur.getId());
}
}));
- this.subscriptions.add(new EntitlementJsonWithEvents(cur,
- events,
- subscriptionsAuditLogs.get(cur.getId()), subscriptionEventsAuditLogs));
+ this.subscriptions.add(new SubscriptionJsonWithEvents(cur.getAccountId(),
+ cur.getBundleId(),
+ cur.getId(),
+ cur.getExternalKey(),
+ events,
+ subscriptionsAuditLogs.get(cur.getId()), subscriptionEventsAuditLogs));
}
}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
index dc08b57..8ba14cf 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
@@ -19,27 +19,15 @@ package com.ning.billing.jaxrs.json;
import java.util.List;
import java.util.UUID;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
-import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.catalog.api.BillingPeriod;
-import com.ning.billing.catalog.api.PhaseType;
-import com.ning.billing.catalog.api.PlanPhaseSpecifier;
-import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.jaxrs.json.EntitlementJsonWithEvents.SubscriptionReadEventJson;
-import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
-import com.ning.billing.subscription.api.timeline.BundleBaseTimeline;
-import com.ning.billing.subscription.api.timeline.SubscriptionBaseTimeline;
+import com.ning.billing.jaxrs.json.SubscriptionJsonWithEvents.SubscriptionReadEventJson;
import com.ning.billing.jaxrs.JaxrsTestSuiteNoDB;
-import com.ning.billing.util.audit.AuditLog;
-import com.ning.billing.clock.DefaultClock;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
import static com.ning.billing.jaxrs.JaxrsTestUtils.createAuditLogsJson;
@@ -54,9 +42,9 @@ public class TestBundleJsonWithSubscriptions extends JaxrsTestSuiteNoDB {
final List<AuditLogJson> auditLogs = createAuditLogsJson(clock.getUTCNow());
SubscriptionReadEventJson event = new SubscriptionReadEventJson(someUUID, BillingPeriod.NO_BILLING_PERIOD.toString(), new LocalDate(), new LocalDate(), "product", "priceList", "eventType", "phase", null);
- final EntitlementJsonWithEvents subscription = new EntitlementJsonWithEvents(someUUID, someUUID, someUUID, externalKey, ImmutableList.<SubscriptionReadEventJson>of(event), null, null, auditLogs);
+ final SubscriptionJsonWithEvents subscription = new SubscriptionJsonWithEvents(someUUID, someUUID, someUUID, externalKey, ImmutableList.<SubscriptionReadEventJson>of(event), null, null, auditLogs);
- final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<EntitlementJsonWithEvents>of(subscription), auditLogs);
+ final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<SubscriptionJsonWithEvents>of(subscription), auditLogs);
Assert.assertEquals(bundleJsonWithSubscriptions.getBundleId(), bundleId.toString());
Assert.assertEquals(bundleJsonWithSubscriptions.getExternalKey(), externalKey);
Assert.assertEquals(bundleJsonWithSubscriptions.getSubscriptions().size(), 1);
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java
index b5afb41..f2af865 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleTimelineJson.java
@@ -30,7 +30,6 @@ import com.ning.billing.catalog.api.Currency;
import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.catalog.api.PlanPhaseSpecifier;
import com.ning.billing.catalog.api.ProductCategory;
-import com.ning.billing.entitlement.api.Subscription;
import com.ning.billing.entitlement.api.SubscriptionBundleTimeline.SubscriptionEvent;
import com.ning.billing.jaxrs.JaxrsTestSuiteNoDB;
import com.ning.billing.util.audit.AuditLog;
@@ -73,10 +72,8 @@ public class TestBundleTimelineJson extends JaxrsTestSuiteNoDB {
final String externalKey = UUID.randomUUID().toString();
- // STEPH_ENT once DefaultSubscription exists...
- final Subscription subscription = null;
- final EntitlementJsonWithEvents entitlementJsonWithEvents = new EntitlementJsonWithEvents(subscription, ImmutableList.<SubscriptionEvent>of(), ImmutableList.<AuditLog>of(), ImmutableMap.<UUID, List<AuditLog>>of());
- return new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<EntitlementJsonWithEvents>of(entitlementJsonWithEvents), null);
+ final SubscriptionJsonWithEvents entitlementJsonWithEvents = new SubscriptionJsonWithEvents(accountId, bundleId, entitlementId, externalKey, ImmutableList.<SubscriptionEvent>of(), ImmutableList.<AuditLog>of(), ImmutableMap.<UUID, List<AuditLog>>of());
+ return new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<SubscriptionJsonWithEvents>of(entitlementJsonWithEvents), null);
}
private InvoiceJsonSimple createInvoice() {
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonWithEvents.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonWithEvents.java
index 9877a5c..9aa3997 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonWithEvents.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestEntitlementJsonWithEvents.java
@@ -29,7 +29,7 @@ import com.ning.billing.catalog.api.PhaseType;
import com.ning.billing.clock.DefaultClock;
import com.ning.billing.entitlement.api.SubscriptionBundleTimeline.SubscriptionEvent;
import com.ning.billing.jaxrs.JaxrsTestSuiteNoDB;
-import com.ning.billing.jaxrs.json.EntitlementJsonWithEvents.SubscriptionReadEventJson;
+import com.ning.billing.jaxrs.json.SubscriptionJsonWithEvents.SubscriptionReadEventJson;
import com.ning.billing.subscription.api.SubscriptionBaseTransitionType;
import com.google.common.collect.ImmutableList;
@@ -48,7 +48,7 @@ public class TestEntitlementJsonWithEvents extends JaxrsTestSuiteNoDB {
final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
final UUID eventId = UUID.randomUUID();
final List<AuditLogJson> auditLogs = createAuditLogsJson(clock.getUTCNow());
- final EntitlementJsonWithEvents.SubscriptionReadEventJson newEvent = new EntitlementJsonWithEvents.SubscriptionReadEventJson(eventId.toString(),
+ final SubscriptionJsonWithEvents.SubscriptionReadEventJson newEvent = new SubscriptionJsonWithEvents.SubscriptionReadEventJson(eventId.toString(),
BillingPeriod.NO_BILLING_PERIOD.toString(),
requestedDate.toLocalDate(),
effectiveDate.toLocalDate(),
@@ -58,12 +58,12 @@ public class TestEntitlementJsonWithEvents extends JaxrsTestSuiteNoDB {
PhaseType.DISCOUNT.toString(),
auditLogs);
final SubscriptionEvent event = null;
- final EntitlementJsonWithEvents entitlementJsonWithEvents = new EntitlementJsonWithEvents(accountId, bundleId, entitlementId, externalKey, ImmutableList.<SubscriptionReadEventJson>of(newEvent), null, null, auditLogs);
+ final SubscriptionJsonWithEvents entitlementJsonWithEvents = new SubscriptionJsonWithEvents(accountId, bundleId, entitlementId, externalKey, ImmutableList.<SubscriptionReadEventJson>of(newEvent), null, null, auditLogs);
final String asJson = mapper.writeValueAsString(entitlementJsonWithEvents);
- final EntitlementJsonWithEvents fromJson = mapper.readValue(asJson, EntitlementJsonWithEvents.class);
+ final SubscriptionJsonWithEvents fromJson = mapper.readValue(asJson, SubscriptionJsonWithEvents.class);
Assert.assertEquals(fromJson, entitlementJsonWithEvents);
}
}