@Test(groups = "slow") public void testDryRunTargetDateWithLeadingProration() throws Exception { final DateTime initialCreationDate = new DateTime(2014, 1, 2, 0, 0, 0, 0, testTimeZone); clock.setTime(initialCreationDate); // billing date for the monthly final int billingDay = 14; final Account account = createAccountWithNonOsgiPaymentMethod(getAccountData(billingDay)); // Create the monthly createBaseEntitlementAndCheckForCompletion(account.getId(), "bundleKey", "Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, NextEvent.CREATE, NextEvent.BLOCK, NextEvent.INVOICE); final List<ExpectedInvoiceItemCheck> expectedInvoices = new ArrayList<ExpectedInvoiceItemCheck>(); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2014, 2, 1), new LocalDate(2014, 2, 14), InvoiceItemType.RECURRING, new BigDecimal("104.82"))); Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2014, 2, 13), DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2014, 2, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2014, 2, 14), new LocalDate(2014, 3, 14), InvoiceItemType.RECURRING, new BigDecimal("249.95"))); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2014, 2, 14), DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2014, 2, 14)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); }
@Test(groups = "slow") public void testDryRunTargetDatesInTheFuture() throws Exception { final DateTime initialCreationDate = new DateTime(2014, 1, 2, 0, 0, 0, 0, testTimeZone); clock.setTime(initialCreationDate); final Account account = createAccountWithNonOsgiPaymentMethod(getAccountData(0)); // Create the monthly createBaseEntitlementAndCheckForCompletion(account.getId(), "bundleKey", "Shotgun", ProductCategory.BASE, BillingPeriod.MONTHLY, NextEvent.CREATE, NextEvent.BLOCK, NextEvent.INVOICE); final List<ExpectedInvoiceItemCheck> expectedInvoices = new ArrayList<ExpectedInvoiceItemCheck>(); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2014, 2, 1), new LocalDate(2014, 3, 1), InvoiceItemType.RECURRING, new BigDecimal("249.95"))); Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2014, 2, 28), DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2014, 2, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2014, 3, 1), new LocalDate(2014, 4, 1), InvoiceItemType.RECURRING, new BigDecimal("249.95"))); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2014, 3, 1), DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2014, 3, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2014, 4, 1), new LocalDate(2014, 5, 1), InvoiceItemType.RECURRING, new BigDecimal("249.95"))); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2014, 4, 1), DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2014, 4, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2014, 5, 1), new LocalDate(2014, 6, 1), InvoiceItemType.RECURRING, new BigDecimal("249.95"))); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2014, 5, 3), DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2014, 5, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); }
final Invoice generatedInvoice = invoiceApi.triggerDryRunInvoiceGeneration(accountId, inputDate, dryRunArguments, callContext); return Response.status(Status.OK).entity(new InvoiceJson(generatedInvoice, true, null, null)).build(); } catch (InvoiceApiException e) {
Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear();
Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), clock.getUTCToday(), dryRun, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, toBeChecked);
final Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2012, 5, 1), new TestDryRunArguments(DryRunType.TARGET_DATE), callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, ImmutableList.<ExpectedInvoiceItemCheck>of(new ExpectedInvoiceItemCheck(new LocalDate(2012, 5, 1), new LocalDate(2012, 6, 1), InvoiceItemType.RECURRING, new BigDecimal("29.95")),
expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2017, 4, 1), new LocalDate(2017, 4, 1), InvoiceItemType.CBA_ADJ, new BigDecimal("19.95"))); final Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2017, 5, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices);
Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2015, 2, 14), DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2015, 2, 14)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2015, 2, 3), DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2015, 2, 3)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2015, 2, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices);
Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices);
bpSubscription.getBundleId(), null, null); try { invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2012, 6, 1), dryRun, callContext); fail(); } catch (final InvoiceApiException e) {
Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, dryRunUpcomingInvoiceWithFilterArg1, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2018, 2, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, dryRunUpcomingInvoiceWithFilterArg2, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2018, 2, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, dryRunUpcomingInvoiceWithFilterArg3, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2018, 2, 1)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices);
bpSubscription.getBundleId(), null, null); try { invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(2012, 6, 1), dryRun, callContext); fail(); } catch (final InvoiceApiException e) {
Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.clear(); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2015, 2, 14), new LocalDate(2015, 3, 14), InvoiceItemType.RECURRING, new BigDecimal("249.95"))); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2015, 2, 14), new LocalDate(2015, 3, 14), InvoiceItemType.RECURRING, new BigDecimal("29.95"))); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, dryRunUpcomingInvoiceWithFilterArg1, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2015, 2, 14)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2015, 2, 14), new LocalDate(2015, 3, 14), InvoiceItemType.RECURRING, new BigDecimal("249.95"))); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2015, 2, 14), new LocalDate(2015, 3, 14), InvoiceItemType.RECURRING, new BigDecimal("29.95"))); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, dryRunUpcomingInvoiceWithFilterArg2, callContext); assertEquals(dryRunInvoice.getTargetDate(), new LocalDate(2015, 2, 14)); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), null, DRY_RUN_UPCOMING_INVOICE_ARG, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices);
Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), clock.getUTCToday(), dryRun, callContext); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2012, 4, 1), null, InvoiceItemType.FIXED, new BigDecimal("0"))); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), clock.getUTCToday(), dryRun, callContext); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2012, 4, 1), new LocalDate(2012, 5, 1), InvoiceItemType.RECURRING, new BigDecimal("399.95"))); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), clock.getUTCToday(), dryRun, callContext); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2012, 4, 1), new LocalDate(2012, 5, 1), InvoiceItemType.REPAIR_ADJ, new BigDecimal("-399.95")));
final Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), clock.getUTCToday(), dryRun, callContext); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2015, 9, 1), null, InvoiceItemType.FIXED, new BigDecimal("0"))); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices);
Invoice invoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), clock.getUTCToday(), new TestDryRunArguments(DryRunType.TARGET_DATE), callContext); assertListenerStatus(); final ImmutableList<ExpectedInvoiceItemCheck> expected = ImmutableList.<ExpectedInvoiceItemCheck>of(new ExpectedInvoiceItemCheck(new LocalDate(2012, 4, 1), null, InvoiceItemType.FIXED, BigDecimal.ZERO),
final Invoice dryRunInvoice1 = invoiceUserApi.triggerDryRunInvoiceGeneration(createdEntitlement.getAccountId(), futureDate, DRY_RUN_TARGET_DATE_ARG, callContext); assertEquals(dryRunInvoice1.getInvoiceItems().size(), 1); assertEquals(dryRunInvoice1.getInvoiceItems().get(0).getInvoiceItemType(), InvoiceItemType.FIXED); invoiceUserApi.triggerDryRunInvoiceGeneration(createdEntitlement.getAccountId(), futureDate.minusDays(1), dryRunSubscriptionActionArg, callContext); fail("Should fail to trigger dryRun invoice prior subscription starts"); } catch (final InvoiceApiException e) { final Invoice dryRunInvoice2 = invoiceUserApi.triggerDryRunInvoiceGeneration(createdEntitlement.getAccountId(), futureDate, dryRunSubscriptionActionArg, callContext); assertEquals(dryRunInvoice2.getInvoiceItems().size(), 1); assertEquals(dryRunInvoice2.getInvoiceItems().get(0).getInvoiceItemType(), InvoiceItemType.FIXED);
Invoice dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), clock.getUTCToday(), dryRun, callContext); expectedInvoices.add(new ExpectedInvoiceItemCheck(initialCreationDate.toLocalDate(), null, InvoiceItemType.FIXED, new BigDecimal("0"))); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(nextDate, testTimeZone), dryRun, callContext); invoiceChecker.checkInvoiceNoAudits(dryRunInvoice, expectedInvoices); dryRunInvoice = invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), new LocalDate(nextDate, testTimeZone), dryRun, callContext); expectedInvoices.add(new ExpectedInvoiceItemCheck(new LocalDate(2012, 3, 31), new LocalDate(2012, 4, 30), InvoiceItemType.RECURRING, new BigDecimal("29.95")));
subscription.getId(), subscription.getBundleId(), null, null); try { invoiceUserApi.triggerDryRunInvoiceGeneration(account.getId(), clock.getUTCToday(), dryRun, callContext); Assert.fail("Call should return no invoices"); } catch (final InvoiceApiException e) {