diff --git a/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java b/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
index 4666edf..917c67c 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/dao/TestInvoiceDao.java
@@ -605,16 +605,16 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
final RecurringInvoiceItem item2 = new RecurringInvoiceItem(invoice.getId(), accountId, bundleId, UUID.randomUUID(), "test plan", "test phase B", startDate,
endDate, amount, amount, Currency.USD);
invoiceUtil.createInvoiceItem(item2, internalCallContext);
- BigDecimal balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
- assertEquals(balance.compareTo(new BigDecimal("20.00")), 0);
+ BigDecimal balancePriorRefund = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ assertEquals(balancePriorRefund.compareTo(new BigDecimal("20.00")), 0);
// Pay the whole thing
final UUID paymentId = UUID.randomUUID();
final BigDecimal payment1 = amount;
final InvoicePayment payment = new DefaultInvoicePayment(InvoicePaymentType.ATTEMPT, paymentId, invoice.getId(), new DateTime(), payment1, Currency.USD);
invoiceUtil.createPayment(payment, internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
- assertEquals(balance.compareTo(new BigDecimal("0.00")), 0);
+ balancePriorRefund = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ assertEquals(balancePriorRefund.compareTo(new BigDecimal("0.00")), 0);
// Repair the item (And add CBA item that should be generated)
final InvoiceItem repairItem = new RepairAdjInvoiceItem(invoice.getId(), accountId, startDate, endDate, amount.negate(), Currency.USD, item2.getId());
@@ -624,25 +624,37 @@ public class TestInvoiceDao extends InvoiceTestSuiteWithEmbeddedDB {
invoiceUtil.createInvoiceItem(cbaItem, internalCallContext);
final Map<UUID, BigDecimal> itemAdjustment = new HashMap<UUID, BigDecimal>();
- itemAdjustment.put(item2.getId(), refundAmount);
+ // PAss a null value to let invoice calculate the amount to adjust
+ itemAdjustment.put(item2.getId(), null);
invoiceDao.createRefund(paymentId, refundAmount, true, itemAdjustment, UUID.randomUUID(), internalCallContext);
- balance = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ balancePriorRefund = invoiceDao.getAccountBalance(accountId, internalCallContext);
final boolean partialRefund = refundAmount.compareTo(amount) < 0;
final BigDecimal cba = invoiceDao.getAccountCBA(accountId, internalCallContext);
final InvoiceModelDao savedInvoice = invoiceDao.getById(invoice.getId(), internalCallContext);
- final BigDecimal expectedCba = balance.compareTo(BigDecimal.ZERO) < 0 ? balance.negate() : BigDecimal.ZERO;
+ final BigDecimal expectedCba = balancePriorRefund.compareTo(BigDecimal.ZERO) < 0 ? balancePriorRefund.negate() : BigDecimal.ZERO;
assertEquals(cba.compareTo(expectedCba), 0);
+
+ // Let's re-calculate them from invoice
+ final BigDecimal balanceAfterRefund = invoiceDao.getAccountBalance(accountId, internalCallContext);
+ final BigDecimal cbaAfterRefund = invoiceDao.getAccountCBA(accountId, internalCallContext);
+
if (partialRefund) {
// IB = 20 (rec) - 20 (repair) + 20 (cba) - (20 -7) = 7; AB = IB - CBA = 7 - 20 = -13
- assertEquals(balance.compareTo(new BigDecimal("-13.0")), 0);
+ assertEquals(balancePriorRefund.compareTo(new BigDecimal("-13.0")), 0);
assertEquals(savedInvoice.getInvoiceItems().size(), 4);
+ assertEquals(balanceAfterRefund.compareTo(new BigDecimal("-13.0")), 0);
+ assertEquals(cbaAfterRefund.compareTo(expectedCba), 0);
} else {
- assertEquals(balance.compareTo(new BigDecimal("0.0")), 0);
+ assertEquals(balancePriorRefund.compareTo(new BigDecimal("0.0")), 0);
assertEquals(savedInvoice.getInvoiceItems().size(), 4);
+ assertEquals(balanceAfterRefund.compareTo(BigDecimal.ZERO), 0);
+ assertEquals(cbaAfterRefund.compareTo(expectedCba), 0);
}
+
+
}
@Test(groups = "slow")
diff --git a/payment/src/test/java/com/ning/billing/payment/provider/TestExternalPaymentProviderPlugin.java b/payment/src/test/java/com/ning/billing/payment/provider/TestExternalPaymentProviderPlugin.java
index c08eabb..bed1143 100644
--- a/payment/src/test/java/com/ning/billing/payment/provider/TestExternalPaymentProviderPlugin.java
+++ b/payment/src/test/java/com/ning/billing/payment/provider/TestExternalPaymentProviderPlugin.java
@@ -61,44 +61,6 @@ public class TestExternalPaymentProviderPlugin extends PaymentTestSuiteNoDB {
Assert.assertEquals(paymentInfoPlugin.getStatus(), PaymentPluginStatus.PROCESSED);
final PaymentInfoPlugin retrievedPaymentInfoPlugin = plugin.getPaymentInfo(accountId, paymentId, callContext);
- Assert.assertEquals(retrievedPaymentInfoPlugin, paymentInfoPlugin);
- }
-
- @Test(groups = "fast", expectedExceptions = PaymentPluginApiException.class)
- public void testRefundForNonExistingPayment() throws Exception {
- plugin.processRefund(UUID.randomUUID(), UUID.randomUUID(), BigDecimal.ONE, Currency.GBP, callContext);
- }
-
- @Test(groups = "fast", expectedExceptions = PaymentPluginApiException.class)
- public void testRefundTooLarge() throws Exception {
-
- final UUID accountId = UUID.randomUUID();
- final UUID paymentId = UUID.randomUUID();
- final UUID paymentMethodId = UUID.randomUUID();
-
- plugin.processPayment(accountId, paymentId, paymentMethodId, BigDecimal.ZERO, Currency.EUR, callContext);
- plugin.processRefund(accountId, paymentId, BigDecimal.ONE, Currency.EUR, callContext);
- }
-
- @Test(groups = "fast")
- public void testRefundTooLargeMultipleTimes() throws Exception {
-
- final UUID accountId = UUID.randomUUID();
- final UUID paymentId = UUID.randomUUID();
- final UUID paymentMethodId = UUID.randomUUID();
-
- plugin.processPayment(accountId, paymentId, paymentMethodId, BigDecimal.TEN, Currency.EUR, callContext);
-
- final Account account = Mockito.mock(Account.class);
- for (int i = 0; i < 10; i++) {
- plugin.processRefund(accountId, paymentId, BigDecimal.ONE, Currency.EUR, callContext);
- }
-
- try {
- plugin.processRefund(accountId, paymentId, BigDecimal.ONE, Currency.EUR, callContext);
- Assert.fail("Shouldn't have been able to refund");
- } catch (PaymentPluginApiException e) {
- Assert.assertTrue(true);
- }
+ Assert.assertEquals(retrievedPaymentInfoPlugin.getStatus(), PaymentPluginStatus.PROCESSED);
}
}