@Test(groups = "slow") public void testPostExternalChargeOnExistingInvoice() throws Exception { // Verify the initial invoice balance final BigDecimal invoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); Assert.assertEquals(invoiceBalance.compareTo(BigDecimal.ZERO), 1); // Verify the initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(accountBalance, invoiceBalance); // Post an external charge final BigDecimal externalChargeAmount = BigDecimal.TEN; final InvoiceItem externalChargeInvoiceItem = invoiceUserApi.insertExternalChargeForInvoice(accountId, invoiceId, externalChargeAmount, UUID.randomUUID().toString(), clock.getUTCToday(), accountCurrency, callContext); verifyExternalChargeOnExistingInvoice(invoiceBalance, null, externalChargeAmount, externalChargeInvoiceItem); }
@Test(groups = "slow") public void testPostExternalChargeForBundleOnNewInvoice() throws Exception { // Initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); // Post an external charge final BigDecimal externalChargeAmount = BigDecimal.TEN; final UUID bundleId = UUID.randomUUID(); final InvoiceItem externalChargeInvoiceItem = invoiceUserApi.insertExternalChargeForBundle(accountId, bundleId, externalChargeAmount, UUID.randomUUID().toString(), clock.getUTCToday(), accountCurrency, callContext); verifyExternalChargeOnNewInvoice(accountBalance, bundleId, externalChargeAmount, externalChargeInvoiceItem); }
@Test(groups = "slow") public void testAdjustPartialInvoice() throws Exception { // Verify the initial invoice balance final BigDecimal invoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); Assert.assertEquals(invoiceBalance.compareTo(BigDecimal.ZERO), 1); // Verify the initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(accountBalance, invoiceBalance); // Adjust the invoice for a fraction of the balance final BigDecimal creditAmount = invoiceBalance.divide(BigDecimal.TEN); final InvoiceItem creditInvoiceItem = invoiceUserApi.insertCreditForInvoice(accountId, invoiceId, creditAmount, clock.getUTCToday(), accountCurrency, callContext); Assert.assertEquals(creditInvoiceItem.getInvoiceId(), invoiceId); Assert.assertEquals(creditInvoiceItem.getInvoiceItemType(), InvoiceItemType.CREDIT_ADJ); Assert.assertEquals(creditInvoiceItem.getAccountId(), accountId); Assert.assertEquals(creditInvoiceItem.getAmount(), creditAmount.negate()); Assert.assertEquals(creditInvoiceItem.getCurrency(), accountCurrency); Assert.assertNull(creditInvoiceItem.getLinkedItemId()); // Verify the adjusted invoice balance final BigDecimal adjustedInvoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); verifyAdjustedInvoiceBalance(invoiceBalance, creditAmount, adjustedInvoiceBalance); // Verify the adjusted account balance final BigDecimal adjustedAccountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(adjustedAccountBalance, adjustedInvoiceBalance); }
@Test(groups = "slow") public void testAdjustPartialInvoiceItem() throws Exception { final InvoiceItem invoiceItem = invoiceUserApi.getInvoice(invoiceId, callContext).getInvoiceItems().get(0); // Verify we picked a non zero item Assert.assertEquals(invoiceItem.getAmount().compareTo(BigDecimal.ZERO), 1); // Verify the initial invoice balance final BigDecimal invoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); Assert.assertEquals(invoiceBalance.compareTo(BigDecimal.ZERO), 1); // Verify the initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(accountBalance, invoiceBalance); // Adjust the invoice for a fraction of the balance final BigDecimal adjAmount = invoiceItem.getAmount().divide(BigDecimal.TEN); final InvoiceItem adjInvoiceItem = invoiceUserApi.insertInvoiceItemAdjustment(accountId, invoiceId, invoiceItem.getId(), clock.getUTCToday(), adjAmount, accountCurrency, callContext); Assert.assertEquals(adjInvoiceItem.getInvoiceId(), invoiceId); Assert.assertEquals(adjInvoiceItem.getInvoiceItemType(), InvoiceItemType.ITEM_ADJ); Assert.assertEquals(adjInvoiceItem.getAccountId(), accountId); Assert.assertEquals(adjInvoiceItem.getAmount(), adjAmount.negate()); Assert.assertEquals(adjInvoiceItem.getCurrency(), accountCurrency); Assert.assertEquals(adjInvoiceItem.getLinkedItemId(), invoiceItem.getId()); // Verify the adjusted invoice balance final BigDecimal adjustedInvoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); verifyAdjustedInvoiceBalance(invoiceBalance, adjAmount, adjustedInvoiceBalance); // Verify the adjusted account balance final BigDecimal adjustedAccountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(adjustedAccountBalance, adjustedInvoiceBalance); }
@Test(groups = "slow") public void testAdjustFullInvoiceItem() throws Exception { final InvoiceItem invoiceItem = invoiceUserApi.getInvoice(invoiceId, callContext).getInvoiceItems().get(0); // Verify we picked a non zero item Assert.assertEquals(invoiceItem.getAmount().compareTo(BigDecimal.ZERO), 1); // Verify the initial invoice balance final BigDecimal invoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); Assert.assertEquals(invoiceBalance.compareTo(BigDecimal.ZERO), 1); // Verify the initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(accountBalance, invoiceBalance); // Adjust the invoice for the full amount final InvoiceItem adjInvoiceItem = invoiceUserApi.insertInvoiceItemAdjustment(accountId, invoiceId, invoiceItem.getId(), clock.getUTCToday(), callContext); Assert.assertEquals(adjInvoiceItem.getInvoiceId(), invoiceId); Assert.assertEquals(adjInvoiceItem.getInvoiceItemType(), InvoiceItemType.ITEM_ADJ); Assert.assertEquals(adjInvoiceItem.getAccountId(), accountId); Assert.assertEquals(adjInvoiceItem.getAmount(), invoiceItem.getAmount().negate()); Assert.assertEquals(adjInvoiceItem.getCurrency(), accountCurrency); Assert.assertEquals(adjInvoiceItem.getLinkedItemId(), invoiceItem.getId()); // Verify the adjusted invoice balance final BigDecimal adjustedInvoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); verifyAdjustedInvoiceBalance(invoiceBalance, invoiceItem.getAmount(), adjustedInvoiceBalance); // Verify the adjusted account balance final BigDecimal adjustedAccountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(adjustedAccountBalance, adjustedInvoiceBalance); }
@Test(groups = "slow") public void testPostExternalChargeOnNewInvoice() throws Exception { // Initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); // Post an external charge final BigDecimal externalChargeAmount = BigDecimal.TEN; final InvoiceItem externalChargeInvoiceItem = invoiceUserApi.insertExternalCharge(accountId, externalChargeAmount, UUID.randomUUID().toString(), clock.getUTCToday(), accountCurrency, callContext); verifyExternalChargeOnNewInvoice(accountBalance, null, externalChargeAmount, externalChargeInvoiceItem); }
@Test(groups = "slow") public void testPostExternalChargeForBundleOnExistingInvoice() throws Exception { // Verify the initial invoice balance final BigDecimal invoiceBalance = invoiceUserApi.getInvoice(invoiceId, callContext).getBalance(); Assert.assertEquals(invoiceBalance.compareTo(BigDecimal.ZERO), 1); // Verify the initial account balance final BigDecimal accountBalance = invoiceUserApi.getAccountBalance(accountId, callContext); Assert.assertEquals(accountBalance, invoiceBalance); // Post an external charge final BigDecimal externalChargeAmount = BigDecimal.TEN; final UUID bundleId = UUID.randomUUID(); final InvoiceItem externalChargeInvoiceItem = invoiceUserApi.insertExternalChargeForInvoiceAndBundle(accountId, invoiceId, bundleId, externalChargeAmount, UUID.randomUUID().toString(), clock.getUTCToday(), accountCurrency, callContext); verifyExternalChargeOnExistingInvoice(invoiceBalance, bundleId, externalChargeAmount, externalChargeInvoiceItem); }