killbill-memoizeit

server: add more tests for direct payment APIs Signed-off-by:

4/25/2014 3:31:21 PM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/DirectTransactionJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/DirectTransactionJson.java
index 29df0bf..d170df1 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/DirectTransactionJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/DirectTransactionJson.java
@@ -75,9 +75,9 @@ public class DirectTransactionJson extends JsonBase {
              directPaymentId.toString(),
              dpt.getTransactionType().toString(),
              dpt.getAmount(),
-             dpt.getCurrency().toString(),
+             dpt.getCurrency() != null ? dpt.getCurrency().toString() : null,
              dpt.getEffectiveDate(),
-             dpt.getPaymentStatus().toString(),
+             dpt.getPaymentStatus() != null ? dpt.getPaymentStatus().toString() : null,
              1,
              externalKey,
              dpt.getGatewayErrorCode(),
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
index 665ea81..a76bf2c 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
@@ -44,7 +44,7 @@ import org.killbill.billing.account.api.AccountApiException;
 import org.killbill.billing.account.api.AccountUserApi;
 import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.jaxrs.json.DirectPaymentJson;
-import org.killbill.billing.jaxrs.json.PaymentJson;
+import org.killbill.billing.jaxrs.json.DirectTransactionJson;
 import org.killbill.billing.jaxrs.util.Context;
 import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
 import org.killbill.billing.payment.api.DirectPayment;
@@ -187,7 +187,7 @@ public class DirectPaymentResource extends JaxRsResourceBase {
     @Path("/{directPaymentId:" + UUID_PATTERN + "}/")
     @Consumes(APPLICATION_JSON)
     @Produces(APPLICATION_JSON)
-    public Response captureAuthorization(final PaymentJson json,
+    public Response captureAuthorization(final DirectTransactionJson json,
                                          @PathParam("directPaymentId") final String directPaymentIdStr,
                                          @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
                                          @HeaderParam(HDR_CREATED_BY) final String createdBy,
@@ -211,7 +211,7 @@ public class DirectPaymentResource extends JaxRsResourceBase {
     @Path("/{directPaymentId:" + UUID_PATTERN + "}/" + CREDITS)
     @Consumes(APPLICATION_JSON)
     @Produces(APPLICATION_JSON)
-    public Response creditPayment(final PaymentJson json,
+    public Response creditPayment(final DirectTransactionJson json,
                                   @PathParam("directPaymentId") final String directPaymentIdStr,
                                   @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
                                   @HeaderParam(HDR_CREATED_BY) final String createdBy,
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
index 615e41d..7c918d4 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
@@ -58,7 +58,6 @@ import org.killbill.billing.jaxrs.json.PaymentJson;
 import org.killbill.billing.jaxrs.json.RefundJson;
 import org.killbill.billing.jaxrs.util.Context;
 import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
-import org.killbill.billing.payment.api.DirectPaymentApi;
 import org.killbill.billing.payment.api.Payment;
 import org.killbill.billing.payment.api.PaymentApi;
 import org.killbill.billing.payment.api.PaymentApiException;
@@ -97,7 +96,6 @@ public class PaymentResource extends JaxRsResourceBase {
     public PaymentResource(final AccountUserApi accountUserApi,
                            final PaymentApi paymentApi,
                            final InvoicePaymentApi invoicePaymentApi,
-                           final DirectPaymentApi directPaymentApi,
                            final JaxrsUriBuilder uriBuilder,
                            final TagUserApi tagUserApi,
                            final CustomFieldUserApi customFieldUserApi,

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index 7c07bcd..149d4c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
     <parent>
         <artifactId>killbill-oss-parent</artifactId>
         <groupId>org.kill-bill.billing</groupId>
-        <version>0.7.5</version>
+        <version>0.7.7</version>
     </parent>
     <artifactId>killbill</artifactId>
     <version>0.11.3-SNAPSHOT</version>
diff --git a/server/src/test/java/org/killbill/billing/jaxrs/TestDirectPayment.java b/server/src/test/java/org/killbill/billing/jaxrs/TestDirectPayment.java
index dab5185..681aaa2 100644
--- a/server/src/test/java/org/killbill/billing/jaxrs/TestDirectPayment.java
+++ b/server/src/test/java/org/killbill/billing/jaxrs/TestDirectPayment.java
@@ -17,45 +17,107 @@
 package org.killbill.billing.jaxrs;
 
 import java.math.BigDecimal;
+import java.util.UUID;
 
+import javax.annotation.Nullable;
+
+import org.killbill.billing.client.KillBillClientException;
 import org.killbill.billing.client.model.Account;
 import org.killbill.billing.client.model.DirectPayment;
+import org.killbill.billing.client.model.DirectPayments;
 import org.killbill.billing.client.model.DirectTransaction;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import static org.testng.Assert.assertEquals;
-
 public class TestDirectPayment extends TestJaxrsBase {
 
     @Test(groups = "slow")
-    public void testRetrievePayment() throws Exception {
-
+    public void testCreateRetrievePayment() throws Exception {
         final Account account = createAccountWithDefaultPaymentMethod();
 
-        final DirectTransaction transaction = new DirectTransaction();
-        transaction.setAmount(BigDecimal.TEN);
-        transaction.setCurrency(account.getCurrency());
-        transaction.setExternalKey("foo");
-        transaction.setTransactionType("AUTHORIZE");
-
-        final DirectPayment retrievedPaymentJson = killBillClient.createDirectPayment(account.getAccountId(), transaction, createdBy, reason, comment);
-
-        assertEquals(retrievedPaymentJson.getAccountId(), account.getAccountId());
-        Assert.assertNotNull(retrievedPaymentJson.getDirectPaymentId());
-        Assert.assertNotNull(retrievedPaymentJson.getPaymentNumber());
-        assertEquals(retrievedPaymentJson.getAuthAmount().compareTo(BigDecimal.TEN), 0);
-        assertEquals(retrievedPaymentJson.getCapturedAmount().compareTo(BigDecimal.ZERO), 0);
-        assertEquals(retrievedPaymentJson.getRefundedAmount().compareTo(BigDecimal.ZERO), 0);
-        assertEquals(retrievedPaymentJson.getCurrency(), account.getCurrency());
-        assertEquals(retrievedPaymentJson.getPaymentMethodId(), account.getPaymentMethodId());
-        assertEquals(retrievedPaymentJson.getTransactions().size(), 1);
-
-        assertEquals(retrievedPaymentJson.getTransactions().get(0).getDirectPaymentId(), retrievedPaymentJson.getDirectPaymentId());
-        Assert.assertNotNull(retrievedPaymentJson.getTransactions().get(0).getDirectTransactionId());
-        assertEquals(retrievedPaymentJson.getTransactions().get(0).getTransactionType(), "AUTHORIZE");
-        assertEquals(retrievedPaymentJson.getTransactions().get(0).getStatus(), "SUCCESS");
-        assertEquals(retrievedPaymentJson.getTransactions().get(0).getAmount().compareTo(BigDecimal.TEN), 0);
-        assertEquals(retrievedPaymentJson.getTransactions().get(0).getExternalKey(), "foo");
+        // Authorization
+        final DirectTransaction authTransaction = new DirectTransaction();
+        authTransaction.setAmount(BigDecimal.TEN);
+        authTransaction.setCurrency(account.getCurrency());
+        authTransaction.setExternalKey("foo");
+        authTransaction.setTransactionType("AUTHORIZE");
+        final DirectPayment authDirectPayment = killBillClient.createDirectPayment(account.getAccountId(), authTransaction, createdBy, reason, comment);
+        verifyDirectPayment(account, authDirectPayment, BigDecimal.TEN, BigDecimal.ZERO, BigDecimal.ZERO, 1);
+
+        // Capture 1
+        final DirectTransaction captureTransaction = new DirectTransaction();
+        captureTransaction.setDirectPaymentId(authDirectPayment.getDirectPaymentId());
+        captureTransaction.setAmount(BigDecimal.ONE);
+        captureTransaction.setCurrency(account.getCurrency());
+        final DirectPayment capturedDirectPayment1 = killBillClient.captureAuthorization(captureTransaction, createdBy, reason, comment);
+        verifyDirectPayment(account, capturedDirectPayment1, BigDecimal.TEN, BigDecimal.ONE, BigDecimal.ZERO, 2);
+        verifyDirectPaymentTransaction(authDirectPayment.getDirectPaymentId(), capturedDirectPayment1.getTransactions().get(1),
+                                       account, captureTransaction.getAmount(), "CAPTURE");
+
+        // Capture 2
+        final DirectPayment capturedDirectPayment2 = killBillClient.captureAuthorization(captureTransaction, createdBy, reason, comment);
+        verifyDirectPayment(account, capturedDirectPayment2, BigDecimal.TEN, new BigDecimal("2"), BigDecimal.ZERO, 3);
+        verifyDirectPaymentTransaction(authDirectPayment.getDirectPaymentId(), capturedDirectPayment2.getTransactions().get(2),
+                                       account, captureTransaction.getAmount(), "CAPTURE");
+
+        // Credit
+        final DirectTransaction creditTransaction = new DirectTransaction();
+        creditTransaction.setDirectPaymentId(authDirectPayment.getDirectPaymentId());
+        creditTransaction.setAmount(new BigDecimal("223.12"));
+        creditTransaction.setCurrency(account.getCurrency());
+        final DirectPayment creditDirectPayment = killBillClient.creditPayment(creditTransaction, createdBy, reason, comment);
+        verifyDirectPayment(account, creditDirectPayment, BigDecimal.TEN, new BigDecimal("2"), new BigDecimal("223.12"), 4);
+        verifyDirectPaymentTransaction(authDirectPayment.getDirectPaymentId(), creditDirectPayment.getTransactions().get(3),
+                                       account, creditTransaction.getAmount(), "CREDIT");
+
+        // Void
+        final DirectPayment voidDirectPayment = killBillClient.voidPayment(authDirectPayment.getDirectPaymentId(), createdBy, reason, comment);
+        verifyDirectPayment(account, voidDirectPayment, BigDecimal.TEN, new BigDecimal("2"), new BigDecimal("223.12"), 5);
+        verifyDirectPaymentTransaction(authDirectPayment.getDirectPaymentId(), voidDirectPayment.getTransactions().get(4),
+                                       account, null, "VOID");
+    }
+
+    private void verifyDirectPayment(final Account account, final DirectPayment directPayment,
+                                     final BigDecimal authAmount, final BigDecimal capturedAmount,
+                                     final BigDecimal refundedAmount, final int nbTransactions) throws KillBillClientException {
+        Assert.assertEquals(directPayment.getAccountId(), account.getAccountId());
+        Assert.assertNotNull(directPayment.getDirectPaymentId());
+        Assert.assertNotNull(directPayment.getPaymentNumber());
+        Assert.assertEquals(directPayment.getAuthAmount().compareTo(authAmount), 0);
+        Assert.assertEquals(directPayment.getCapturedAmount().compareTo(capturedAmount), 0);
+        Assert.assertEquals(directPayment.getRefundedAmount().compareTo(refundedAmount), 0);
+        Assert.assertEquals(directPayment.getCurrency(), account.getCurrency());
+        Assert.assertEquals(directPayment.getPaymentMethodId(), account.getPaymentMethodId());
+        Assert.assertEquals(directPayment.getTransactions().size(), nbTransactions);
+
+        verifyDirectPaymentTransaction(directPayment.getDirectPaymentId(), directPayment.getTransactions().get(0),
+                                       account, authAmount, "AUTHORIZE");
+
+        final DirectPayments directPayments = killBillClient.getDirectPayments();
+        Assert.assertEquals(directPayments.size(), 1);
+        Assert.assertEquals(directPayments.get(0), directPayment);
+
+        final DirectPayment retrievedDirectPayment = killBillClient.getDirectPayment(directPayment.getDirectPaymentId());
+        Assert.assertEquals(retrievedDirectPayment, directPayment);
+
+        final DirectPayments directPaymentsForAccount = killBillClient.getDirectPaymentsForAccount(account.getAccountId());
+        Assert.assertEquals(directPaymentsForAccount.size(), 1);
+        Assert.assertEquals(directPaymentsForAccount.get(0), directPayment);
+    }
+
+    private void verifyDirectPaymentTransaction(final UUID directPaymentId, final DirectTransaction directTransaction,
+                                                final Account account, @Nullable final BigDecimal amount, final String transactionType) {
+        Assert.assertEquals(directTransaction.getDirectPaymentId(), directPaymentId);
+        Assert.assertNotNull(directTransaction.getDirectTransactionId());
+        Assert.assertEquals(directTransaction.getTransactionType(), transactionType);
+        Assert.assertEquals(directTransaction.getStatus(), "SUCCESS");
+        if (amount == null) {
+            Assert.assertNull(directTransaction.getAmount());
+            Assert.assertNull(directTransaction.getCurrency());
+        } else {
+            Assert.assertEquals(directTransaction.getAmount().compareTo(amount), 0);
+            Assert.assertEquals(directTransaction.getCurrency(), account.getCurrency());
+        }
+        Assert.assertEquals(directTransaction.getExternalKey(), "foo");
     }
 }