private void verifyRefund(final Invoice invoice, final BigDecimal invoiceAmount, final BigDecimal refundAmount, final BigDecimal finalInvoiceAmount,
final boolean adjusted, final Map<UUID, BigDecimal> invoiceItemIdsWithAmounts) throws InvoiceApiException {
final InvoicePayment payment = createAndPersistPayment(invoiceInternalApi, clock, invoice.getId(), invoiceAmount, CURRENCY, internalCallContext);
final BigDecimal initialInvoiceBalance = invoiceInternalApi.getInvoiceById(invoice.getId(), internalCallContext).getBalance();
Assert.assertEquals(initialInvoiceBalance.compareTo(BigDecimal.ZERO), 0);
final InvoicePayment refund = invoiceInternalApi.recordRefund(payment.getPaymentId(), refundAmount, adjusted, invoiceItemIdsWithAmounts,
UUID.randomUUID().toString(), internalCallContext);
Assert.assertEquals(refund.getAmount().compareTo(refundAmount.negate()), 0);
Assert.assertEquals(refund.getCurrency(), CURRENCY);
Assert.assertEquals(refund.getInvoiceId(), invoice.getId());
Assert.assertEquals(refund.getPaymentId(), payment.getPaymentId());
Assert.assertEquals(refund.getType(), InvoicePaymentType.REFUND);
final BigDecimal newInvoiceBalance = invoiceInternalApi.getInvoiceById(invoice.getId(), internalCallContext).getBalance();
Assert.assertEquals(newInvoiceBalance.compareTo(finalInvoiceAmount), 0);
}
}