killbill-memoizeit

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index f7ae961..dda153a 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -784,7 +784,7 @@ public class AccountResource extends JaxRsResourceBase {
 
         final Account account = accountUserApi.getAccountById(UUID.fromString(accountId), callContext);
 
-        if (pluginName != null) {
+        if (pluginName != null && !pluginName.isEmpty()) {
             paymentApi.refreshPaymentMethods(account, pluginName, pluginProperties, callContext);
         } else {
             paymentApi.refreshPaymentMethods(account, pluginProperties, callContext);
diff --git a/payment/src/main/java/org/killbill/billing/payment/provider/ExternalPaymentProviderPlugin.java b/payment/src/main/java/org/killbill/billing/payment/provider/ExternalPaymentProviderPlugin.java
index fbd0fea..33f1e30 100644
--- a/payment/src/main/java/org/killbill/billing/payment/provider/ExternalPaymentProviderPlugin.java
+++ b/payment/src/main/java/org/killbill/billing/payment/provider/ExternalPaymentProviderPlugin.java
@@ -117,7 +117,7 @@ public class ExternalPaymentProviderPlugin implements PaymentPluginApi {
 
     @Override
     public List<PaymentMethodInfoPlugin> getPaymentMethods(final UUID kbAccountId, final boolean refreshFromGateway, final Iterable<PluginProperty> properties, final CallContext context) throws PaymentPluginApiException {
-        throw new PaymentPluginApiException("Not implemented", "");
+        return ImmutableList.<PaymentMethodInfoPlugin>of();
     }
 
     @Override
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestAccount.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestAccount.java
index 60072e8..c54bf1a 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestAccount.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestAccount.java
@@ -36,11 +36,14 @@ import org.killbill.billing.client.model.CustomField;
 import org.killbill.billing.client.model.InvoicePayments;
 import org.killbill.billing.client.model.PaymentMethod;
 import org.killbill.billing.client.model.PaymentMethodPluginDetail;
+import org.killbill.billing.client.model.PaymentMethods;
 import org.killbill.billing.client.model.Tag;
 import org.killbill.billing.util.api.AuditLevel;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.ImmutableMap;
+
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
@@ -267,6 +270,37 @@ public class TestAccount extends TestJaxrsBase {
         assertEquals(remainingCustomFields.size(), 0);
     }
 
+    @Test(groups = "slow", description = "refresh payment methods")
+    public void testRefreshPaymentMethods() throws Exception {
+        Account account = createAccountWithDefaultPaymentMethod("someExternalKey");
+
+        final PaymentMethods paymentMethodsBeforeRefreshing = killBillClient.getPaymentMethodsForAccount(account.getAccountId());
+        assertEquals(1,  paymentMethodsBeforeRefreshing .size());
+        assertEquals("someExternalKey",  paymentMethodsBeforeRefreshing.get(0).getExternalKey());
+
+        // WITH NAME OF AN EXISTING PLUGIN
+        killBillClient.refreshPaymentMethods(account.getAccountId(), PLUGIN_NAME, ImmutableMap.<String, String>of(), createdBy, reason, comment);
+
+        final PaymentMethods paymentMethodsAfterExistingPluginCall = killBillClient.getPaymentMethodsForAccount(account.getAccountId());
+        assertEquals(1, paymentMethodsAfterExistingPluginCall.size());
+        assertEquals("someExternalKey", paymentMethodsAfterExistingPluginCall.get(0).getExternalKey());
+
+        // WITHOUT PLUGIN NAME
+        killBillClient.refreshPaymentMethods(account.getAccountId(), ImmutableMap.<String, String>of(), createdBy, reason, comment);
+
+        final PaymentMethods paymentMethodsAfterNoPluginNameCall = killBillClient.getPaymentMethodsForAccount(account.getAccountId());
+        assertEquals(1, paymentMethodsAfterNoPluginNameCall.size());
+        assertEquals("someExternalKey", paymentMethodsAfterNoPluginNameCall.get(0).getExternalKey());
+
+        // WITH WRONG PLUGIN NAME
+        try {
+            killBillClient.refreshPaymentMethods(account.getAccountId(), "GreatestPluginEver", ImmutableMap.<String, String>of(), createdBy, reason, comment);
+            Assert.fail();
+        } catch (KillBillClientException e) {
+            Assert.assertEquals(e.getBillingException().getCode(), (Integer) ErrorCode.PAYMENT_NO_SUCH_PAYMENT_PLUGIN.getCode());
+        }
+    }
+
     @Test(groups = "slow", description = "Can paginate through all accounts")
     public void testAccountsPagination() throws Exception {
         for (int i = 0; i < 5; i++) {