killbill-memoizeit

jaxrs: add linkedInvoiceItemId to InvoiceItemJsonSimple Signed-off-by:

8/16/2012 6:02:00 PM

Details

diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceItemJsonSimple.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceItemJsonSimple.java
index bf09acf..a4151b1 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceItemJsonSimple.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/InvoiceItemJsonSimple.java
@@ -32,6 +32,7 @@ public class InvoiceItemJsonSimple extends JsonBase {
 
     private final String invoiceItemId;
     private final String invoiceId;
+    private final String linkedInvoiceItemId;
     private final String accountId;
     private final String bundleId;
     private final String subscriptionId;
@@ -45,6 +46,7 @@ public class InvoiceItemJsonSimple extends JsonBase {
 
     public InvoiceItemJsonSimple(@JsonProperty("invoiceItemId") final String invoiceItemId,
                                  @JsonProperty("invoiceId") final String invoiceId,
+                                 @JsonProperty("linkedInvoiceItemId") final String linkedInvoiceItemId,
                                  @JsonProperty("accountId") final String accountId,
                                  @JsonProperty("bundleId") final String bundleId,
                                  @JsonProperty("subscriptionId") final String subscriptionId,
@@ -59,6 +61,7 @@ public class InvoiceItemJsonSimple extends JsonBase {
         super(auditLogs);
         this.invoiceItemId = invoiceItemId;
         this.invoiceId = invoiceId;
+        this.linkedInvoiceItemId = linkedInvoiceItemId;
         this.accountId = accountId;
         this.bundleId = bundleId;
         this.subscriptionId = subscriptionId;
@@ -72,8 +75,8 @@ public class InvoiceItemJsonSimple extends JsonBase {
     }
 
     public InvoiceItemJsonSimple(final InvoiceItem item) {
-        this(toString(item.getId()), toString(item.getInvoiceId()), toString(item.getAccountId()),
-             toString(item.getBundleId()), toString(item.getSubscriptionId()),
+        this(toString(item.getId()), toString(item.getInvoiceId()), toString(item.getLinkedItemId()),
+             toString(item.getAccountId()), toString(item.getBundleId()), toString(item.getSubscriptionId()),
              item.getPlanName(), item.getPhaseName(), item.getDescription(), item.getStartDate(), item.getEndDate(),
              item.getAmount(), item.getCurrency(), null);
     }
@@ -86,6 +89,10 @@ public class InvoiceItemJsonSimple extends JsonBase {
         return invoiceId;
     }
 
+    public String getLinkedInvoiceItemId() {
+        return linkedInvoiceItemId;
+    }
+
     public String getAccountId() {
         return accountId;
     }
@@ -127,6 +134,27 @@ public class InvoiceItemJsonSimple extends JsonBase {
     }
 
     @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("InvoiceItemJsonSimple");
+        sb.append("{invoiceItemId='").append(invoiceItemId).append('\'');
+        sb.append(", invoiceId='").append(invoiceId).append('\'');
+        sb.append(", linkedInvoiceItemId='").append(linkedInvoiceItemId).append('\'');
+        sb.append(", accountId='").append(accountId).append('\'');
+        sb.append(", bundleId='").append(bundleId).append('\'');
+        sb.append(", subscriptionId='").append(subscriptionId).append('\'');
+        sb.append(", planName='").append(planName).append('\'');
+        sb.append(", phaseName='").append(phaseName).append('\'');
+        sb.append(", description='").append(description).append('\'');
+        sb.append(", startDate=").append(startDate);
+        sb.append(", endDate=").append(endDate);
+        sb.append(", amount=").append(amount);
+        sb.append(", currency=").append(currency);
+        sb.append('}');
+        return sb.toString();
+    }
+
+    @Override
     public boolean equals(final Object o) {
         if (this == o) {
             return true;
@@ -163,6 +191,9 @@ public class InvoiceItemJsonSimple extends JsonBase {
         if (invoiceId != null ? !invoiceId.equals(that.invoiceId) : that.invoiceId != null) {
             return false;
         }
+        if (linkedInvoiceItemId != null ? !linkedInvoiceItemId.equals(that.linkedInvoiceItemId) : that.linkedInvoiceItemId != null) {
+            return false;
+        }
         if (phaseName != null ? !phaseName.equals(that.phaseName) : that.phaseName != null) {
             return false;
         }
@@ -184,6 +215,7 @@ public class InvoiceItemJsonSimple extends JsonBase {
     public int hashCode() {
         int result = invoiceId != null ? invoiceId.hashCode() : 0;
         result = 31 * result + (invoiceItemId != null ? invoiceItemId.hashCode() : 0);
+        result = 31 * result + (linkedInvoiceItemId != null ? linkedInvoiceItemId.hashCode() : 0);
         result = 31 * result + (accountId != null ? accountId.hashCode() : 0);
         result = 31 * result + (bundleId != null ? bundleId.hashCode() : 0);
         result = 31 * result + (subscriptionId != null ? subscriptionId.hashCode() : 0);
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceItemJsonSimple.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceItemJsonSimple.java
index a182119..09808ac 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceItemJsonSimple.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceItemJsonSimple.java
@@ -39,6 +39,7 @@ public class TestInvoiceItemJsonSimple extends JaxrsTestSuite {
     public void testJson() throws Exception {
         final String invoiceItemId = UUID.randomUUID().toString();
         final String invoiceId = UUID.randomUUID().toString();
+        final String linkedInvoiceItemId = UUID.randomUUID().toString();
         final String accountId = UUID.randomUUID().toString();
         final String bundleId = UUID.randomUUID().toString();
         final String subscriptionId = UUID.randomUUID().toString();
@@ -50,11 +51,12 @@ public class TestInvoiceItemJsonSimple extends JaxrsTestSuite {
         final BigDecimal amount = BigDecimal.TEN;
         final Currency currency = Currency.MXN;
         final List<AuditLogJson> auditLogs = createAuditLogsJson();
-        final InvoiceItemJsonSimple invoiceItemJsonSimple = new InvoiceItemJsonSimple(invoiceItemId, invoiceId, accountId, bundleId, subscriptionId,
-                                                                                      planName, phaseName, description, startDate, endDate,
-                                                                                      amount, currency, auditLogs);
+        final InvoiceItemJsonSimple invoiceItemJsonSimple = new InvoiceItemJsonSimple(invoiceItemId, invoiceId, linkedInvoiceItemId, accountId,
+                                                                                      bundleId, subscriptionId, planName, phaseName, description,
+                                                                                      startDate, endDate, amount, currency, auditLogs);
         Assert.assertEquals(invoiceItemJsonSimple.getInvoiceItemId(), invoiceItemId);
         Assert.assertEquals(invoiceItemJsonSimple.getInvoiceId(), invoiceId);
+        Assert.assertEquals(invoiceItemJsonSimple.getLinkedInvoiceItemId(), linkedInvoiceItemId);
         Assert.assertEquals(invoiceItemJsonSimple.getAccountId(), accountId);
         Assert.assertEquals(invoiceItemJsonSimple.getBundleId(), bundleId);
         Assert.assertEquals(invoiceItemJsonSimple.getSubscriptionId(), subscriptionId);
@@ -77,6 +79,7 @@ public class TestInvoiceItemJsonSimple extends JaxrsTestSuite {
         final InvoiceItem invoiceItem = Mockito.mock(InvoiceItem.class);
         Mockito.when(invoiceItem.getId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoiceItem.getInvoiceId()).thenReturn(UUID.randomUUID());
+        Mockito.when(invoiceItem.getLinkedItemId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoiceItem.getAccountId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoiceItem.getBundleId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoiceItem.getSubscriptionId()).thenReturn(UUID.randomUUID());
@@ -91,6 +94,7 @@ public class TestInvoiceItemJsonSimple extends JaxrsTestSuite {
         final InvoiceItemJsonSimple invoiceItemJsonSimple = new InvoiceItemJsonSimple(invoiceItem);
         Assert.assertEquals(invoiceItemJsonSimple.getInvoiceItemId(), invoiceItem.getId().toString());
         Assert.assertEquals(invoiceItemJsonSimple.getInvoiceId(), invoiceItem.getInvoiceId().toString());
+        Assert.assertEquals(invoiceItemJsonSimple.getLinkedInvoiceItemId(), invoiceItem.getLinkedItemId().toString());
         Assert.assertEquals(invoiceItemJsonSimple.getAccountId(), invoiceItem.getAccountId().toString());
         Assert.assertEquals(invoiceItemJsonSimple.getBundleId(), invoiceItem.getBundleId().toString());
         Assert.assertEquals(invoiceItemJsonSimple.getSubscriptionId(), invoiceItem.getSubscriptionId().toString());
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithItems.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithItems.java
index 1b310f6..990cdea 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithItems.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestInvoiceJsonWithItems.java
@@ -100,6 +100,7 @@ public class TestInvoiceJsonWithItems extends JaxrsTestSuite {
 
         final InvoiceItemJsonSimple invoiceItemJsonSimple = invoiceJsonWithItems.getItems().get(0);
         Assert.assertEquals(invoiceItemJsonSimple.getInvoiceId(), invoiceItem.getInvoiceId().toString());
+        Assert.assertEquals(invoiceItemJsonSimple.getLinkedInvoiceItemId(), invoiceItem.getLinkedItemId().toString());
         Assert.assertEquals(invoiceItemJsonSimple.getAccountId(), invoiceItem.getAccountId().toString());
         Assert.assertEquals(invoiceItemJsonSimple.getBundleId(), invoiceItem.getBundleId().toString());
         Assert.assertEquals(invoiceItemJsonSimple.getSubscriptionId(), invoiceItem.getSubscriptionId().toString());
@@ -115,6 +116,7 @@ public class TestInvoiceJsonWithItems extends JaxrsTestSuite {
     private InvoiceItemJsonSimple createInvoiceItemJson() {
         final String invoiceItemId = UUID.randomUUID().toString();
         final String invoiceId = UUID.randomUUID().toString();
+        final String linkedInvoiceItemId = UUID.randomUUID().toString();
         final String accountId = UUID.randomUUID().toString();
         final String bundleId = UUID.randomUUID().toString();
         final String subscriptionId = UUID.randomUUID().toString();
@@ -125,7 +127,7 @@ public class TestInvoiceJsonWithItems extends JaxrsTestSuite {
         final LocalDate endDate = clock.getUTCToday();
         final BigDecimal amount = BigDecimal.TEN;
         final Currency currency = Currency.MXN;
-        return new InvoiceItemJsonSimple(invoiceItemId, invoiceId, accountId, bundleId, subscriptionId,
+        return new InvoiceItemJsonSimple(invoiceItemId, invoiceId, linkedInvoiceItemId, accountId, bundleId, subscriptionId,
                                          planName, phaseName, description, startDate, endDate,
                                          amount, currency, null);
     }
@@ -133,6 +135,7 @@ public class TestInvoiceJsonWithItems extends JaxrsTestSuite {
     private InvoiceItem createInvoiceItem() {
         final InvoiceItem invoiceItem = Mockito.mock(InvoiceItem.class);
         Mockito.when(invoiceItem.getInvoiceId()).thenReturn(UUID.randomUUID());
+        Mockito.when(invoiceItem.getLinkedItemId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoiceItem.getAccountId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoiceItem.getBundleId()).thenReturn(UUID.randomUUID());
         Mockito.when(invoiceItem.getSubscriptionId()).thenReturn(UUID.randomUUID());
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestRefundJson.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestRefundJson.java
index b31626a..bbb9b76 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestRefundJson.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestRefundJson.java
@@ -67,6 +67,7 @@ public class TestRefundJson extends JaxrsTestSuite {
     private InvoiceItemJsonSimple createInvoiceItemJson() {
         final String invoiceItemId = UUID.randomUUID().toString();
         final String invoiceId = UUID.randomUUID().toString();
+        final String linkedInvoiceItemId = UUID.randomUUID().toString();
         final String accountId = UUID.randomUUID().toString();
         final String bundleId = UUID.randomUUID().toString();
         final String subscriptionId = UUID.randomUUID().toString();
@@ -78,7 +79,7 @@ public class TestRefundJson extends JaxrsTestSuite {
         final BigDecimal amount = BigDecimal.TEN;
         final Currency currency = Currency.MXN;
         final List<AuditLogJson> auditLogs = createAuditLogsJson();
-        return new InvoiceItemJsonSimple(invoiceItemId, invoiceId, accountId, bundleId, subscriptionId,
+        return new InvoiceItemJsonSimple(invoiceItemId, invoiceId, linkedInvoiceItemId, accountId, bundleId, subscriptionId,
                                          planName, phaseName, description, startDate, endDate,
                                          amount, currency, auditLogs);
     }
diff --git a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
index 6e44e26..54149d7 100644
--- a/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
+++ b/server/src/test/java/com/ning/billing/jaxrs/TestJaxrsBase.java
@@ -23,10 +23,12 @@ import java.net.URL;
 import java.util.ArrayList;
 import java.util.EventListener;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
@@ -78,7 +80,6 @@ import com.ning.billing.jaxrs.json.PaymentMethodJson.PaymentMethodPluginDetailJs
 import com.ning.billing.jaxrs.json.PaymentMethodJson.PaymentMethodProperties;
 import com.ning.billing.jaxrs.json.RefundJson;
 import com.ning.billing.jaxrs.json.SubscriptionJsonNoEvents;
-import com.ning.billing.jaxrs.resources.AccountResource;
 import com.ning.billing.jaxrs.resources.JaxrsResource;
 import com.ning.billing.junction.glue.DefaultJunctionModule;
 import com.ning.billing.payment.glue.PaymentModule;
@@ -111,6 +112,8 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.datatype.joda.JodaModule;
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableMap;
 import com.google.inject.Module;
 
@@ -626,7 +629,7 @@ public class TestJaxrsBase extends ServerTestSuiteWithEmbeddedDB {
             queryParams.put(JaxrsResource.QUERY_REQUESTED_DT, requestedDate.toDateTimeISO().toString());
         }
 
-        final InvoiceItemJsonSimple adjustment = new InvoiceItemJsonSimple(invoiceItemId, null, accountId, null, null, null, null,
+        final InvoiceItemJsonSimple adjustment = new InvoiceItemJsonSimple(invoiceItemId, null, null, accountId, null, null, null, null,
                                                                            null, null, null, amount, currency, null);
         final String adjustmentJson = mapper.writeValueAsString(adjustment);
         final Response response = doPost(uri, adjustmentJson, queryParams, DEFAULT_HTTP_TIMEOUT_SEC);
@@ -651,7 +654,7 @@ public class TestJaxrsBase extends ServerTestSuiteWithEmbeddedDB {
             queryParams.put(JaxrsResource.QUERY_REQUESTED_DT, requestedDate.toDateTimeISO().toString());
         }
 
-        final InvoiceItemJsonSimple externalCharge = new InvoiceItemJsonSimple(null, invoiceId, accountId, bundleId, null, null, null,
+        final InvoiceItemJsonSimple externalCharge = new InvoiceItemJsonSimple(null, invoiceId, null, accountId, bundleId, null, null, null,
                                                                                null, null, null, amount, currency, null);
         final String externalChargeJson = mapper.writeValueAsString(externalCharge);
         final Response response = doPost(uri, externalChargeJson, queryParams, DEFAULT_HTTP_TIMEOUT_SEC);
@@ -667,7 +670,7 @@ public class TestJaxrsBase extends ServerTestSuiteWithEmbeddedDB {
         assertEquals(invoiceResponse.getStatusCode(), Status.OK.getStatusCode());
 
         final String invoicesBaseJson = invoiceResponse.getResponseBody();
-        final InvoiceJsonWithItems invoice = mapper.readValue(invoicesBaseJson, new TypeReference<InvoiceJsonWithItems>(){});
+        final InvoiceJsonWithItems invoice = mapper.readValue(invoicesBaseJson, new TypeReference<InvoiceJsonWithItems>() {});
         assertNotNull(invoice);
 
         return invoice;
@@ -818,7 +821,7 @@ public class TestJaxrsBase extends ServerTestSuiteWithEmbeddedDB {
 
         final List<InvoiceItemJsonSimple> adjustments = new ArrayList<InvoiceItemJsonSimple>();
         for (final String itemId : itemAdjustments.keySet()) {
-            adjustments.add(new InvoiceItemJsonSimple(itemId, null, null, null, null, null, null, null, null, null,
+            adjustments.add(new InvoiceItemJsonSimple(itemId, null, null, null, null, null, null, null, null, null, null,
                                                       itemAdjustments.get(itemId), null, null));
         }
         final RefundJson refundJson = new RefundJson(null, paymentId, amount, DEFAULT_CURRENCY, adjusted, null, null, adjustments, null);
@@ -835,6 +838,20 @@ public class TestJaxrsBase extends ServerTestSuiteWithEmbeddedDB {
         final String retrievedBaseJson = retrievedResponse.getResponseBody();
         final RefundJson retrievedRefundJson = mapper.readValue(retrievedBaseJson, RefundJson.class);
         assertNotNull(retrievedRefundJson);
+        // Verify we have the adjusted items
+        if (retrievedRefundJson.getAdjustments() != null) {
+            final Set<String> allLinkedItemIds = new HashSet<String>(Collections2.transform(retrievedRefundJson.getAdjustments(), new Function<InvoiceItemJsonSimple, String>() {
+                @Override
+                public String apply(@Nullable final InvoiceItemJsonSimple input) {
+                    if (input != null) {
+                        return input.getLinkedInvoiceItemId();
+                    } else {
+                        return null;
+                    }
+                }
+            }));
+            assertEquals(allLinkedItemIds, itemAdjustments.keySet());
+        }
 
         return retrievedRefundJson;
     }