Details
diff --git a/account/src/main/java/com/ning/billing/account/glue/AccountModule.java b/account/src/main/java/com/ning/billing/account/glue/AccountModule.java
index 275d4c9..0621945 100644
--- a/account/src/main/java/com/ning/billing/account/glue/AccountModule.java
+++ b/account/src/main/java/com/ning/billing/account/glue/AccountModule.java
@@ -16,13 +16,13 @@
package com.ning.billing.account.glue;
+import org.skife.config.ConfigurationObjectFactory;
+
import com.google.inject.AbstractModule;
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.account.api.user.DefaultAccountUserApi;
import com.ning.billing.account.dao.AccountDao;
-import com.ning.billing.account.dao.AccountSqlDao;
import com.ning.billing.account.dao.DefaultAccountDao;
-import org.skife.config.ConfigurationObjectFactory;
public class AccountModule extends AbstractModule {
@@ -34,11 +34,11 @@ public class AccountModule extends AbstractModule {
private void installAccountCore() {
}
- private void installAccountDao() {
+ protected void installAccountDao() {
bind(AccountDao.class).to(DefaultAccountDao.class).asEagerSingleton();
}
- private void installAccountUserApi() {
+ protected void installAccountUserApi() {
bind(AccountUserApi.class).to(DefaultAccountUserApi.class).asEagerSingleton();
}
diff --git a/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java b/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
new file mode 100644
index 0000000..2aa9bde
--- /dev/null
+++ b/account/src/test/java/com/ning/billing/account/dao/MockAccountDao.java
@@ -0,0 +1,49 @@
+package com.ning.billing.account.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.ning.billing.account.api.Account;
+
+public class MockAccountDao implements AccountDao {
+ private final Map<String, Account> accounts = new ConcurrentHashMap<String, Account>();
+
+ @Override
+ public void save(Account entity) {
+ accounts.put(entity.getId().toString(), entity);
+ }
+
+ @Override
+ public Account getById(String id) {
+ return accounts.get(id);
+ }
+
+ @Override
+ public List<Account> get() {
+ return new ArrayList<Account>(accounts.values());
+ }
+
+ @Override
+ public void test() {
+ }
+
+ @Override
+ public Account getAccountByKey(String key) {
+ for (Account account : accounts.values()) {
+ if (key.equals(account.getExternalKey())) {
+ return account;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public UUID getIdFromKey(String externalKey) {
+ Account account = getAccountByKey(externalKey);
+ return account == null ? null : account.getId();
+ }
+
+}
diff --git a/analytics/src/test/java/com/ning/billing/analytics/dao/MockBusinessAccountDao.java b/analytics/src/test/java/com/ning/billing/analytics/dao/MockBusinessAccountDao.java
new file mode 100644
index 0000000..ceacbeb
--- /dev/null
+++ b/analytics/src/test/java/com/ning/billing/analytics/dao/MockBusinessAccountDao.java
@@ -0,0 +1,28 @@
+package com.ning.billing.analytics.dao;
+
+import com.ning.billing.analytics.BusinessAccount;
+
+public class MockBusinessAccountDao implements BusinessAccountDao {
+
+ @Override
+ public BusinessAccount getAccount(String key) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int createAccount(BusinessAccount account) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int saveAccount(BusinessAccount account) {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void test() {
+ }
+}
diff --git a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
index 54f8747..f196379 100644
--- a/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
+++ b/api/src/main/java/com/ning/billing/invoice/api/InvoicePaymentApi.java
@@ -23,6 +23,7 @@ import java.util.UUID;
import org.joda.time.DateTime;
import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.payment.api.InvoicePayment;
public interface InvoicePaymentApi {
public void paymentSuccessful(UUID invoiceId, BigDecimal amount, Currency currency, UUID paymentAttemptId, DateTime paymentAttemptDate);
diff --git a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
index 2fda310..a36cfea 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/api/invoice/DefaultInvoicePaymentApi.java
@@ -1,4 +1,5 @@
/*
+
* Copyright 2010-2011 Ning, Inc.
*
* Ning licenses this file to you under the Apache License, version 2.0
@@ -25,9 +26,9 @@ import org.joda.time.DateTime;
import com.google.inject.Inject;
import com.ning.billing.catalog.api.Currency;
import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.api.InvoicePayment;
import com.ning.billing.invoice.api.InvoicePaymentApi;
import com.ning.billing.invoice.dao.InvoiceDao;
+import com.ning.billing.payment.api.InvoicePayment;
public class DefaultInvoicePaymentApi implements InvoicePaymentApi {
private final InvoiceDao dao;
diff --git a/invoice/src/main/java/com/ning/billing/invoice/glue/InvoiceModule.java b/invoice/src/main/java/com/ning/billing/invoice/glue/InvoiceModule.java
index 54990c5..0e1c657 100644
--- a/invoice/src/main/java/com/ning/billing/invoice/glue/InvoiceModule.java
+++ b/invoice/src/main/java/com/ning/billing/invoice/glue/InvoiceModule.java
@@ -18,14 +18,14 @@ package com.ning.billing.invoice.glue;
import com.google.inject.AbstractModule;
import com.ning.billing.invoice.api.InvoicePaymentApi;
+import com.ning.billing.invoice.api.InvoiceUserApi;
import com.ning.billing.invoice.api.invoice.DefaultInvoicePaymentApi;
import com.ning.billing.invoice.api.user.DefaultInvoiceUserApi;
-import com.ning.billing.invoice.api.InvoiceUserApi;
import com.ning.billing.invoice.dao.DefaultInvoiceDao;
import com.ning.billing.invoice.dao.InvoiceDao;
public class InvoiceModule extends AbstractModule {
- private void installInvoiceDao() {
+ protected void installInvoiceDao() {
bind(InvoiceDao.class).to(DefaultInvoiceDao.class).asEagerSingleton();
}
diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
new file mode 100644
index 0000000..6e10c6f
--- /dev/null
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/MockInvoiceDao.java
@@ -0,0 +1,171 @@
+package com.ning.billing.invoice.dao;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.ning.billing.catalog.api.Currency;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceItem;
+import com.ning.billing.invoice.model.DefaultInvoice;
+
+public class MockInvoiceDao implements InvoiceDao {
+ private static final class InvoicePaymentInfo {
+ public final String invoiceId;
+ public final String paymentId;
+ public final DateTime paymentDate;
+ public final BigDecimal amount;
+ public final Currency currency;
+
+ public InvoicePaymentInfo(String invoiceId, String paymentId, DateTime paymentDate, BigDecimal amount, Currency currency) {
+ this.invoiceId = invoiceId;
+ this.paymentId = paymentId;
+ this.paymentDate = paymentDate;
+ this.amount = amount;
+ this.currency = currency;
+ }
+ }
+
+ private final Object monitor = new Object();
+ private final Map<String, Invoice> invoices = new LinkedHashMap<String, Invoice>();
+ private final List<InvoicePaymentInfo> paymentInfos = new ArrayList<MockInvoiceDao.InvoicePaymentInfo>();
+
+ @Override
+ public void save(Invoice invoice) {
+ synchronized (monitor) {
+ invoices.put(invoice.getId().toString(), invoice);
+ }
+ }
+
+ private Invoice munge(Invoice invoice) {
+ if (invoice == null) {
+ return null;
+ }
+
+ DateTime lastPaymentDate = null;
+ BigDecimal amountPaid = new BigDecimal("0");
+
+ for (InvoicePaymentInfo info : paymentInfos) {
+ if (info.invoiceId.equals(invoice.getId().toString())) {
+ if (lastPaymentDate == null || lastPaymentDate.isBefore(info.paymentDate)) {
+ lastPaymentDate = info.paymentDate;
+ }
+ if (info.amount != null) {
+ amountPaid.add(info.amount);
+ }
+ }
+ }
+ return new DefaultInvoice(invoice.getId(),
+ invoice.getAccountId(),
+ invoice.getInvoiceDate(),
+ invoice.getTargetDate(),
+ invoice.getCurrency(),
+ lastPaymentDate,
+ amountPaid,
+ invoice.getItems());
+ }
+
+ private List<Invoice> munge(Collection<Invoice> invoices) {
+ List<Invoice> result = new ArrayList<Invoice>();
+ for (Invoice invoice : invoices) {
+ result.add(munge(invoice));
+ }
+ return result;
+ }
+
+ @Override
+ public Invoice getById(String id) {
+ synchronized (monitor) {
+ return munge(invoices.get(id));
+ }
+ }
+
+ @Override
+ public List<Invoice> get() {
+ synchronized (monitor) {
+ return munge(invoices.values());
+ }
+ }
+
+ @Override
+ public List<Invoice> getInvoicesByAccount(String accountId) {
+ List<Invoice> result = new ArrayList<Invoice>();
+
+ synchronized (monitor) {
+ for (Invoice invoice : invoices.values()) {
+ if (accountId.equals(invoice.getAccountId().toString())) {
+ result.add(invoice);
+ }
+ }
+ }
+ return munge(result);
+ }
+
+ @Override
+ public List<Invoice> getInvoicesBySubscription(String subscriptionId) {
+ List<Invoice> result = new ArrayList<Invoice>();
+
+ synchronized (monitor) {
+ for (Invoice invoice : invoices.values()) {
+ for (InvoiceItem item : invoice.getItems()) {
+ if (subscriptionId.equals(item.getSubscriptionId().toString())) {
+ result.add(invoice);
+ break;
+ }
+ }
+ }
+ }
+ return munge(result);
+ }
+
+ @Override
+ public List<UUID> getInvoicesForPayment(Date targetDate, int numberOfDays) {
+ Set<UUID> result = new LinkedHashSet<UUID>();
+
+ synchronized (monitor) {
+ for (InvoicePaymentInfo info : paymentInfos) {
+ Invoice invoice = invoices.get(info.invoiceId);
+ if ((invoice != null) &&
+ (((info.paymentDate == null) || !info.paymentDate.plusDays(numberOfDays).isAfter(targetDate.getTime())) &&
+ (invoice.getTotalAmount() != null) && invoice.getTotalAmount().doubleValue() >= 0) &&
+ ((info.amount == null) || info.amount.doubleValue() >= invoice.getTotalAmount().doubleValue())) {
+
+ result.add(invoice.getId());
+ }
+ }
+ }
+
+ return new ArrayList<UUID>(result);
+ }
+
+ @Override
+ public void notifySuccessfulPayment(String invoiceId,
+ BigDecimal paymentAmount,
+ String currency, String paymentId,
+ Date paymentDate) {
+ synchronized (monitor) {
+ paymentInfos.add(new InvoicePaymentInfo(invoiceId, paymentId, new DateTime(paymentDate), paymentAmount, Currency.valueOf(currency)));
+ }
+ }
+
+ @Override
+ public void notifyFailedPayment(String invoiceId, String paymentId,
+ Date paymentAttemptDate) {
+ synchronized (monitor) {
+ paymentInfos.add(new InvoicePaymentInfo(invoiceId, paymentId, new DateTime(paymentAttemptDate), null, null));
+ }
+ }
+
+ @Override
+ public void test() {
+ }
+}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
index 70cf98a..f16adb0 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
@@ -1,3 +1,19 @@
+/*
+ * 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.dao;
public class PaymentDao {
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
index dc7a74b..10f8d8f 100644
--- a/payment/src/test/java/com/ning/billing/payment/api/TestMockPaymentApi.java
+++ b/payment/src/test/java/com/ning/billing/payment/api/TestMockPaymentApi.java
@@ -1,3 +1,19 @@
+/*
+ * 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 org.testng.annotations.Guice;
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
index 4c22a3f..7f1c53b 100644
--- a/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
+++ b/payment/src/test/java/com/ning/billing/payment/api/TestPaymentApi.java
@@ -1,3 +1,19 @@
+/*
+ * 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 static org.testng.Assert.assertEquals;
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 578fd15..5f9900f 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
@@ -21,6 +21,8 @@ import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
+import org.joda.time.DateTime;
+
import com.ning.billing.account.api.Account;
import com.ning.billing.invoice.api.Invoice;
import com.ning.billing.payment.api.Either;
@@ -32,10 +34,20 @@ import com.ning.billing.payment.api.PaypalPaymentMethodInfo;
public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
private final Map<String, PaymentInfo> payments = new ConcurrentHashMap<String, PaymentInfo>();
+ private final Map<String, PaymentProviderAccount> accounts = new ConcurrentHashMap<String, PaymentProviderAccount>();
@Override
public Either<PaymentError, PaymentInfo> processInvoice(Account account, Invoice invoice) {
- PaymentInfo payment = new PaymentInfo.Builder().setId(UUID.randomUUID().toString()).build();
+ PaymentInfo payment = new PaymentInfo.Builder().setId(UUID.randomUUID().toString())
+ .setAmount(invoice.getAmountOutstanding())
+ .setStatus("Processed")
+ .setBankIdentificationNumber("1234")
+ .setCreatedDate(new DateTime())
+ .setEffectiveDate(new DateTime())
+ .setPaymentNumber("12345")
+ .setReferenceId("12345")
+ .setType("Electronic")
+ .build();
payments.put(payment.getId(), payment);
return Either.right(payment);
@@ -55,8 +67,18 @@ public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
@Override
public Either<PaymentError, PaymentProviderAccount> createPaymentProviderAccount(Account account) {
- // TODO
- return Either.left(new PaymentError("unknown", "Not implemented"));
+ if (account != null) {
+ PaymentProviderAccount paymentProviderAccount = accounts.put(account.getExternalKey(),
+ new PaymentProviderAccount.Builder().setAccountName(account.getExternalKey())
+ .setAccountNumber(account.getExternalKey())
+ .setId(account.getId().toString())
+ .build());
+
+ return Either.right(paymentProviderAccount);
+ }
+ else {
+ return Either.left(new PaymentError("unknown", "Did not get account to create payment provider account"));
+ }
}
@Override
diff --git a/payment/src/test/java/com/ning/billing/payment/TestNotifyInvoicePaymentApi.java b/payment/src/test/java/com/ning/billing/payment/TestNotifyInvoicePaymentApi.java
index 660b25f..0867f01 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestNotifyInvoicePaymentApi.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestNotifyInvoicePaymentApi.java
@@ -1,3 +1,19 @@
+/*
+ * 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;
import static org.testng.Assert.assertNotNull;
@@ -9,7 +25,7 @@ import org.testng.annotations.Test;
import com.ning.billing.account.api.Account;
import com.ning.billing.invoice.api.Invoice;
-import com.ning.billing.invoice.api.InvoicePayment;
+import com.ning.billing.payment.api.InvoicePayment;
import com.ning.billing.payment.setup.PaymentTestModule;
@Guice(modules = PaymentTestModule.class)