killbill-uncached

profiles: add regression test for the JSON Catalog endpoint This

2/11/2015 12:33:09 PM

Details

diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCatalog.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCatalog.java
index f4204ac..0d0608e 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCatalog.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestCatalog.java
@@ -20,12 +20,14 @@ package org.killbill.billing.jaxrs;
 
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.killbill.billing.client.model.Catalog;
 import org.killbill.billing.client.model.Plan;
 import org.killbill.billing.client.model.PlanDetail;
 import org.killbill.billing.client.model.Product;
+import org.killbill.billing.util.jackson.ObjectMapper;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -42,6 +44,27 @@ public class TestCatalog extends TestJaxrsBase {
         Assert.assertNotNull(catalog);
     }
 
+    @Test(groups = "slow", description = "Can retrieve the full catalog as JSON, see https://github.com/killbill/killbill/issues/272")
+    public void testFullCatalogJSON() throws Exception {
+        final String jsonCatalog = killBillClient.getJSONCatalog();
+        // Verify we can serialize the StandaloneCatalog as JSON. While we usually never serialize
+        // directly API objects (we always transform them in the JAX-RS layer), this is a good
+        // regression test to make sure there are no loops and/or exceptions going through all
+        // the getters, which can be problematic in the Ruby bridge (see in particular
+        // https://github.com/killbill/killbill-java-parser/issues/6 and https://github.com/killbill/killbill-java-parser/issues/7).
+        // We don't attempt to de-serialize it back however because there is not enough information
+        // for Jackson (e.g. which concrete implementation of catalog objects to use). If we want to support
+        // this one day, we will need a translation layer in JAX-RS for all catalog objects.
+        final Map standaloneCatalog = new ObjectMapper().readValue(jsonCatalog, Map.class);
+        Assert.assertEquals(standaloneCatalog.get("catalogName"), "Firearms");
+        Assert.assertEquals(standaloneCatalog.get("recurringBillingMode"), "IN_ADVANCE");
+        Assert.assertEquals(standaloneCatalog.get("effectiveDate"), "2011-01-01T00:00:00.000+0000");
+        Assert.assertEquals(((List) standaloneCatalog.get("currentSupportedCurrencies")).size(), 3);
+        Assert.assertEquals(((List) standaloneCatalog.get("currentProducts")).size(), 11);
+        Assert.assertEquals(((List) standaloneCatalog.get("currentPlans")).size(), 20);
+        Assert.assertEquals(((List) standaloneCatalog.get("currentUnits")).size(), 1);
+    }
+
     @Test(groups = "slow", description = "Can retrieve a simplified version of the catalog")
     public void testCatalogSimple() throws Exception {
         final Set<String> allBasePlans = new HashSet<String>();