killbill-uncached
Merge pull request #439 from holkra/create-endpoint-for-refreshing-of-paymentmethods Create …
12/1/2015 10:51:35 PM
Changes
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 a26c775..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
@@ -766,6 +766,35 @@ public class AccountResource extends JaxRsResourceBase {
}
@TimedResource
+ @POST
+ @Path("/{accountId:" + UUID_PATTERN + "}/" + PAYMENT_METHODS + "/refresh")
+ @Produces(APPLICATION_JSON)
+ @ApiOperation(value = "Refresh account payment methods")
+ @ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid account id supplied"),
+ @ApiResponse(code = 404, message = "Account not found")})
+ public Response refreshPaymentMethods(@PathParam("accountId") final String accountId,
+ @QueryParam(QUERY_PAYMENT_PLUGIN_NAME) final String pluginName,
+ @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
+ @HeaderParam(HDR_CREATED_BY) final String createdBy,
+ @HeaderParam(HDR_REASON) final String reason,
+ @HeaderParam(HDR_COMMENT) final String comment,
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws AccountApiException, PaymentApiException {
+ final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
+ final CallContext callContext = context.createContext(createdBy, reason, comment, request);
+
+ final Account account = accountUserApi.getAccountById(UUID.fromString(accountId), callContext);
+
+ if (pluginName != null && !pluginName.isEmpty()) {
+ paymentApi.refreshPaymentMethods(account, pluginName, pluginProperties, callContext);
+ } else {
+ paymentApi.refreshPaymentMethods(account, pluginProperties, callContext);
+ }
+
+ return Response.status(Status.OK).build();
+ }
+
+
+ @TimedResource
@PUT
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
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++) {