killbill-aplcache
Details
diff --git a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
index 52aa9db..4b6027e 100644
--- a/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
+++ b/account/src/test/java/com/ning/billing/account/api/MockAccountUserApi.java
@@ -21,9 +21,25 @@ import java.util.List;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
+import com.ning.billing.catalog.api.Currency;
+
public class MockAccountUserApi implements AccountUserApi {
private final CopyOnWriteArrayList<Account> accounts = new CopyOnWriteArrayList<Account>();
+ public Account createAccount(UUID id,
+ String externalKey,
+ String email,
+ String name,
+ int firstNameLength,
+ String phone,
+ Currency currency,
+ int billCycleDay,
+ String paymentProviderName) {
+ Account result = new DefaultAccount(id, externalKey, email, name, firstNameLength, phone, currency, billCycleDay, paymentProviderName);
+ accounts.add(result);
+ return result;
+ }
+
@Override
public Account createAccount(AccountData data) {
Account result = new DefaultAccount(data);
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
new file mode 100644
index 0000000..4899057
--- /dev/null
+++ b/invoice/src/test/java/com/ning/billing/invoice/api/MockInvoicePaymentApi.java
@@ -0,0 +1,45 @@
+package com.ning.billing.invoice.api;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import com.ning.billing.catalog.api.Currency;
+
+public class MockInvoicePaymentApi implements InvoicePaymentApi
+{
+ private final CopyOnWriteArrayList<Invoice> invoices = new CopyOnWriteArrayList<Invoice>();
+
+ public void add(Invoice invoice) {
+ invoices.add(invoice);
+ }
+
+ @Override
+ public void paymentSuccessful(UUID invoiceId, BigDecimal amount, Currency currency, UUID paymentId) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<Invoice> getInvoicesByAccount(UUID accountId) {
+ ArrayList<Invoice> result = new ArrayList<Invoice>();
+
+ for (Invoice invoice : invoices) {
+ if (accountId.equals(invoice.getAccountId())) {
+ result.add(invoice);
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public Invoice getInvoice(UUID invoiceId) {
+ for (Invoice invoice : invoices) {
+ if (invoiceId.equals(invoice.getId())) {
+ return invoice;
+ }
+ }
+ return null;
+ }
+}
payment/pom.xml 8(+6 -2)
diff --git a/payment/pom.xml b/payment/pom.xml
index e8e4e90..5e8f86c 100644
--- a/payment/pom.xml
+++ b/payment/pom.xml
@@ -85,7 +85,11 @@
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.ning.billing</groupId>
+ <artifactId>killbill-invoice</artifactId>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
</dependencies>
- <build>
- </build>
</project>
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 54ca415..6353a1b 100644
--- a/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/RequestProcessor.java
@@ -21,6 +21,8 @@ import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountUserApi;
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.PaymentError;
import com.ning.billing.payment.provider.PaymentProviderPlugin;
@@ -30,38 +32,57 @@ import com.ning.billing.util.eventbus.EventBus.EventBusException;
public class RequestProcessor {
public static final String PAYMENT_PROVIDER_KEY = "paymentProvider";
+ private final InvoicePaymentApi invoiceApi;
private final AccountUserApi accountUserApi;
private final PaymentProviderPluginRegistry pluginRegistry;
private final EventBus eventBus;
@Inject
public RequestProcessor(AccountUserApi accountUserApi,
+ InvoicePaymentApi invoiceApi,
PaymentProviderPluginRegistry pluginRegistry,
EventBus eventBus) {
+ this.invoiceApi = invoiceApi;
this.accountUserApi = accountUserApi;
this.pluginRegistry = pluginRegistry;
this.eventBus = eventBus;
}
@Subscribe
- public void receiveInvoice(Invoice invoice) throws EventBusException {
- final Account account = accountUserApi.getAccountById(invoice.getAccountId());
- final String paymentProviderName = account.getFieldValue(PAYMENT_PROVIDER_KEY);
- final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);
+ public void receiveInvoice(InvoiceCreationNotification event) throws EventBusException {
+ final Invoice invoice = invoiceApi.getInvoice(event.getInvoiceId());
+ if (invoice == null) {
+ // TODO: log a warning ?
+ }
+ else {
+ final Account account = accountUserApi.getAccountById(event.getAccountId());
+ if (account == null) {
+ // TODO: log a warning ?
+ }
+ else {
+ final String paymentProviderName = account.getFieldValue(PAYMENT_PROVIDER_KEY);
+ final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);
- Either<PaymentError, PaymentInfo> result = plugin.processInvoice(account, invoice);
+ Either<PaymentError, PaymentInfo> result = plugin.processInvoice(account, invoice);
- eventBus.post(result.isLeft() ? result.getLeft() : result.getRight());
+ eventBus.post(result.isLeft() ? result.getLeft() : result.getRight());
+ }
+ }
}
@Subscribe
public void receivePaymentInfoRequest(PaymentInfoRequest paymentInfoRequest) throws EventBusException {
final Account account = accountUserApi.getAccountById(paymentInfoRequest.getAccountId());
- final String paymentProviderName = account.getFieldValue(PAYMENT_PROVIDER_KEY);
- final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);
+ if (account == null) {
+ // TODO: log a warning ?
+ }
+ else {
+ final String paymentProviderName = account.getFieldValue(PAYMENT_PROVIDER_KEY);
+ final PaymentProviderPlugin plugin = pluginRegistry.getPlugin(paymentProviderName);
- Either<PaymentError, PaymentInfo> result = plugin.getPaymentInfo(paymentInfoRequest.getPaymentId());
+ Either<PaymentError, PaymentInfo> result = plugin.getPaymentInfo(paymentInfoRequest.getPaymentId());
- eventBus.post(result.isLeft() ? result.getLeft() : result.getRight());
+ eventBus.post(result.isLeft() ? result.getLeft() : result.getRight());
+ }
}
}
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 4b96dce..87226bf 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
@@ -21,6 +21,10 @@ import org.apache.commons.collections.MapUtils;
import com.google.common.collect.ImmutableMap;
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.account.api.MockAccountUserApi;
+import com.ning.billing.invoice.api.InvoicePaymentApi;
+import com.ning.billing.invoice.api.MockInvoicePaymentApi;
+import com.ning.billing.invoice.model.DefaultInvoiceGenerator;
+import com.ning.billing.invoice.model.InvoiceGenerator;
import com.ning.billing.payment.provider.MockPaymentProviderPluginModule;
import com.ning.billing.util.eventbus.EventBus;
import com.ning.billing.util.eventbus.MemoryEventBus;
@@ -39,6 +43,10 @@ public class PaymentTestModule extends PaymentModule {
protected void configure() {
super.configure();
bind(EventBus.class).to(MemoryEventBus.class).asEagerSingleton();
- bind(AccountUserApi.class).to(MockAccountUserApi.class).asEagerSingleton();
+ bind(AccountUserApi.class).to(MockAccountUserApi.class);
+ bind(MockAccountUserApi.class).asEagerSingleton();
+ bind(InvoiceGenerator.class).to(DefaultInvoiceGenerator.class).asEagerSingleton();
+ bind(InvoicePaymentApi.class).to(MockInvoicePaymentApi.class);
+ bind(MockInvoicePaymentApi.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 3c2e658..e14235e 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestPaymentProvider.java
@@ -36,8 +36,7 @@ import org.testng.annotations.Test;
import com.google.inject.Inject;
import com.ning.billing.account.api.Account;
-import com.ning.billing.account.api.AccountUserApi;
-import com.ning.billing.account.api.DefaultAccount;
+import com.ning.billing.account.api.MockAccountUserApi;
import com.ning.billing.catalog.api.BillingPeriod;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.entitlement.api.billing.BillingEvent;
@@ -45,7 +44,9 @@ import com.ning.billing.entitlement.api.billing.BillingModeType;
import com.ning.billing.invoice.api.BillingEventSet;
import com.ning.billing.invoice.api.DefaultBillingEvent;
import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.model.DefaultInvoiceGenerator;
+import com.ning.billing.invoice.api.InvoiceCreationNotification;
+import com.ning.billing.invoice.api.InvoiceItem;
+import com.ning.billing.invoice.api.MockInvoicePaymentApi;
import com.ning.billing.invoice.model.InvoiceGenerator;
import com.ning.billing.invoice.model.InvoiceItemList;
import com.ning.billing.invoice.tests.InternationalPriceMock;
@@ -61,9 +62,11 @@ public class TestPaymentProvider {
@Inject
private RequestProcessor invoiceProcessor;
@Inject
- private AccountUserApi accountUserApi;
+ private MockAccountUserApi accountUserApi;
@Inject
- private Invoice invoiceApi;
+ private InvoiceGenerator generator;
+ @Inject
+ private MockInvoicePaymentApi invoiceApi;
private MockPaymentInfoReceiver paymentInfoReceiver;
@@ -81,19 +84,67 @@ public class TestPaymentProvider {
eventBus.stop();
}
- protected Account getTestAccount() {
+ protected Account createAccount() {
String name = "First" + RandomStringUtils.random(5) + " " + "Last" + RandomStringUtils.random(5);
String externalKey = "12345";
-// return accountUserApi.createAccount(new DefaultAccount(UUID.randomUUID(), externalKey, "user@example.com", name, name.length(), "123-456-7890", Currency.USD, 1, null));
- return new DefaultAccount(UUID.randomUUID(), externalKey, "user@example.com", name, name.length(), "123-456-7890", Currency.USD, 1, null);
+ return accountUserApi.createAccount(UUID.randomUUID(), externalKey, "user@example.com", name, name.length(), "123-456-7890", Currency.USD, 1, null);
+ }
+
+ protected Invoice createInvoice(Account account,
+ List<BillingEvent> events,
+ List<InvoiceItem> items,
+ DateTime targetDate,
+ Currency currency) {
+ BillingEventSet billingEvents = null;
+ InvoiceItemList invoiceItems = null;
+
+ if (events != null) {
+ billingEvents = new BillingEventSet();
+ billingEvents.addAll(events);
+ }
+ if (items != null) {
+ invoiceItems = new InvoiceItemList();
+ invoiceItems.addAll(items);
+ }
+
+ Invoice invoice = generator.generateInvoice(account.getId(), billingEvents, invoiceItems, targetDate, currency);
+
+ invoiceApi.add(invoice);
+ return invoice;
+ }
+
+ protected InvoiceCreationNotification createNotificationFor(final Invoice invoice) {
+ return new InvoiceCreationNotification() {
+ @Override
+ public UUID getInvoiceId() {
+ return invoice.getId();
+ }
+
+ @Override
+ public DateTime getInvoiceCreationDate() {
+ return invoice.getInvoiceDate();
+ }
+
+ @Override
+ public Currency getCurrency() {
+ return invoice.getCurrency();
+ }
+
+ @Override
+ public BigDecimal getAmountOwed() {
+ return invoice.getAmountOutstanding();
+ }
+
+ @Override
+ public UUID getAccountId() {
+ return invoice.getAccountId();
+ }
+ };
}
@Test
public void testSimpleInvoice() throws Exception {
- InvoiceGenerator generator = new DefaultInvoiceGenerator();
-
- final Account account = getTestAccount();
- final UUID invoiceUuid = UUID.randomUUID();
+ final Account account = createAccount();
final DateTime now = new DateTime();
BillingEventSet events = new BillingEventSet();
@@ -107,16 +158,9 @@ public class TestPaymentProvider {
1, BillingModeType.IN_ADVANCE);
events.add(event);
- InvoiceItemList existingInvoiceItems = new InvoiceItemList();
-
- UUID accountId = UUID.randomUUID();
-
- Invoice invoice = generator.generateInvoice(accountId, events, existingInvoiceItems, now, Currency.USD);
- existingInvoiceItems.addAll(invoice.getItems());
-
-// DefaultInvoice(account.getId(), lineItems, Currency.USD);
+ final Invoice invoice = createInvoice(account, null, null, new DateTime(), Currency.USD);
- eventBus.post(invoice);
+ eventBus.post(createNotificationFor(invoice));
await().atMost(1, MINUTES).until(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
pom.xml 6(+6 -0)
diff --git a/pom.xml b/pom.xml
index a3d4b5b..fd310f6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,12 @@
</dependency>
<dependency>
<groupId>com.ning.billing</groupId>
+ <artifactId>killbill-invoice</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ </dependency>
+ <dependency>
+ <groupId>com.ning.billing</groupId>
<artifactId>killbill-util</artifactId>
<version>${project.version}</version>
<type>test-jar</type>