killbill-aplcache

jaxrs: Fixes #289 Add filtering logic to make sure we don't

9/9/2015 6:35:25 PM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
index d45a84b..461eff6 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
@@ -111,6 +111,7 @@ import com.codahale.metrics.annotation.Timed;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.inject.Inject;
@@ -522,9 +523,18 @@ public class InvoiceResource extends JaxRsResourceBase {
         final TenantContext tenantContext = context.createContext(request);
 
         final Invoice invoice = invoiceApi.getInvoice(UUID.fromString(invoiceId), tenantContext);
+
+        // Extract unique set of paymentId for this invoice
+        final Set<UUID> invoicePaymentIds = ImmutableSet.copyOf(Iterables.transform(invoice.getPayments(), new Function<InvoicePayment, UUID>() {
+            @Override
+            public UUID apply(final InvoicePayment input) {
+                return input.getPaymentId();
+            }
+        }));
+
         final List<Payment> payments = new ArrayList<Payment>();
-        for (InvoicePayment cur : invoice.getPayments()) {
-            final Payment payment = paymentApi.getPayment(cur.getPaymentId(), withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
+        for (final UUID paymentId : invoicePaymentIds) {
+            final Payment payment = paymentApi.getPayment(paymentId, withPluginInfo, ImmutableList.<PluginProperty>of(), tenantContext);
             payments.add(payment);
         }
         final List<InvoicePaymentJson> result = new ArrayList<InvoicePaymentJson>(payments.size());
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoicePayment.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoicePayment.java
index 880b81c..bf11eaa 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoicePayment.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestInvoicePayment.java
@@ -96,6 +96,9 @@ public class TestInvoicePayment extends TestJaxrsBase {
         final BigDecimal refundAmount = paymentJson.getPurchasedAmount();
         final BigDecimal expectedInvoiceBalance = BigDecimal.ZERO;
 
+        final InvoicePayments invoicePayments = killBillClient.getInvoicePayment(paymentJson.getTargetInvoiceId());
+        Assert.assertEquals(invoicePayments.size(), 1);
+
         // Post and verify the refund
         final InvoicePaymentTransaction refund = new InvoicePaymentTransaction();
         refund.setPaymentId(paymentJson.getPaymentId());
@@ -106,6 +109,10 @@ public class TestInvoicePayment extends TestJaxrsBase {
 
         // Verify the invoice balance
         verifyInvoice(paymentJson, expectedInvoiceBalance);
+
+        final InvoicePayments invoicePaymentsAfterRefund = killBillClient.getInvoicePayment(paymentJson.getTargetInvoiceId());
+        Assert.assertEquals(invoicePaymentsAfterRefund.size(), 1);
+
     }
 
     @Test(groups = "slow", description = "Can create a partial refund with invoice adjustment")