killbill-aplcache

jaxrs: add test for SubscriptionJsonWithEvents Signed-off-by:

6/8/2012 6:07:29 PM

Details

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());
+    }
+}