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