Details
diff --git a/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java b/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
index 1d62eb5..8e665ed 100644
--- a/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
+++ b/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
@@ -42,9 +42,9 @@ public interface PaymentApi {
Either<PaymentError, PaymentProviderAccount> getPaymentProviderAccount(String accountKey);
- Either<PaymentError, PaymentProviderAccount> createPaymentProviderAccount(PaymentProviderAccount account);
+ Either<PaymentError, String> createPaymentProviderAccount(Account account);
- Either<PaymentError, PaymentProviderAccount> updatePaymentProviderAccount(PaymentProviderAccount account);
+ Either<PaymentError, PaymentProviderAccount> updatePaymentProviderAccount(Account account);
PaymentAttempt getPaymentAttemptForPaymentId(String id);
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
index 1fe63c3..69e0dfe 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
@@ -67,7 +67,12 @@ public class DefaultPaymentApi implements PaymentApi {
if (accountKey != null) {
final Account account = accountUserApi.getAccountByKey(accountKey);
- return getPaymentProviderPlugin(account);
+ if (account != null) {
+ return getPaymentProviderPlugin(account);
+ }
+ else {
+ throw new IllegalArgumentException("Did not find account with accountKey " + accountKey);
+ }
}
return pluginRegistry.getPlugin(paymentProviderName);
@@ -173,15 +178,15 @@ public class DefaultPaymentApi implements PaymentApi {
}
@Override
- public Either<PaymentError, PaymentProviderAccount> createPaymentProviderAccount(PaymentProviderAccount account) {
+ public Either<PaymentError, String> createPaymentProviderAccount(Account account) {
final PaymentProviderPlugin plugin = getPaymentProviderPlugin((Account)null);
return plugin.createPaymentProviderAccount(account);
}
@Override
- public Either<PaymentError, PaymentProviderAccount> updatePaymentProviderAccount(PaymentProviderAccount account) {
- //TODO
- throw new UnsupportedOperationException();
+ public Either<PaymentError, PaymentProviderAccount> updatePaymentProviderAccount(Account account) {
+ final PaymentProviderPlugin plugin = getPaymentProviderPlugin(account);
+ return plugin.updatePaymentProviderAccount(account);
}
@Override
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 4f19eb7..460951d 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
@@ -29,8 +29,9 @@ import com.ning.billing.payment.api.PaypalPaymentMethodInfo;
public interface PaymentProviderPlugin {
Either<PaymentError, PaymentInfo> processInvoice(Account account, Invoice invoice);
- Either<PaymentError, PaymentProviderAccount> createPaymentProviderAccount(PaymentProviderAccount account);
+ Either<PaymentError, String> createPaymentProviderAccount(Account account);
Either<PaymentError, String> addPaypalPaymentMethod(String accountId, PaypalPaymentMethodInfo paypalPaymentMethod);
+ Either<PaymentError, PaymentProviderAccount> updatePaymentProviderAccount(Account account);
Either<PaymentError, PaymentInfo> getPaymentInfo(String paymentId);
Either<PaymentError, PaymentMethodInfo> getPaymentMethodInfo(String paymentMethodId);
diff --git a/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java
index f7778d8..fc9c149 100644
--- a/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java
+++ b/payment/src/main/java/com/ning/billing/payment/provider/PaymentProviderPluginRegistry.java
@@ -38,6 +38,12 @@ public class PaymentProviderPluginRegistry {
}
public PaymentProviderPlugin getPlugin(String name) {
- return pluginsByName.get(StringUtils.defaultIfEmpty(name, defaultPlugin).toLowerCase());
+ PaymentProviderPlugin plugin = pluginsByName.get(StringUtils.defaultIfEmpty(name, defaultPlugin).toLowerCase());
+
+ if (plugin == null) {
+ throw new IllegalArgumentException("No payment provider plugin is configured for " + name);
+ }
+
+ return plugin;
}
}
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 c26f28a..121db01 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,7 @@ import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.commons.lang.math.RandomUtils;
import org.joda.time.DateTime;
import com.ning.billing.account.api.Account;
@@ -66,15 +67,15 @@ public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
}
@Override
- public Either<PaymentError, PaymentProviderAccount> createPaymentProviderAccount(PaymentProviderAccount account) {
+ public Either<PaymentError, String> createPaymentProviderAccount(Account account) {
if (account != null) {
- PaymentProviderAccount paymentProviderAccount = accounts.put(account.getAccountName(),
- new PaymentProviderAccount.Builder().setAccountName(account.getAccountName())
- .setAccountNumber(account.getAccountName())
- .setId(account.getId())
+ PaymentProviderAccount paymentProviderAccount = accounts.put(account.getExternalKey(),
+ new PaymentProviderAccount.Builder().setAccountNumber(String.valueOf(RandomUtils.nextInt(10)))
+ .setDefaultPaymentMethod(String.valueOf(RandomUtils.nextInt(10)))
+ .setId(String.valueOf(RandomUtils.nextInt(10)))
.build());
- return Either.right(paymentProviderAccount);
+ return Either.right(paymentProviderAccount.getId());
}
else {
return Either.left(new PaymentError("unknown", "Did not get account to create payment provider account"));
@@ -82,6 +83,12 @@ public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
}
@Override
+ public Either<PaymentError, PaymentProviderAccount> updatePaymentProviderAccount(Account account) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
public Either<PaymentError, PaymentMethodInfo> getPaymentMethodInfo(String paymentMethodId) {
// TODO
return Either.left(new PaymentError("unknown", "Not implemented"));
@@ -122,4 +129,5 @@ public class MockPaymentProviderPlugin implements PaymentProviderPlugin {
// TODO
return Either.left(new PaymentError("unknown", "Not implemented"));
}
+
}