killbill-memoizeit

Fix MockPaymentDao, MockNonEntityDao to correclty keep track

7/14/2015 8:05:51 PM

Details

diff --git a/payment/src/test/java/org/killbill/billing/payment/core/sm/TestPaymentLeavingStateCallback.java b/payment/src/test/java/org/killbill/billing/payment/core/sm/TestPaymentLeavingStateCallback.java
index c063f80..36800f1 100644
--- a/payment/src/test/java/org/killbill/billing/payment/core/sm/TestPaymentLeavingStateCallback.java
+++ b/payment/src/test/java/org/killbill/billing/payment/core/sm/TestPaymentLeavingStateCallback.java
@@ -18,6 +18,7 @@
 package org.killbill.billing.payment.core.sm;
 
 import java.math.BigDecimal;
+import java.util.List;
 import java.util.UUID;
 
 import javax.annotation.Nullable;
@@ -47,6 +48,7 @@ public class TestPaymentLeavingStateCallback extends PaymentTestSuiteWithEmbedde
 
     private PaymentStateContext paymentStateContext;
     private PaymentLeavingStateTestCallback callback;
+    private Account account;
 
     @Test(groups = "slow")
     public void testLeaveStateForNewPayment() throws Exception {
@@ -72,7 +74,8 @@ public class TestPaymentLeavingStateCallback extends PaymentTestSuiteWithEmbedde
         setUp(paymentId);
 
         // Verify the payment has only one transaction
-        Assert.assertEquals(paymentDao.getTransactionsForPayment(paymentId, internalCallContext).size(), 1);
+        final List<PaymentTransactionModelDao> transactions = paymentDao.getTransactionsForPayment(paymentId, internalCallContext);
+        Assert.assertEquals(transactions.size(), 1);
 
         // Reset paymentExternalKey to something else
         paymentStateContext.setPaymentTransactionExternalKey(UUID.randomUUID().toString());
@@ -91,12 +94,18 @@ public class TestPaymentLeavingStateCallback extends PaymentTestSuiteWithEmbedde
         setUp(paymentId);
 
         // Verify the payment has only one transaction
-        Assert.assertEquals(paymentDao.getTransactionsForPayment(paymentId, internalCallContext).size(), 1);
+        final List<PaymentTransactionModelDao> transactions = paymentDao.getTransactionsForPayment(paymentId, internalCallContext);
+        Assert.assertEquals(transactions.size(), 1);
+
+        final String paymentStateName = paymentSMHelper.getErroredStateForTransaction(TransactionType.CAPTURE).toString();
+        paymentDao.updatePaymentAndTransactionOnCompletion(account.getId(), paymentId, TransactionType.AUTHORIZE, paymentStateName, paymentStateName,
+                                                           transactions.get(0).getId(), TransactionStatus.SUCCESS, BigDecimal.ONE, Currency.BRL,
+                                                           "foo", "bar", internalCallContext);
 
         // Will validate the validateUniqueTransactionExternalKey logic for when we reuse the same payment transactionExternalKey
         callback.leavingState(state);
-    }
 
+    }
 
     @Test(groups = "slow", expectedExceptions = OperationException.class)
     public void testLeaveStateForConflictingPaymentTransactionExternalKeyAcrossAccounts() throws Exception {
@@ -104,9 +113,15 @@ public class TestPaymentLeavingStateCallback extends PaymentTestSuiteWithEmbedde
         setUp(paymentId);
 
         // Verify the payment has only one transaction
-        Assert.assertEquals(paymentDao.getTransactionsForPayment(paymentId, internalCallContext).size(), 1);
+        final List<PaymentTransactionModelDao> transactions = paymentDao.getTransactionsForPayment(paymentId, internalCallContext);
+        Assert.assertEquals(transactions.size(), 1);
 
-        final InternalCallContext internalCallContextForOtherAccount =  new InternalCallContext(paymentStateContext.getInternalCallContext(), 123L);
+        final String paymentStateName = paymentSMHelper.getErroredStateForTransaction(TransactionType.CAPTURE).toString();
+        paymentDao.updatePaymentAndTransactionOnCompletion(account.getId(), paymentId, TransactionType.AUTHORIZE, paymentStateName, paymentStateName,
+                                                           transactions.get(0).getId(), TransactionStatus.SUCCESS, BigDecimal.ONE, Currency.BRL,
+                                                           "foo", "bar", internalCallContext);
+
+        final InternalCallContext internalCallContextForOtherAccount = new InternalCallContext(paymentStateContext.getInternalCallContext(), 123L);
 
         paymentStateContext = new PaymentStateContext(true,
                                                       paymentId,
@@ -128,7 +143,6 @@ public class TestPaymentLeavingStateCallback extends PaymentTestSuiteWithEmbedde
         callback.leavingState(state);
     }
 
-
     private void verifyPaymentTransaction() {
         Assert.assertNotNull(paymentStateContext.getPaymentTransactionModelDao().getPaymentId());
         Assert.assertEquals(paymentStateContext.getPaymentTransactionModelDao().getTransactionExternalKey(), paymentStateContext.getPaymentTransactionExternalKey());
@@ -142,7 +156,7 @@ public class TestPaymentLeavingStateCallback extends PaymentTestSuiteWithEmbedde
     }
 
     private void setUp(@Nullable final UUID paymentId) throws Exception {
-        final Account account = Mockito.mock(Account.class);
+        account = Mockito.mock(Account.class);
         Mockito.when(account.getId()).thenReturn(UUID.randomUUID());
         paymentStateContext = new PaymentStateContext(true,
                                                       paymentId,
diff --git a/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java b/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
index c761832..7109927 100644
--- a/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
+++ b/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
@@ -83,10 +83,12 @@ public class MockPaymentDao implements PaymentDao {
     @Override
     public PaymentAttemptModelDao insertPaymentAttemptWithProperties(final PaymentAttemptModelDao attempt, final InternalCallContext context) {
         attempt.setTenantRecordId(context.getTenantRecordId());
+        attempt.setAccountRecordId(context.getAccountRecordId());
 
         synchronized (this) {
             attempts.put(attempt.getId(), attempt);
             mockNonEntityDao.addTenantRecordIdMapping(attempt.getId(), context);
+            mockNonEntityDao.addAccountRecordIdMapping(attempt.getId(), context);
             return attempt;
         }
     }
@@ -177,15 +179,20 @@ public class MockPaymentDao implements PaymentDao {
 
     @Override
     public PaymentModelDao insertPaymentWithFirstTransaction(final PaymentModelDao payment, final PaymentTransactionModelDao paymentTransaction, final InternalCallContext context) {
+
         payment.setTenantRecordId(context.getTenantRecordId());
         paymentTransaction.setTenantRecordId(context.getTenantRecordId());
+        payment.setAccountRecordId(context.getAccountRecordId());
+        paymentTransaction.setAccountRecordId(context.getAccountRecordId());
 
         synchronized (this) {
             payments.put(payment.getId(), payment);
             mockNonEntityDao.addTenantRecordIdMapping(payment.getId(), context);
+            mockNonEntityDao.addAccountRecordIdMapping((payment.getId()), context);
 
             transactions.put(paymentTransaction.getId(), paymentTransaction);
             mockNonEntityDao.addTenantRecordIdMapping(paymentTransaction.getId(), context);
+            mockNonEntityDao.addAccountRecordIdMapping((paymentTransaction.getId()), context);
         }
         return payment;
     }
@@ -193,10 +200,12 @@ public class MockPaymentDao implements PaymentDao {
     @Override
     public PaymentTransactionModelDao updatePaymentWithNewTransaction(final UUID paymentId, final PaymentTransactionModelDao paymentTransaction, final InternalCallContext context) {
         paymentTransaction.setTenantRecordId(context.getTenantRecordId());
+        paymentTransaction.setAccountRecordId(context.getAccountRecordId());
 
         synchronized (this) {
             transactions.put(paymentTransaction.getId(), paymentTransaction);
             mockNonEntityDao.addTenantRecordIdMapping(paymentId, context);
+            mockNonEntityDao.addAccountRecordIdMapping((paymentTransaction.getId()), context);
         }
         return paymentTransaction;
     }
diff --git a/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java b/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
index 4cf6eee..2aaa167 100644
--- a/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
+++ b/payment/src/test/java/org/killbill/billing/payment/TestPaymentHelper.java
@@ -137,6 +137,7 @@ public class TestPaymentHelper {
             Mockito.when(accountInternalApi.getAccountById(Mockito.<UUID>any(), Mockito.<InternalTenantContext>any())).thenReturn(account);
             Mockito.when(accountInternalApi.getAccountByKey(Mockito.anyString(), Mockito.<InternalTenantContext>any())).thenReturn(account);
             mockNonEntityDao.addTenantRecordIdMapping(account.getId(), internalCallContext);
+            mockNonEntityDao.addAccountRecordIdMapping(account.getId(), internalCallContext);
         } else {
             account = accountApi.createAccount(accountData, context);
         }
diff --git a/payment/src/test/java/org/killbill/billing/payment/TestRetryService.java b/payment/src/test/java/org/killbill/billing/payment/TestRetryService.java
index 6a1d082..9c97fa7 100644
--- a/payment/src/test/java/org/killbill/billing/payment/TestRetryService.java
+++ b/payment/src/test/java/org/killbill/billing/payment/TestRetryService.java
@@ -32,11 +32,10 @@ import org.killbill.billing.invoice.api.Invoice;
 import org.killbill.billing.payment.api.Payment;
 import org.killbill.billing.payment.api.PaymentApiException;
 import org.killbill.billing.payment.api.PluginProperty;
-import org.killbill.billing.payment.invoice.InvoicePaymentRoutingPluginApi;
 import org.killbill.billing.payment.dao.MockPaymentDao;
-import org.killbill.billing.payment.dao.PaymentTransactionModelDao;
 import org.killbill.billing.payment.dao.PaymentAttemptModelDao;
-import org.killbill.billing.payment.glue.DefaultPaymentService;
+import org.killbill.billing.payment.dao.PaymentTransactionModelDao;
+import org.killbill.billing.payment.invoice.InvoicePaymentRoutingPluginApi;
 import org.killbill.billing.payment.provider.MockPaymentProviderPlugin;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
@@ -87,7 +86,6 @@ public class TestRetryService extends PaymentTestSuiteNoDB {
         return payment;
     }
 
-
     // PLUGIN_EXCEPTION will lead to UNKNOWN row that will not be retried by the plugin
     @Test(groups = "fast")
     public void testAbortedPlugin() throws Exception {
@@ -136,7 +134,7 @@ public class TestRetryService extends PaymentTestSuiteNoDB {
         final String transactionExternalKey = UUID.randomUUID().toString();
         try {
             pluginRoutingPaymentProcessor.createPurchase(false, account, account.getPaymentMethodId(), null, amount, Currency.USD, paymentExternalKey, transactionExternalKey,
-                                                            createPropertiesForInvoice(invoice), ImmutableList.<String>of(InvoicePaymentRoutingPluginApi.PLUGIN_NAME), callContext, internalCallContext);
+                                                         createPropertiesForInvoice(invoice), ImmutableList.<String>of(InvoicePaymentRoutingPluginApi.PLUGIN_NAME), callContext, internalCallContext);
         } catch (final PaymentApiException e) {
             failed = true;
         }
@@ -149,7 +147,6 @@ public class TestRetryService extends PaymentTestSuiteNoDB {
         final List<PaymentTransactionModelDao> transactions = paymentDao.getTransactionsForPayment(payment.getId(), internalCallContext);
         assertEquals(transactions.size(), 1);
 
-
         for (int curFailure = 0; curFailure < maxTries; curFailure++) {
 
             // Set plugin to fail with specific type unless this is the last attempt and we want a success
@@ -157,11 +154,10 @@ public class TestRetryService extends PaymentTestSuiteNoDB {
                 setPaymentFailure(failureType);
             }
 
+
             moveClockForFailureType(failureType, curFailure);
             final int curFailureCondition = curFailure;
 
-
-
             try {
                 await().atMost(5, SECONDS).until(new Callable<Boolean>() {
                     @Override
diff --git a/util/src/test/java/org/killbill/billing/dao/MockNonEntityDao.java b/util/src/test/java/org/killbill/billing/dao/MockNonEntityDao.java
index 896240a..d7bfc00 100644
--- a/util/src/test/java/org/killbill/billing/dao/MockNonEntityDao.java
+++ b/util/src/test/java/org/killbill/billing/dao/MockNonEntityDao.java
@@ -34,11 +34,16 @@ import org.killbill.billing.util.dao.TableName;
 public class MockNonEntityDao implements NonEntityDao {
 
     private final Map<UUID, Long> tenantRecordIdMappings = new HashMap<UUID, Long>();
+    private final Map<UUID, Long> accountRecordIdMappings = new HashMap<UUID, Long>();
 
     public void addTenantRecordIdMapping(final UUID objectId, final InternalTenantContext context) {
         tenantRecordIdMappings.put(objectId, context.getTenantRecordId());
     }
 
+    public void addAccountRecordIdMapping(final UUID objectId, final InternalTenantContext context) {
+        accountRecordIdMappings.put(objectId, context.getAccountRecordId());
+    }
+
     @Override
     public Long retrieveRecordIdFromObject(final UUID objectId, final ObjectType objectType, @Nullable final CacheController<Object, Object> cache) {
         return null;
@@ -46,7 +51,7 @@ public class MockNonEntityDao implements NonEntityDao {
 
     @Override
     public Long retrieveAccountRecordIdFromObject(final UUID objectId, final ObjectType objectType, @Nullable final CacheController<Object, Object> cache) {
-        return null;
+        return accountRecordIdMappings.get(objectId);
     }
 
     @Override