use of org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger in project killbill by killbill.
the class TestFixedAndRecurringInvoiceItemGenerator method testInAdvance5.
//
// Scenario: Call processRecurringEvent 2 in a row
// - IN_ADVANCE
// - one CREATE billing event
// - one future CHANGE billing event (used to compute period endDate)
// - targetDate = CHANGE date
//
// => Expect one item + 1 notification
//
@Test(groups = "fast")
public void testInAdvance5() throws InvoiceApiException {
final BillingMode billingMode = BillingMode.IN_ADVANCE;
final UUID invoiceId = UUID.randomUUID();
final InvoiceItemGeneratorLogger invoiceItemGeneratorLogger = new InvoiceItemGeneratorLogger(invoiceId, account.getId(), "recurring", logger);
final Map<UUID, SubscriptionFutureNotificationDates> perSubscriptionFutureNotificationDates = new HashMap<>();
final LocalDate eventDate1 = new LocalDate("2020-01-01");
final BillingEvent event1 = createDefaultBillingEvent(eventDate1, null, BigDecimal.TEN, SubscriptionBaseTransitionType.CREATE, 1, 1, billingMode);
final LocalDate eventDate2 = new LocalDate("2020-01-15");
final BillingEvent event2 = createDefaultBillingEvent(eventDate2, null, BigDecimal.ONE, SubscriptionBaseTransitionType.CHANGE, 1, 2, billingMode);
final LocalDate targetDate = eventDate2;
List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, event2, targetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
assertEquals(invoiceItems.size(), 1);
assertEquals(invoiceItems.get(0).getStartDate(), eventDate1);
assertEquals(invoiceItems.get(0).getEndDate(), eventDate2);
assertEquals(invoiceItems.get(0).getAmount().compareTo(BigDecimal.TEN), -1);
SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
assertEquals(notifications.getNextRecurringDate(), eventDate2);
// Call processRecurringEvent another time for eventDate2
invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event2, null, targetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
assertEquals(invoiceItems.size(), 1);
assertEquals(invoiceItems.get(0).getStartDate(), eventDate2);
assertEquals(invoiceItems.get(0).getEndDate(), eventDate1.plusMonths(1));
assertEquals(invoiceItems.get(0).getAmount().compareTo(BigDecimal.TEN), -1);
notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
assertEquals(notifications.getNextRecurringDate(), eventDate1.plusMonths(1));
}
use of org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger in project killbill by killbill.
the class TestFixedAndRecurringInvoiceItemGenerator method testInArrear4b.
//
// Scenario: Similar to testInArrear4b but change event is 1 MONTH after leading to 1 item being generated
// - IN_ARREAR
// - one CREATE billing event
// - one future CHANGE billing event (used to compute period endDate)
// - targetDate = CREATE date + 1 month
//
// => Expect 1 item + 1 notification
//
@Test(groups = "fast")
public void testInArrear4b() throws InvoiceApiException {
final BillingMode billingMode = BillingMode.IN_ARREAR;
final UUID invoiceId = UUID.randomUUID();
final InvoiceItemGeneratorLogger invoiceItemGeneratorLogger = new InvoiceItemGeneratorLogger(invoiceId, account.getId(), "recurring", logger);
final Map<UUID, SubscriptionFutureNotificationDates> perSubscriptionFutureNotificationDates = new HashMap<>();
final LocalDate eventDate1 = new LocalDate("2020-01-01");
final BillingEvent event1 = createDefaultBillingEvent(eventDate1, null, BigDecimal.TEN, SubscriptionBaseTransitionType.CREATE, 1, 1, billingMode);
final LocalDate eventDate2 = new LocalDate("2020-02-15");
final BillingEvent event2 = createDefaultBillingEvent(eventDate2, null, BigDecimal.ONE, SubscriptionBaseTransitionType.CHANGE, 1, 2, billingMode);
final LocalDate targetDate = eventDate1.plusMonths(1);
List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, event2, targetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
assertEquals(invoiceItems.size(), 1);
assertEquals(invoiceItems.get(0).getStartDate(), eventDate1);
assertEquals(invoiceItems.get(0).getEndDate(), eventDate1.plusMonths(1));
assertEquals(invoiceItems.get(0).getAmount().compareTo(BigDecimal.TEN), 0);
SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
assertEquals(notifications.getNextRecurringDate(), eventDate1.plusMonths(2));
// Bonus 1: ... move targetDate to CHANGE date +. We see the same thing because 'thisEvent'=event1 we are still considering
final LocalDate newTargetDate = eventDate2;
invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, event2, newTargetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
assertEquals(invoiceItems.size(), 2);
assertEquals(invoiceItems.get(0).getStartDate(), eventDate1);
assertEquals(invoiceItems.get(0).getEndDate(), eventDate1.plusMonths(1));
assertEquals(invoiceItems.get(0).getAmount().compareTo(BigDecimal.TEN), 0);
assertEquals(invoiceItems.get(1).getStartDate(), eventDate1.plusMonths(1));
assertEquals(invoiceItems.get(1).getEndDate(), eventDate2);
assertEquals(invoiceItems.get(1).getAmount().compareTo(BigDecimal.TEN), -1);
notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
assertEquals(notifications.getNextRecurringDate(), eventDate1.plusMonths(2));
// Bonus 2: ... thisEvent=event2
invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event2, null, newTargetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
assertEquals(invoiceItems.size(), 0);
}
use of org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger in project killbill by killbill.
the class TestFixedAndRecurringInvoiceItemGenerator method testInArrear6.
//
// Scenario: Start with future notification and verify the CANCEL event clears it
// - IN_ARREAR
// - one CANCEL billing event
// - targetDate = CANCEL date
//
// => Expect nothing
//
@Test(groups = "fast")
public void testInArrear6() throws InvoiceApiException {
final BillingMode billingMode = BillingMode.IN_ARREAR;
final UUID invoiceId = UUID.randomUUID();
final InvoiceItemGeneratorLogger invoiceItemGeneratorLogger = new InvoiceItemGeneratorLogger(invoiceId, account.getId(), "recurring", logger);
final Map<UUID, SubscriptionFutureNotificationDates> perSubscriptionFutureNotificationDates = new HashMap<>();
final LocalDate eventDate1 = new LocalDate("2020-01-01");
/*final BillingEvent event1 = */
createDefaultBillingEvent(eventDate1, null, BigDecimal.TEN, SubscriptionBaseTransitionType.CREATE, 1, 1, billingMode);
// Set next notification date
SubscriptionFutureNotificationDates subscriptionFutureNotificationDates = new SubscriptionFutureNotificationDates(billingMode);
subscriptionFutureNotificationDates.updateNextRecurringDateIfRequired(eventDate1.plusMonths(1));
perSubscriptionFutureNotificationDates.put(subscription.getId(), subscriptionFutureNotificationDates);
final LocalDate eventDate2 = new LocalDate("2020-01-15");
final BillingEvent event2 = createDefaultBillingEvent(eventDate2, null, null, SubscriptionBaseTransitionType.CANCEL, 1, 2, billingMode);
final LocalDate targetDate = eventDate2;
final List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event2, null, targetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
assertEquals(invoiceItems.size(), 0);
final SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
assertNull(notifications.getNextRecurringDate());
}
use of org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger in project killbill by killbill.
the class TestFixedAndRecurringInvoiceItemGenerator method testInAdvance4a.
//
// Scenario:
// - IN_ADVANCE
// - one CREATE billing event
// - one future CHANGE billing event (used to compute period endDate)
// - targetDate = CREATE date
//
// => Expect one item + 1 notification
//
@Test(groups = "fast")
public void testInAdvance4a() throws InvoiceApiException {
final BillingMode billingMode = BillingMode.IN_ADVANCE;
final UUID invoiceId = UUID.randomUUID();
final InvoiceItemGeneratorLogger invoiceItemGeneratorLogger = new InvoiceItemGeneratorLogger(invoiceId, account.getId(), "recurring", logger);
final Map<UUID, SubscriptionFutureNotificationDates> perSubscriptionFutureNotificationDates = new HashMap<>();
final LocalDate eventDate1 = new LocalDate("2020-01-01");
final BillingEvent event1 = createDefaultBillingEvent(eventDate1, null, BigDecimal.TEN, SubscriptionBaseTransitionType.CREATE, 1, 1, billingMode);
final LocalDate eventDate2 = new LocalDate("2020-01-15");
final BillingEvent event2 = createDefaultBillingEvent(eventDate2, null, BigDecimal.ONE, SubscriptionBaseTransitionType.CHANGE, 1, 2, billingMode);
final LocalDate targetDate = eventDate1;
final List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, event2, targetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
assertEquals(invoiceItems.size(), 1);
assertEquals(invoiceItems.get(0).getStartDate(), eventDate1);
assertEquals(invoiceItems.get(0).getEndDate(), eventDate2);
assertEquals(invoiceItems.get(0).getAmount().compareTo(BigDecimal.TEN), -1);
final SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
assertEquals(notifications.getNextRecurringDate(), eventDate2);
}
use of org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger in project killbill by killbill.
the class TestFixedAndRecurringInvoiceItemGenerator method testInAdvance3.
//
// Scenario:
// - IN_ADVANCE
// - one CREATE billing event
// - targetDate in the future (> 1 billingPeriod)
//
// => Expect 2 items item + 1 notification
//
@Test(groups = "fast")
public void testInAdvance3() throws InvoiceApiException {
final BillingMode billingMode = BillingMode.IN_ADVANCE;
final UUID invoiceId = UUID.randomUUID();
final InvoiceItemGeneratorLogger invoiceItemGeneratorLogger = new InvoiceItemGeneratorLogger(invoiceId, account.getId(), "recurring", logger);
final Map<UUID, SubscriptionFutureNotificationDates> perSubscriptionFutureNotificationDates = new HashMap<>();
final LocalDate eventDate1 = new LocalDate("2020-01-01");
final BillingEvent event1 = createDefaultBillingEvent(eventDate1, null, BigDecimal.TEN, SubscriptionBaseTransitionType.CREATE, 1, 1, billingMode);
final LocalDate targetDate = eventDate1.plusMonths(1);
final List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, null, targetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
assertEquals(invoiceItems.size(), 2);
assertEquals(invoiceItems.get(0).getStartDate(), eventDate1);
assertEquals(invoiceItems.get(0).getEndDate(), eventDate1.plusMonths(1));
assertEquals(invoiceItems.get(0).getAmount().compareTo(BigDecimal.TEN), 0);
assertEquals(invoiceItems.get(1).getStartDate(), eventDate1.plusMonths(1));
assertEquals(invoiceItems.get(1).getEndDate(), eventDate1.plusMonths(2));
assertEquals(invoiceItems.get(1).getAmount().compareTo(BigDecimal.TEN), 0);
final SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
assertEquals(notifications.getNextRecurringDate(), eventDate1.plusMonths(2));
}
Aggregations