killbill-memoizeit

Details

payment/pom.xml 6(+6 -0)

diff --git a/payment/pom.xml b/payment/pom.xml
index b5743e2..73cf60a 100644
--- a/payment/pom.xml
+++ b/payment/pom.xml
@@ -70,6 +70,12 @@
             <artifactId>killbill-util</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.ning.billing</groupId>
+            <artifactId>killbill-account</artifactId>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <build>
     </build>
diff --git a/payment/src/main/java/com/ning/billing/payment/InvoiceProcessor.java b/payment/src/main/java/com/ning/billing/payment/InvoiceProcessor.java
index 946ac83..39ee5d0 100644
--- a/payment/src/main/java/com/ning/billing/payment/InvoiceProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/InvoiceProcessor.java
@@ -18,25 +18,27 @@ package com.ning.billing.payment;
 
 import com.google.common.eventbus.Subscribe;
 import com.google.inject.Inject;
-import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.IAccount;
+import com.ning.billing.account.api.IAccountUserApi;
 import com.ning.billing.invoice.model.Invoice;
 import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
 import com.ning.billing.util.eventbus.IEventBus.EventBusException;
 
 public class InvoiceProcessor {
+    public static final String PAYMENT_PROVIDER_KEY = "paymentProvider";
+    private final IAccountUserApi accountUserApi;
     private final PaymentProviderPluginRegistry pluginRegistry;
 
     @Inject
-    public InvoiceProcessor(PaymentProviderPluginRegistry pluginRegistry) {
+    public InvoiceProcessor(IAccountUserApi accountUserApi, PaymentProviderPluginRegistry pluginRegistry) {
+        this.accountUserApi = accountUserApi;
         this.pluginRegistry = pluginRegistry;
     }
 
     @Subscribe
     public void receiveInvoice(Invoice invoice) throws EventBusException {
-        // TODO: retrieve account
-        final Account account = null;
-        // TODO: get provider name from account
-        final String paymentProviderName = null;
+        final IAccount account = accountUserApi.getAccountFromId(invoice.getAccountId());
+        final String paymentProviderName = account.getFieldValue(PAYMENT_PROVIDER_KEY);
 
         pluginRegistry.getPlugin(paymentProviderName).processInvoice(account, invoice);
     }
diff --git a/payment/src/main/java/com/ning/billing/payment/PaymentInfo.java b/payment/src/main/java/com/ning/billing/payment/PaymentInfo.java
index a75e3be..1658af9 100644
--- a/payment/src/main/java/com/ning/billing/payment/PaymentInfo.java
+++ b/payment/src/main/java/com/ning/billing/payment/PaymentInfo.java
@@ -372,4 +372,10 @@ public class PaymentInfo implements IEventBusType {
             return false;
         return true;
     }
+
+    @Override
+    public String toString() {
+        return "PaymentInfo [id=" + id + ", amount=" + amount + ", appliedCreditBalanceAmount=" + appliedCreditBalanceAmount + ", bankIdentificationNumber=" + bankIdentificationNumber + ", createdDate=" + createdDate + ", effectiveDate=" + effectiveDate + ", paymentNumber=" + paymentNumber + ", referenceId=" + referenceId + ", refundAmount=" + refundAmount + ", secondPaymentReferenceId=" + secondPaymentReferenceId + ", status=" + status + ", type=" + type + ", updatedDate=" + updatedDate + "]";
+    }
+
 }
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPlugin.java b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPlugin.java
index 98d2677..25b7bcc 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPlugin.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPlugin.java
@@ -16,9 +16,9 @@
 
 package com.ning.billing.payment.provider;
 
-import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.IAccount;
 import com.ning.billing.invoice.model.Invoice;
 
 public interface PaymentProviderPlugin {
-    public void processInvoice(Account account, Invoice invoice);
+    public void processInvoice(IAccount account, Invoice invoice);
 }
diff --git a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
index d9b59d7..557e42c 100644
--- a/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
+++ b/payment/src/test/java/com/ning/billing/payment/provider/MockPaymentProviderPlugin.java
@@ -19,7 +19,7 @@ package com.ning.billing.payment.provider;
 import java.util.UUID;
 
 import com.google.inject.Inject;
-import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.IAccount;
 import com.ning.billing.invoice.model.Invoice;
 import com.ning.billing.payment.PaymentInfo;
 import com.ning.billing.util.eventbus.IEventBus;
@@ -37,7 +37,7 @@ public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
     }
 
     @Override
-    public void processInvoice(Account account, Invoice invoice) {
+    public void processInvoice(IAccount account, Invoice invoice) {
         try {
             eventBus.post(new PaymentInfo.Builder().setId(UUID.randomUUID()).build());
         }
diff --git a/payment/src/test/java/com/ning/billing/payment/setup/PaymentTestModule.java b/payment/src/test/java/com/ning/billing/payment/setup/PaymentTestModule.java
index 6c9317f..2aa3c61 100644
--- a/payment/src/test/java/com/ning/billing/payment/setup/PaymentTestModule.java
+++ b/payment/src/test/java/com/ning/billing/payment/setup/PaymentTestModule.java
@@ -19,6 +19,8 @@ package com.ning.billing.payment.setup;
 import org.apache.commons.collections.MapUtils;
 
 import com.google.common.collect.ImmutableMap;
+import com.ning.billing.account.api.IAccountUserApi;
+import com.ning.billing.account.api.MockAccountUserApi;
 import com.ning.billing.payment.provider.MockPaymentProviderPlugin;
 import com.ning.billing.util.eventbus.IEventBus;
 import com.ning.billing.util.eventbus.MemoryEventBus;
@@ -37,5 +39,6 @@ public class PaymentTestModule extends PaymentModule {
     protected void configure() {
         super.configure();
         bind(IEventBus.class).to(MemoryEventBus.class).asEagerSingleton();
+        bind(IAccountUserApi.class).to(MockAccountUserApi.class).asEagerSingleton();
     }
 }
diff --git a/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java b/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java
index 628da7c..3453a0c 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java
@@ -37,6 +37,9 @@ import org.testng.annotations.Test;
 
 import com.google.common.eventbus.Subscribe;
 import com.google.inject.Inject;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.account.api.IAccount;
+import com.ning.billing.account.api.IAccountUserApi;
 import com.ning.billing.catalog.api.Currency;
 import com.ning.billing.invoice.model.Invoice;
 import com.ning.billing.invoice.model.InvoiceItem;
@@ -71,9 +74,11 @@ public class TestPaymentProvider {
 
     @Inject
     private IEventBus eventBus;
-    private MockPaymentProcessor mockPaymentProcessor;
     @Inject
     private InvoiceProcessor invoiceProcessor;
+    @Inject
+    private IAccountUserApi accountUserApi;
+    private MockPaymentProcessor mockPaymentProcessor;
 
     @BeforeMethod(alwaysRun = true)
     public void setUp() throws EventBusException {
@@ -89,8 +94,13 @@ public class TestPaymentProvider {
         eventBus.stop();
     }
 
+    protected IAccount getTestAccount() {
+        return accountUserApi.createAccount(new Account());
+    }
+
     @Test
     public void testSimpleInvoice() throws Exception {
+        final IAccount account = getTestAccount();
         final UUID subscriptionUuid = UUID.randomUUID();
         final UUID invoiceUuid = UUID.randomUUID();
         final DateTime now = new DateTime();
@@ -103,7 +113,7 @@ public class TestPaymentProvider {
                                                      new BigDecimal("1"),
                                                      Currency.USD);
         final List<InvoiceItem> lineItems = Arrays.asList(lineItem);
-        final Invoice invoice = new Invoice(invoiceUuid, lineItems, Currency.USD);
+        final Invoice invoice = new Invoice(account.getId(), lineItems, Currency.USD);
 
         eventBus.post(invoice);
         await().atMost(1, MINUTES).until(new Callable<Boolean>() {