killbill-memoizeit

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
index 1188e54..10da5f0 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/JaxrsResource.java
@@ -93,8 +93,6 @@ public interface JaxrsResource {
     public static final String QUERY_WITH_PLUGIN_INFO = "withPluginInfo";
     public static final String QUERY_PAYMENT_METHOD_IS_DEFAULT = "isDefault";
 
-    public static final String QUERY_PAYMENT_METHOD_PLUGIN_INFO = "pluginInfo"; // STEPH check on that one, why was that missing?
-
     public static final String QUERY_PAY_ALL_UNPAID_INVOICES = "payAllUnpaidInvoices";
     public static final String QUERY_PAY_INVOICE = "payInvoice";
 
diff --git a/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentProviderPlugin.java b/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentProviderPlugin.java
index 686f48b..4779159 100644
--- a/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentProviderPlugin.java
+++ b/payment/src/test/java/org/killbill/billing/payment/provider/MockPaymentProviderPlugin.java
@@ -33,10 +33,10 @@ import org.killbill.billing.payment.api.TransactionType;
 import org.killbill.billing.payment.plugin.api.GatewayNotification;
 import org.killbill.billing.payment.plugin.api.HostedPaymentPageFormDescriptor;
 import org.killbill.billing.payment.plugin.api.NoOpPaymentPluginApi;
-import org.killbill.billing.payment.plugin.api.PaymentTransactionInfoPlugin;
 import org.killbill.billing.payment.plugin.api.PaymentMethodInfoPlugin;
 import org.killbill.billing.payment.plugin.api.PaymentPluginApiException;
 import org.killbill.billing.payment.plugin.api.PaymentPluginStatus;
+import org.killbill.billing.payment.plugin.api.PaymentTransactionInfoPlugin;
 import org.killbill.billing.util.callcontext.CallContext;
 import org.killbill.billing.util.callcontext.TenantContext;
 import org.killbill.billing.util.entity.DefaultPagination;
@@ -294,6 +294,13 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
         final ImmutableList<PaymentMethodPlugin> results = ImmutableList.<PaymentMethodPlugin>copyOf(Iterables.<PaymentMethodPlugin>filter(paymentMethods.values(), new Predicate<PaymentMethodPlugin>() {
             @Override
             public boolean apply(final PaymentMethodPlugin input) {
+                if (input.getProperties() !=  null) {
+                    for (PluginProperty cur : input.getProperties()) {
+                        if (cur.getValue().equals(searchKey)) {
+                            return true;
+                        }
+                    }
+                }
                 return (input.getKbPaymentMethodId().toString().equals(searchKey));
             }
         }));
@@ -335,7 +342,6 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
         return getPaymentTransactionInfoPluginResult(kbPaymentId, kbTransactionId, TransactionType.REFUND, refundAmount, currency);
     }
 
-
     private PaymentTransactionInfoPlugin getPaymentTransactionInfoPluginResult(final UUID kbPaymentId, final UUID kbTransactionId, final TransactionType type, final BigDecimal amount, final Currency currency) throws PaymentPluginApiException {
 
         if (makeNextInvoiceFailWithException.getAndSet(false)) {
@@ -343,7 +349,6 @@ public class MockPaymentProviderPlugin implements NoOpPaymentPluginApi {
             throw new PaymentPluginApiException("", "test error");
         }
 
-
         final PaymentPluginStatus status = (makeAllInvoicesFailWithError.get() || makeNextInvoiceFailWithError.getAndSet(false)) ? PaymentPluginStatus.ERROR : PaymentPluginStatus.PROCESSED;
 
         System.out.println("################## (STEPH) MockPaymentProviderPlugin getPaymentTransactionInfoPluginResult makeNextInvoiceFailWithError => status = " + status);
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/KillbillClient.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/KillbillClient.java
index 951e15e..a7b8811 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/KillbillClient.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/KillbillClient.java
@@ -22,6 +22,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
+import javax.annotation.Nullable;
+
 import org.killbill.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
 import org.killbill.billing.catalog.api.BillingPeriod;
 import org.killbill.billing.catalog.api.PriceListSet;
@@ -87,12 +89,16 @@ public abstract class KillbillClient extends GuicyKillbillTestSuiteWithEmbeddedD
     }
 
     protected Account createAccountWithDefaultPaymentMethod() throws Exception {
+       return  createAccountWithDefaultPaymentMethod(null);
+    }
+
+    protected Account createAccountWithDefaultPaymentMethod(@Nullable final List<PluginProperty> pmProperties) throws Exception {
         final Account input = createAccount();
 
         final PaymentMethodPluginDetail info = new PaymentMethodPluginDetail();
+        info.setProperties(pmProperties);
         final PaymentMethod paymentMethodJson = new PaymentMethod(null, input.getAccountId(), true, PLUGIN_NAME, info);
         killBillClient.createPaymentMethod(paymentMethodJson, createdBy, reason, comment);
-
         return killBillClient.getAccount(input.getExternalKey());
     }
 
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPaymentMethod.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPaymentMethod.java
index df19573..4e6440e 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPaymentMethod.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPaymentMethod.java
@@ -18,36 +18,40 @@
 
 package org.killbill.billing.jaxrs;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
 import org.killbill.billing.client.model.Account;
 import org.killbill.billing.client.model.PaymentMethod;
 import org.killbill.billing.client.model.PaymentMethods;
+import org.killbill.billing.client.model.PluginProperty;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
 public class TestPaymentMethod extends TestJaxrsBase {
 
-    // STEPH disable test since it is not valid (CC, name, type no longer exist part of the PaymentMethodPlugin interface). Need to understand how search
-    // for those fieds would work.
-    @Test(groups = "slow", description = "Can search payment methods", enabled=false)
+    @Test(groups = "slow", description = "Can search payment methods")
     public void testSearchPaymentMethods() throws Exception {
         // Search random key
         Assert.assertEquals(killBillClient.searchPaymentMethodsByKey(UUID.randomUUID().toString()).size(), 0);
         Assert.assertEquals(killBillClient.searchPaymentMethodsByKeyAndPlugin(UUID.randomUUID().toString(), PLUGIN_NAME).size(), 0);
 
         // Create a payment method
-        final Account accountJson = createAccountWithDefaultPaymentMethod();
+        final List<PluginProperty> pmProperties = new ArrayList<PluginProperty>();
+        pmProperties.add(new PluginProperty("CC_NAME", "Bozo", false));
+        pmProperties.add(new PluginProperty("CC_CITY", "SF", false));
+        pmProperties.add(new PluginProperty("CC_LAST_4", "4365", false));
+        pmProperties.add(new PluginProperty("CC_STATE", "CA", false));
+        pmProperties.add(new PluginProperty("CC_COUNTRY", "Zimbawe", false));
+
+        final Account accountJson = createAccountWithDefaultPaymentMethod(pmProperties);
         final PaymentMethod paymentMethodJson = killBillClient.getPaymentMethod(accountJson.getPaymentMethodId(), true);
 
         // Search random key again
         Assert.assertEquals(killBillClient.searchPaymentMethodsByKey(UUID.randomUUID().toString()).size(), 0);
         Assert.assertEquals(killBillClient.searchPaymentMethodsByKeyAndPlugin(UUID.randomUUID().toString(), PLUGIN_NAME).size(), 0);
 
-        // Make sure we can search the test plugin
-        // Values are hardcoded in TestPaymentMethodPluginBase and the search logic is in MockPaymentProviderPlugin
-        doSearch("Foo", paymentMethodJson);
         // Last 4
         doSearch("4365", paymentMethodJson);
         // Name