Details
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
index 5498ed3..2f73558 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentMethodProcessor.java
@@ -48,8 +48,7 @@ import com.ning.billing.util.globallocker.GlobalLocker;
public class PaymentMethodProcessor extends ProcessorBase {
- private final PaymentDao paymentDao;
-
+
@Inject
public PaymentMethodProcessor(final PaymentProviderPluginRegistry pluginRegistry,
final AccountUserApi accountUserApi,
@@ -57,8 +56,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
final PaymentDao paymentDao,
final GlobalLocker locker,
@Named(PLUGIN_EXECUTOR_NAMED) final ExecutorService executor) {
- super(pluginRegistry, accountUserApi, eventBus, locker, executor);
- this.paymentDao = paymentDao;
+ super(pluginRegistry, accountUserApi, eventBus, paymentDao, locker, executor);
}
public Set<String> getAvailablePlugins() {
diff --git a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
index ca66795..2431467 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/PaymentProcessor.java
@@ -70,7 +70,6 @@ public class PaymentProcessor extends ProcessorBase {
private final InvoicePaymentApi invoicePaymentApi;
private final FailedPaymentRetryServiceScheduler failedPaymentRetryService;
private final PluginFailureRetryServiceScheduler pluginFailureRetryService;
- private final PaymentDao paymentDao;
private final CallContextFactory factory;
private final Clock clock;
@@ -91,11 +90,10 @@ public class PaymentProcessor extends ProcessorBase {
final GlobalLocker locker,
@Named(PLUGIN_EXECUTOR_NAMED) final ExecutorService executor,
final CallContextFactory factory) {
- super(pluginRegistry, accountUserApi, eventBus, locker, executor);
+ super(pluginRegistry, accountUserApi, eventBus, paymentDao, locker, executor);
this.invoicePaymentApi = invoicePaymentApi;
this.failedPaymentRetryService = failedPaymentRetryService;
this.pluginFailureRetryService = pluginFailureRetryService;
- this.paymentDao = paymentDao;
this.clock = clock;
this.factory = factory;
this.paymentPluginDispatcher = new PluginDispatcher<Payment>(executor);
diff --git a/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java b/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
index 781d4ee..410fd08 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/ProcessorBase.java
@@ -28,6 +28,8 @@ import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.payment.api.PaymentApiException;
+import com.ning.billing.payment.dao.PaymentDao;
+import com.ning.billing.payment.dao.PaymentMethodModelDao;
import com.ning.billing.payment.plugin.api.PaymentPluginApi;
import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
import com.ning.billing.util.bus.Bus;
@@ -47,17 +49,20 @@ public abstract class ProcessorBase {
protected final Bus eventBus;
protected final GlobalLocker locker;
protected final ExecutorService executor;
+ protected final PaymentDao paymentDao;
private static final Logger log = LoggerFactory.getLogger(ProcessorBase.class);
public ProcessorBase(final PaymentProviderPluginRegistry pluginRegistry,
final AccountUserApi accountUserApi,
final Bus eventBus,
+ final PaymentDao paymentDao,
final GlobalLocker locker,
final ExecutorService executor) {
this.pluginRegistry = pluginRegistry;
this.accountUserApi = accountUserApi;
this.eventBus= eventBus;
+ this.paymentDao = paymentDao;
this.locker = locker;
this.executor = executor;
}
@@ -81,6 +86,12 @@ public abstract class ProcessorBase {
if (paymentMethodId == null) {
throw new PaymentApiException(ErrorCode.PAYMENT_NO_DEFAULT_PAYMENT_METHOD, account.getId());
}
+ PaymentMethodModelDao methodDao = paymentDao.getPaymentMethod(paymentMethodId);
+ if (methodDao == null) {
+ log.error("Account {} has a non existent default payment method {}!!!", account.getId(), paymentMethodId);
+ throw new PaymentApiException(ErrorCode.PAYMENT_NO_DEFAULT_PAYMENT_METHOD, account.getId());
+ }
+ paymentProviderName = methodDao.getPluginName();
}
return pluginRegistry.getPlugin(paymentProviderName);
}
diff --git a/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java b/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
index a651839..f478e07 100644
--- a/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
+++ b/payment/src/main/java/com/ning/billing/payment/core/RefundProcessor.java
@@ -27,6 +27,7 @@ import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountUserApi;
import com.ning.billing.payment.api.PaymentApiException;
import com.ning.billing.payment.api.Refund;
+import com.ning.billing.payment.dao.PaymentDao;
import com.ning.billing.payment.provider.PaymentProviderPluginRegistry;
import com.ning.billing.util.bus.Bus;
import com.ning.billing.util.callcontext.CallContext;
@@ -38,9 +39,10 @@ public class RefundProcessor extends ProcessorBase {
public RefundProcessor(final PaymentProviderPluginRegistry pluginRegistry,
final AccountUserApi accountUserApi,
final Bus eventBus,
+ final PaymentDao paymentDao,
final GlobalLocker locker,
- @Named(PLUGIN_EXECUTOR_NAMED) final ExecutorService executor) {
- super(pluginRegistry, accountUserApi, eventBus, locker, executor);
+ @Named(PLUGIN_EXECUTOR_NAMED) final ExecutorService executor) {
+ super(pluginRegistry, accountUserApi, eventBus, paymentDao, locker, executor);
}
public Refund createRefund(Account account, UUID paymentId, CallContext context)
diff --git a/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java b/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
index 1760339..dfcf639 100644
--- a/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
+++ b/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
@@ -17,6 +17,8 @@ package com.ning.billing.payment.dao;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -125,24 +127,44 @@ public class MockPaymentDao implements PaymentDao {
return result;
}
+ private final List<PaymentMethodModelDao> paymentMethods = new LinkedList<PaymentMethodModelDao>();
+
@Override
- public PaymentMethodModelDao insertPaymentMethod(
- PaymentMethodModelDao paymentMethod, CallContext context) {
- return null;
+ public PaymentMethodModelDao insertPaymentMethod(PaymentMethodModelDao paymentMethod, CallContext context) {
+ paymentMethods.add(paymentMethod);
+ return paymentMethod;
}
@Override
public PaymentMethodModelDao getPaymentMethod(UUID paymentMethodId) {
+ for (PaymentMethodModelDao cur : paymentMethods) {
+ if (cur.getId().equals(paymentMethodId)) {
+ return cur;
+ }
+ }
return null;
}
@Override
public List<PaymentMethodModelDao> getPaymentMethods(UUID accountId) {
- return null;
+ List<PaymentMethodModelDao> result = new ArrayList<PaymentMethodModelDao>();
+ for (PaymentMethodModelDao cur : paymentMethods) {
+ if (cur.getAccountId().equals(accountId)) {
+ result.add(cur);
+ }
+ }
+ return result;
}
@Override
public void deletedPaymentMethod(UUID paymentMethodId) {
-
+ Iterator<PaymentMethodModelDao> it = paymentMethods.iterator();
+ while (it.hasNext()) {
+ PaymentMethodModelDao cur = it.next();
+ if (cur.getId().equals(paymentMethodId)) {
+ it.remove();
+ break;
+ }
+ }
}
}
diff --git a/payment/src/test/java/com/ning/billing/payment/TestHelper.java b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
index fb08dcb..5f8ef23 100644
--- a/payment/src/test/java/com/ning/billing/payment/TestHelper.java
+++ b/payment/src/test/java/com/ning/billing/payment/TestHelper.java
@@ -35,6 +35,7 @@ import com.ning.billing.payment.api.DefaultPaymentMethodPlugin;
import com.ning.billing.payment.api.PaymentApi;
import com.ning.billing.payment.api.PaymentMethod;
import com.ning.billing.payment.api.PaymentMethodPlugin;
+import com.ning.billing.payment.dao.PaymentDao;
import com.ning.billing.payment.glue.PaymentTestModuleWithMocks;
import com.ning.billing.util.bus.Bus;
import com.ning.billing.util.bus.Bus.EventBusException;
@@ -110,9 +111,24 @@ public class TestHelper {
zombie.addResult("getEmail", email);
zombie.addResult("getCurrency", Currency.USD);
zombie.addResult("getBillCycleDay", 1);
+ zombie.addResult("isMigrated", false);
+ zombie.addResult("isNotifiedForInvoices", false);
+ zombie.addResult("getTimeZone", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getLocale", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getAddress1", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getAddress2", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getCompanyName", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getCity", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getStateOrProvince", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getCountry", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getPostalCode", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getPhone", BrainDeadProxyFactory.ZOMBIE_VOID);
+ zombie.addResult("getPaymentMethodId", BrainDeadProxyFactory.ZOMBIE_VOID);
((ZombieControl)accountUserApi).addResult("getAccountById", account);
((ZombieControl)accountUserApi).addResult("getAccountByKey", account);
+ ((ZombieControl)accountUserApi).addResult("updateAccount", BrainDeadProxyFactory.ZOMBIE_VOID);
+ //updateAccount
PaymentMethodPlugin pm = new DefaultPaymentMethodPlugin(UUID.randomUUID().toString(), true, null);
addTestPaymentMethod(account, pm);
@@ -122,7 +138,7 @@ public class TestHelper {
private void addTestPaymentMethod(Account account, PaymentMethodPlugin paymentMethodInfo) throws Exception {
UUID paymentMethodId = paymentApi.addPaymentMethod(PaymentTestModuleWithMocks.PLUGIN_TEST_NAME, account, true, paymentMethodInfo, context);
ZombieControl zombie = (ZombieControl) account;
- zombie.addResult("getPaymentMethodId", paymentMethodId);
+ zombie.addResult("getPaymentMethodId", paymentMethodId);
}
}