diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonWithEvents.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonWithEvents.java
index 07ba180..c68c387 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonWithEvents.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonWithEvents.java
@@ -15,6 +15,7 @@
*/
package com.ning.billing.jaxrs.json;
+import javax.annotation.Nullable;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
@@ -131,7 +132,6 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
}
}
-
public static class SubscriptionNewEventJson extends SubscriptionBaseEventJson {
@JsonCreator
public SubscriptionNewEventJson(@JsonProperty("billing_period") final String billingPeriod,
@@ -271,10 +271,10 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
}
@JsonCreator
- public SubscriptionJsonWithEvents(@JsonProperty("subscription_id") final String subscriptionId,
- @JsonProperty("events") final List<SubscriptionReadEventJson> events,
- @JsonProperty("new_events") final List<SubscriptionNewEventJson> newEvents,
- @JsonProperty("deleted_events") final List<SubscriptionDeletedEventJson> deletedEvents) {
+ public SubscriptionJsonWithEvents(@JsonProperty("subscription_id") @Nullable final String subscriptionId,
+ @JsonProperty("events") @Nullable final List<SubscriptionReadEventJson> events,
+ @JsonProperty("new_events") @Nullable final List<SubscriptionNewEventJson> newEvents,
+ @JsonProperty("deleted_events") @Nullable final List<SubscriptionDeletedEventJson> deletedEvents) {
super(subscriptionId);
this.events = events;
this.deletedEvents = deletedEvents;
@@ -282,21 +282,17 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
}
public SubscriptionJsonWithEvents() {
- super(null);
- this.events = null;
- this.deletedEvents = null;
- this.newEvents = null;
+ this((String) null, null, null, null);
}
public SubscriptionJsonWithEvents(final Subscription data,
- final List<SubscriptionReadEventJson> events, final List<SubscriptionDeletedEventJson> deletedEvents, final List<SubscriptionNewEventJson> newEvents) {
- super(data.getId().toString());
- this.events = events;
- this.deletedEvents = deletedEvents;
- this.newEvents = newEvents;
+ @Nullable final List<SubscriptionReadEventJson> events,
+ @Nullable final List<SubscriptionNewEventJson> newEvents,
+ @Nullable final List<SubscriptionDeletedEventJson> deletedEvents) {
+ this(data.getId().toString(), events, newEvents, deletedEvents);
}
- public SubscriptionJsonWithEvents(final UUID bundleId, final SubscriptionTimeline input) {
+ public SubscriptionJsonWithEvents(@Nullable final UUID bundleId, final SubscriptionTimeline input) {
super(input.getId().toString());
this.events = new LinkedList<SubscriptionReadEventJson>();
for (final ExistingEvent cur : input.getExistingEvents()) {
@@ -304,8 +300,8 @@ public class SubscriptionJsonWithEvents extends SubscriptionJsonSimple {
this.events.add(new SubscriptionReadEventJson(cur.getEventId().toString(), spec.getBillingPeriod().toString(), cur.getRequestedDate(), cur.getEffectiveDate(),
spec.getProductName(), spec.getPriceListName(), cur.getSubscriptionTransitionType().toString(), spec.getPhaseType().toString()));
}
- this.deletedEvents = null;
this.newEvents = null;
+ this.deletedEvents = null;
}
public String getSubscriptionId() {
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonWithEvents.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonWithEvents.java
new file mode 100644
index 0000000..874f6bb
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonWithEvents.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2010-2012 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.jaxrs.json;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.collect.ImmutableList;
+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.entitlement.api.SubscriptionTransitionType;
+import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.util.clock.DefaultClock;
+
+public class TestSubscriptionJsonWithEvents {
+ private static final ObjectMapper mapper = new ObjectMapper();
+
+ static {
+ mapper.registerModule(new JodaModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ }
+
+ @Test(groups = "fast")
+ public void testJson() throws Exception {
+ final String subscriptionId = UUID.randomUUID().toString();
+ final DateTime requestedDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final SubscriptionJsonWithEvents.SubscriptionReadEventJson newEvent = new SubscriptionJsonWithEvents.SubscriptionReadEventJson(eventId.toString(),
+ BillingPeriod.NO_BILLING_PERIOD.toString(),
+ requestedDate,
+ effectiveDate,
+ UUID.randomUUID().toString(),
+ UUID.randomUUID().toString(),
+ SubscriptionTransitionType.CREATE.toString(),
+ PhaseType.DISCOUNT.toString());
+ final SubscriptionJsonWithEvents subscriptionJsonWithEvents = new SubscriptionJsonWithEvents(subscriptionId,
+ ImmutableList.<SubscriptionJsonWithEvents.SubscriptionReadEventJson>of(newEvent),
+ null,
+ null);
+
+
+ final String asJson = mapper.writeValueAsString(subscriptionJsonWithEvents);
+ final SubscriptionJsonWithEvents.SubscriptionReadEventJson event = subscriptionJsonWithEvents.getEvents().get(0);
+ Assert.assertEquals(asJson, "{\"events\":[{\"eventId\":\"" + event.getEventId() + "\"," +
+ "\"billingPeriod\":\"" + event.getBillingPeriod() + "\"," +
+ "\"product\":\"" + event.getProduct() + "\"," +
+ "\"priceList\":\"" + event.getPriceList() + "\"," +
+ "\"eventType\":\"" + event.getEventType() + "\"," +
+ "\"phase\":\"" + event.getPhase() + "\"," +
+ "\"requestedDate\":\"" + event.getRequestedDate() + "\"," +
+ "\"effectiveDate\":\"" + event.getEffectiveDate() + "\"}]," +
+ "\"subscriptionId\":\"" + subscriptionJsonWithEvents.getSubscriptionId() + "\"," +
+ "\"deletedEvents\":null," +
+ "\"newEvents\":null}");
+
+ final SubscriptionJsonWithEvents fromJson = mapper.readValue(asJson, SubscriptionJsonWithEvents.class);
+ Assert.assertEquals(fromJson, subscriptionJsonWithEvents);
+ }
+
+ @Test(groups = "fast")
+ public void testFromSubscription() throws Exception {
+ final DateTime requestedDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final SubscriptionJsonWithEvents.SubscriptionReadEventJson newEvent = new SubscriptionJsonWithEvents.SubscriptionReadEventJson(eventId.toString(),
+ BillingPeriod.NO_BILLING_PERIOD.toString(),
+ requestedDate,
+ effectiveDate,
+ UUID.randomUUID().toString(),
+ UUID.randomUUID().toString(),
+ SubscriptionTransitionType.CREATE.toString(),
+ PhaseType.DISCOUNT.toString());
+
+ final Subscription subscription = Mockito.mock(Subscription.class);
+ Mockito.when(subscription.getId()).thenReturn(UUID.randomUUID());
+
+ final SubscriptionJsonWithEvents subscriptionJsonWithEvents = new SubscriptionJsonWithEvents(subscription,
+ ImmutableList.<SubscriptionJsonWithEvents.SubscriptionReadEventJson>of(newEvent),
+ null,
+ null);
+ Assert.assertEquals(subscriptionJsonWithEvents.getSubscriptionId(), subscription.getId().toString());
+ Assert.assertNull(subscriptionJsonWithEvents.getNewEvents());
+ Assert.assertNull(subscriptionJsonWithEvents.getDeletedEvents());
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().size(), 1);
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().get(0).getEffectiveDate(), newEvent.getEffectiveDate());
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().get(0).getEventId(), newEvent.getEventId());
+ }
+
+ @Test(groups = "fast")
+ public void testFromSubscriptionTimeline() throws Exception {
+ final SubscriptionTimeline.ExistingEvent event = Mockito.mock(SubscriptionTimeline.ExistingEvent.class);
+ final DateTime effectiveDate = DefaultClock.toUTCDateTime(new DateTime(DateTimeZone.UTC));
+ final UUID eventId = UUID.randomUUID();
+ final PlanPhaseSpecifier planPhaseSpecifier = new PlanPhaseSpecifier(UUID.randomUUID().toString(), ProductCategory.BASE,
+ BillingPeriod.NO_BILLING_PERIOD, UUID.randomUUID().toString(),
+ PhaseType.EVERGREEN);
+ Mockito.when(event.getEffectiveDate()).thenReturn(effectiveDate);
+ Mockito.when(event.getEventId()).thenReturn(eventId);
+ Mockito.when(event.getSubscriptionTransitionType()).thenReturn(SubscriptionTransitionType.CREATE);
+ Mockito.when(event.getPlanPhaseSpecifier()).thenReturn(planPhaseSpecifier);
+
+ final SubscriptionTimeline subscriptionTimeline = Mockito.mock(SubscriptionTimeline.class);
+ Mockito.when(subscriptionTimeline.getId()).thenReturn(UUID.randomUUID());
+ Mockito.when(subscriptionTimeline.getExistingEvents()).thenReturn(ImmutableList.<SubscriptionTimeline.ExistingEvent>of(event));
+
+ final UUID bundleId = UUID.randomUUID();
+
+ final SubscriptionJsonWithEvents subscriptionJsonWithEvents = new SubscriptionJsonWithEvents(bundleId, subscriptionTimeline);
+ Assert.assertEquals(subscriptionJsonWithEvents.getSubscriptionId(), subscriptionTimeline.getId().toString());
+ Assert.assertNull(subscriptionJsonWithEvents.getNewEvents());
+ Assert.assertNull(subscriptionJsonWithEvents.getDeletedEvents());
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().size(), 1);
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().get(0).getEffectiveDate(), event.getEffectiveDate());
+ Assert.assertEquals(subscriptionJsonWithEvents.getEvents().get(0).getEventId(), event.getEventId().toString());
+ }
+}