killbill-uncached

Adds test for tax endDate

10/30/2018 9:31:39 AM

Details

diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithTaxItems.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithTaxItems.java
index 2710710..0a14679 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithTaxItems.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithTaxItems.java
@@ -251,6 +251,102 @@ public class TestWithTaxItems extends TestIntegrationBase {
     }
 
     @Test(groups = "slow")
+    public void testTaxRateStartAndEndDate() throws Exception {
+        // Set clock to the initial start date - we implicitly assume here that the account timezone is UTC
+        clock.setDay(new LocalDate(2017, 11, 15));
+
+        final AccountData accountData = getAccountData(null);
+        final Account account = createAccountWithNonOsgiPaymentMethod(accountData);
+        accountChecker.checkAccount(account.getId(), accountData, callContext);
+
+        // Create original subscription (Trial PHASE) -> $0 invoice.
+        final DefaultEntitlement bpSubscription = createBaseEntitlementAndCheckForCompletion(
+                account.getId(),
+                "bundleKey",
+                "Pistol",
+                ProductCategory.BASE,
+                BillingPeriod.MONTHLY,
+                NextEvent.CREATE,
+                NextEvent.BLOCK,
+                NextEvent.INVOICE
+                                                                                            );
+        invoiceChecker.checkInvoice(account.getId(), 1, callContext, new ExpectedInvoiceItemCheck(new LocalDate(2017, 11, 15), null, InvoiceItemType.FIXED, new BigDecimal("0")));
+        subscriptionChecker.checkSubscriptionCreated(bpSubscription.getId(), internalCallContext);
+
+        busHandler.pushExpectedEvents(NextEvent.INVOICE);
+        invoiceUserApi.insertCredit(account.getId(), new BigDecimal("100"), clock.getUTCToday(), account.getCurrency(), true, "VIP", null, null, callContext);
+        assertListenerStatus();
+
+        invoiceChecker.checkInvoice(account.getId(), 2, callContext,
+                                    new ExpectedInvoiceItemCheck(new LocalDate(2017, 11, 15), new LocalDate(2017, 11, 15), InvoiceItemType.CBA_ADJ, new BigDecimal("100")),
+                                    new ExpectedInvoiceItemCheck(new LocalDate(2017, 11, 15), new LocalDate(2017, 11, 15), InvoiceItemType.CREDIT_ADJ, new BigDecimal("-100")));
+
+
+        // Make sure TestInvoicePluginApi will return an additional TAX item
+        testInvoicePluginApi.addTaxItem(
+                new TaxInvoiceItem(
+                        UUID.randomUUID(),
+                        null,
+                        null,
+                        account.getId(),
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        new LocalDate(2017, 12, 15),
+                        new LocalDate(2017, 12, 31),
+                        "Tax Item 2017",
+                        BigDecimal.ONE,
+                        account.getCurrency(),
+                        null,
+                        null
+                )
+        );
+        testInvoicePluginApi.addTaxItem(
+                new TaxInvoiceItem(
+                        UUID.randomUUID(),
+                        null,
+                        null,
+                        account.getId(),
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        null,
+                        new LocalDate(2018, 1, 1),
+                        new LocalDate(2018, 1, 15),
+                        "Tax Item 2018",
+                        BigDecimal.TEN,
+                        account.getCurrency(),
+                        null,
+                        null
+                )
+        );
+
+        // Move to Evergreen PHASE to verify non-dry-run scenario
+        busHandler.pushExpectedEvents(NextEvent.PHASE, NextEvent.INVOICE);
+        clock.addDays(30);
+        assertListenerStatus();
+
+        invoiceChecker.checkInvoice(account.getId(), 3, callContext,
+                                    new ExpectedInvoiceItemCheck(new LocalDate(2017, 12, 15), new LocalDate(2018, 1, 15), InvoiceItemType.RECURRING, new BigDecimal("29.95")),
+                                    new ExpectedInvoiceItemCheck(new LocalDate(2017, 12, 15), new LocalDate(2017, 12, 31), InvoiceItemType.TAX, new BigDecimal("1.0")),
+                                    new ExpectedInvoiceItemCheck(new LocalDate(2018, 1, 1), new LocalDate(2018, 1, 15), InvoiceItemType.TAX, new BigDecimal("10.0")),
+                                    new ExpectedInvoiceItemCheck(new LocalDate(2017, 12, 15), new LocalDate(2017, 12, 15), InvoiceItemType.CBA_ADJ, new BigDecimal("-40.95")));
+    }
+
+    @Test(groups = "slow")
     public void testUpdateTaxItems() throws Exception {
 
         clock.setDay(new LocalDate(2012, 4, 1));
@@ -315,7 +411,37 @@ public class TestWithTaxItems extends TestIntegrationBase {
         public List<InvoiceItem> getAdditionalInvoiceItems(final Invoice invoice, final boolean isDryRun, final Iterable<PluginProperty> pluginProperties, final CallContext callContext) {
             final List<InvoiceItem> result = new ArrayList<InvoiceItem>();
             for (final TaxInvoiceItem item : taxItems) {
-                result.add(new TaxInvoiceItem(item.getId(), invoice.getId(), invoice.getAccountId(), item.getBundleId(), "Tax Item", item.getStartDate(), item.getAmount(), invoice.getCurrency()));
+                final String description;
+                if (item.getDescription() != null) {
+                    description = item.getDescription();
+                } else {
+                    description = "Tax Item";
+                }
+
+                result.add(
+                        new TaxInvoiceItem(
+                                item.getId(),
+                                item.getCreatedDate(),
+                                invoice.getId(),
+                                invoice.getAccountId(),
+                                item.getBundleId(),
+                                item.getSubscriptionId(),
+                                item.getProductName(),
+                                item.getPlanName(),
+                                item.getPhaseName(),
+                                item.getUsageName(),
+                                item.getPrettyProductName(),
+                                item.getPrettyPlanName(),
+                                item.getPrettyPhaseName(),
+                                item.getPrettyUsageName(),
+                                item.getStartDate(),
+                                item.getEndDate(),
+                                description,
+                                item.getAmount(),
+                                invoice.getCurrency(),
+                                item.getLinkedItemId(),
+                                item.getItemDetails())
+                          );
             }
             return result;
         }