Details
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 949f11b..3e2eb85 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
@@ -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;
@@ -31,9 +32,9 @@ public class BundleJsonWithSubscriptions extends BundleJsonSimple {
private final List<SubscriptionJsonWithEvents> subscriptions;
@JsonCreator
- public BundleJsonWithSubscriptions(@JsonProperty("bundleId") final String bundleId,
- @JsonProperty("externalKey") final String externalKey,
- @JsonProperty("subscriptions") final List<SubscriptionJsonWithEvents> subscriptions) {
+ public BundleJsonWithSubscriptions(@JsonProperty("bundleId") @Nullable final String bundleId,
+ @JsonProperty("externalKey") @Nullable final String externalKey,
+ @JsonProperty("subscriptions") @Nullable final List<SubscriptionJsonWithEvents> subscriptions) {
super(bundleId, externalKey);
this.subscriptions = subscriptions;
}
@@ -43,7 +44,7 @@ public class BundleJsonWithSubscriptions extends BundleJsonSimple {
return subscriptions;
}
- public BundleJsonWithSubscriptions(final UUID accountId, final BundleTimeline bundle) {
+ public BundleJsonWithSubscriptions(@Nullable final UUID accountId, final BundleTimeline bundle) {
super(bundle.getBundleId().toString(), bundle.getExternalKey());
this.subscriptions = new LinkedList<SubscriptionJsonWithEvents>();
for (final SubscriptionTimeline cur : bundle.getSubscriptions()) {
@@ -57,8 +58,6 @@ public class BundleJsonWithSubscriptions extends BundleJsonSimple {
}
public BundleJsonWithSubscriptions() {
- super(null, null);
- this.subscriptions = null;
+ this(null, null, null);
}
-
}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountTimelineJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountTimelineJson.java
index 564454e..50b9a4f 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountTimelineJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestAccountTimelineJson.java
@@ -1,3 +1,19 @@
+/*
+ * 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;
public class TestAccountTimelineJson {
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java
index c5a40cf..e0e89ea 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonNoSubscriptions.java
@@ -1,3 +1,19 @@
+/*
+ * 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;
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonSimple.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonSimple.java
index 1530ba5..7ac93ed 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonSimple.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonSimple.java
@@ -1,3 +1,19 @@
+/*
+ * 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;
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
new file mode 100644
index 0000000..28b7a1d
--- /dev/null
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestBundleJsonWithSubscriptions.java
@@ -0,0 +1,141 @@
+/*
+ * 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.BundleTimeline;
+import com.ning.billing.entitlement.api.timeline.SubscriptionTimeline;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.util.clock.DefaultClock;
+
+public class TestBundleJsonWithSubscriptions {
+ 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 SubscriptionTimeline.ExistingEvent event = Mockito.mock(SubscriptionTimeline.ExistingEvent.class);
+ final DateTime effectiveDate = 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 String externalKey = UUID.randomUUID().toString();
+ final SubscriptionJsonWithEvents subscription = new SubscriptionJsonWithEvents(bundleId, subscriptionTimeline);
+ final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(bundleId.toString(), externalKey, ImmutableList.<SubscriptionJsonWithEvents>of(subscription));
+ Assert.assertEquals(bundleJsonWithSubscriptions.getBundleId(), bundleId.toString());
+ Assert.assertEquals(bundleJsonWithSubscriptions.getExternalKey(), externalKey);
+ Assert.assertEquals(bundleJsonWithSubscriptions.getSubscriptions().size(), 1);
+
+ final String asJson = mapper.writeValueAsString(bundleJsonWithSubscriptions);
+ Assert.assertEquals(asJson, "{\"bundleId\":\"" + bundleJsonWithSubscriptions.getBundleId() + "\"," +
+ "\"externalKey\":\"" + bundleJsonWithSubscriptions.getExternalKey() + "\"," +
+ "\"subscriptions\":[{\"events\":[{\"eventId\":\"" + event.getEventId().toString() + "\"," +
+ "\"billingPeriod\":\"" + event.getPlanPhaseSpecifier().getBillingPeriod().toString() + "\"," +
+ "\"product\":\"" + event.getPlanPhaseSpecifier().getProductName() + "\"," +
+ "\"priceList\":\"" + event.getPlanPhaseSpecifier().getPriceListName() + "\"," +
+ "\"eventType\":\"" + event.getSubscriptionTransitionType().toString() + "\"," +
+ "\"phase\":\"" + event.getPlanPhaseSpecifier().getPhaseType() + "\"," +
+ "\"requestedDate\":null," +
+ "\"effectiveDate\":\"" + DefaultClock.toUTCDateTime(event.getEffectiveDate()).toDateTimeISO().toString() + "\"}]," +
+ "\"subscriptionId\":\"" + subscriptionTimeline.getId().toString() + "\",\"deletedEvents\":null,\"newEvents\":null}]}");
+
+ final BundleJsonWithSubscriptions fromJson = mapper.readValue(asJson, BundleJsonWithSubscriptions.class);
+ Assert.assertEquals(fromJson, bundleJsonWithSubscriptions);
+ }
+
+ @Test(groups = "fast")
+ public void testFromBundleTimeline() throws Exception {
+ final SubscriptionTimeline.ExistingEvent event = Mockito.mock(SubscriptionTimeline.ExistingEvent.class);
+ final DateTime effectiveDate = 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 BundleTimeline bundleTimeline = Mockito.mock(BundleTimeline.class);
+ final UUID bundleId = UUID.randomUUID();
+ final String externalKey = UUID.randomUUID().toString();
+ Mockito.when(bundleTimeline.getBundleId()).thenReturn(bundleId);
+ Mockito.when(bundleTimeline.getExternalKey()).thenReturn(externalKey);
+ Mockito.when(bundleTimeline.getSubscriptions()).thenReturn(ImmutableList.<SubscriptionTimeline>of(subscriptionTimeline));
+
+ final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(null, bundleTimeline);
+ Assert.assertEquals(bundleJsonWithSubscriptions.getBundleId(), bundleId.toString());
+ Assert.assertEquals(bundleJsonWithSubscriptions.getExternalKey(), externalKey);
+ Assert.assertEquals(bundleJsonWithSubscriptions.getSubscriptions().size(), 1);
+ final SubscriptionJsonWithEvents events = bundleJsonWithSubscriptions.getSubscriptions().get(0);
+ Assert.assertNull(events.getDeletedEvents());
+ Assert.assertNull(events.getNewEvents());
+ Assert.assertEquals(events.getEvents().size(), 1);
+ // Note - ms are truncated
+ Assert.assertEquals(events.getEvents().get(0).getEffectiveDate(), DefaultClock.toUTCDateTime(effectiveDate));
+ Assert.assertEquals(events.getEvents().get(0).getEventId(), eventId.toString());
+ }
+
+ @Test(groups = "fast")
+ public void testFromSubscriptionBundle() throws Exception {
+ final SubscriptionBundle bundle = Mockito.mock(SubscriptionBundle.class);
+ final UUID bundleId = UUID.randomUUID();
+ final String externalKey = UUID.randomUUID().toString();
+ Mockito.when(bundle.getId()).thenReturn(bundleId);
+ Mockito.when(bundle.getKey()).thenReturn(externalKey);
+
+ final BundleJsonWithSubscriptions bundleJsonWithSubscriptions = new BundleJsonWithSubscriptions(bundle);
+ Assert.assertEquals(bundleJsonWithSubscriptions.getBundleId(), bundleId.toString());
+ Assert.assertEquals(bundleJsonWithSubscriptions.getExternalKey(), externalKey);
+ Assert.assertNull(bundleJsonWithSubscriptions.getSubscriptions());
+ }
+}