killbill-memoizeit

Invoice payment work in progress

12/31/2011 3:52:45 AM

Details

diff --git a/api/src/main/java/com/ning/billing/payment/api/InvoicePayment.java b/api/src/main/java/com/ning/billing/payment/api/InvoicePayment.java
new file mode 100644
index 0000000..aaed6ff
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/payment/api/InvoicePayment.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2010-2011 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.payment.api;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.catalog.api.Currency;
+
+public class InvoicePayment {
+        private final UUID invoiceId;
+        private final UUID paymentAttemptId;
+        private final DateTime paymentAttemptDate;
+        private final BigDecimal amount;
+        private final Currency currency;
+
+        public InvoicePayment(UUID invoiceId, BigDecimal amount, Currency currency, UUID paymentAttemptId, DateTime paymentAttemptDate) {
+            this.invoiceId = invoiceId;
+            this.paymentAttemptId = paymentAttemptId;
+            this.paymentAttemptDate = paymentAttemptDate;
+            this.amount = amount;
+            this.currency = currency;
+        }
+
+        public UUID getInvoiceId() {
+            return invoiceId;
+        }
+
+        public UUID getPaymentAttemptId() {
+            return paymentAttemptId;
+        }
+
+        public DateTime getPaymentAttemptDate() {
+            return paymentAttemptDate;
+        }
+
+        public BigDecimal getAmount() {
+            return amount;
+        }
+
+        public Currency getCurrency() {
+            return currency;
+        }
+
+        @Override
+        public String toString() {
+            return "InvoicePayment [invoiceId=" + invoiceId + ", paymentAttemptId=" + paymentAttemptId + ", paymentAttemptDate=" + paymentAttemptDate + ", amount=" + amount + ", currency=" + currency + "]";
+        }
+
+}
diff --git a/api/src/main/java/com/ning/billing/payment/api/PaymentAttempt.java b/api/src/main/java/com/ning/billing/payment/api/PaymentAttempt.java
new file mode 100644
index 0000000..c4b6bfd
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/payment/api/PaymentAttempt.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2010-2011 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.payment.api;
+
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+
+import com.ning.billing.invoice.api.Invoice;
+
+public class PaymentAttempt {
+    private final UUID paymentAttemptId;
+    private final DateTime paymentAttemptDate;
+    private final Invoice invoice;
+
+    public PaymentAttempt(UUID paymentAttemptId, Invoice invoice) {
+        this.paymentAttemptId = paymentAttemptId;
+        this.paymentAttemptDate = new DateTime(DateTimeZone.UTC);
+        this.invoice = invoice;
+    }
+
+    public UUID getPaymentAttemptId() {
+        return paymentAttemptId;
+    }
+
+    public DateTime getPaymentAttemptDate() {
+        return paymentAttemptDate;
+    }
+
+    public Invoice getInvoice() {
+        return invoice;
+    }
+
+    @Override
+    public String toString() {
+        return "PaymentAttempt [paymentAttemptId=" + paymentAttemptId + ", paymentAttemptDate=" + paymentAttemptDate + ", invoice=" + invoice + "]";
+    }
+
+}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
index 3a60656..4155745 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
@@ -25,6 +25,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import org.joda.time.DateTime;
 
 import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.api.InvoicePayment;
 
 public class MockInvoicePaymentApi implements InvoicePaymentApi
 {
@@ -79,41 +80,4 @@ public class MockInvoicePaymentApi implements InvoicePaymentApi
         }
         invoicePayments.add(invoicePayment);
     }
-
-    private static class InvoicePayment {
-        private final UUID invoiceId;
-        private final UUID paymentAttemptId;
-        private final DateTime paymentAttemptDate;
-        private final BigDecimal amount;
-        private final Currency currency;
-
-        public InvoicePayment(UUID invoiceId, BigDecimal amount, Currency currency, UUID paymentAttemptId, DateTime paymentAttemptDate) {
-            this.invoiceId = invoiceId;
-            this.paymentAttemptId = paymentAttemptId;
-            this.paymentAttemptDate = paymentAttemptDate;
-            this.amount = amount;
-            this.currency = currency;
-        }
-
-        public UUID getInvoiceId() {
-            return invoiceId;
-        }
-
-        public UUID getPaymentAttemptId() {
-            return paymentAttemptId;
-        }
-
-        public DateTime getPaymentAttemptDate() {
-            return paymentAttemptDate;
-        }
-
-        public BigDecimal getAmount() {
-            return amount;
-        }
-
-        public Currency getCurrency() {
-            return currency;
-        }
-
-    }
 }
diff --git a/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java b/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
index db5abcf..7fd23ad 100644
--- a/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
@@ -27,6 +27,7 @@ import com.ning.billing.invoice.api.Invoice;
 import com.ning.billing.invoice.api.InvoiceCreationNotification;
 import com.ning.billing.invoice.api.InvoicePaymentApi;
 import com.ning.billing.payment.api.Either;
+import com.ning.billing.payment.api.PaymentAttempt;
 import com.ning.billing.payment.api.PaymentError;
 import com.ning.billing.payment.api.PaymentInfo;
 import com.ning.billing.payment.provider.PaymentProviderPlugin;
diff --git a/payment/src/test/java/com/ning/billing/payment/api/TestMockPaymentApi.java b/payment/src/test/java/com/ning/billing/payment/api/TestMockPaymentApi.java
new file mode 100644
index 0000000..dc7a74b
--- /dev/null
+++ b/payment/src/test/java/com/ning/billing/payment/api/TestMockPaymentApi.java
@@ -0,0 +1,12 @@
+package com.ning.billing.payment.api;
+
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import com.ning.billing.payment.setup.PaymentTestModule;
+
+@Guice(modules = PaymentTestModule.class)
+@Test(groups = "fast")
+public class TestMockPaymentApi extends TestPaymentApi {
+
+}
diff --git a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
new file mode 100644
index 0000000..4c22a3f
--- /dev/null
+++ b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
@@ -0,0 +1,84 @@
+package com.ning.billing.payment.api;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.joda.time.DateTime;
+import org.testng.annotations.Test;
+
+import com.google.inject.Inject;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.MockAccountUserApi;
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.MockInvoicePaymentApi;
+import com.ning.billing.invoice.model.DefaultInvoice;
+import com.ning.billing.invoice.model.DefaultInvoiceItem;
+
+public abstract class TestPaymentApi {
+    @Inject
+    protected MockInvoicePaymentApi invoicePaymentApi;
+    @Inject
+    protected MockAccountUserApi accountUserApi;
+    @Inject
+    protected PaymentApi paymentApi;
+
+    protected Account createAccount() {
+        String name = "First" + RandomStringUtils.random(5) + " " + "Last" + RandomStringUtils.random(5);
+        String externalKey = "12345";
+        return accountUserApi.createAccount(UUID.randomUUID(),
+                                            externalKey,
+                                            "user@example.com",
+                                            name,
+                                            name.length(),
+                                            "123-456-7890",
+                                            Currency.USD,
+                                            1,
+                                            null,
+                                            BigDecimal.ZERO);
+    }
+
+    protected Invoice createInvoice(Account account,
+                                    DateTime targetDate,
+                                    Currency currency) {
+        Invoice invoice = new DefaultInvoice(account.getId(), targetDate, currency);
+
+        invoicePaymentApi.add(invoice);
+        return invoice;
+    }
+
+    @Test
+    public void testCreatePayment() {
+        final DateTime now = new DateTime();
+        final Account account = createAccount();
+        final Invoice invoice = createInvoice(account, now, Currency.USD);
+        final BigDecimal amount = new BigDecimal("10.00");
+        final UUID subscriptionId = UUID.randomUUID();
+
+        invoice.add(new DefaultInvoiceItem(invoice.getId(),
+                                           subscriptionId,
+                                           now,
+                                           now.plusMonths(1),
+                                           "Test",
+                                           amount,
+                                           new BigDecimal("1.0"),
+                                           Currency.USD));
+
+        List<Either<PaymentError, PaymentInfo>> results = paymentApi.createPayment(account.getExternalKey(), Arrays.asList(invoice.getId().toString()));
+
+        assertEquals(results.size(), 1);
+        assertTrue(results.get(0).isRight());
+
+        PaymentInfo paymentInfo = results.get(0).getRight();
+
+        assertNotNull(paymentInfo.getId());
+        assertEquals(paymentInfo.getAmount().doubleValue(), amount.doubleValue());
+    }
+}