Search in sources :

Example 11 with BillingMode

use of org.killbill.billing.catalog.api.BillingMode in project killbill by killbill.

the class TestFixedAndRecurringInvoiceItemGenerator method testInArrear4a.

// 
// Scenario:
// - IN_ARREAR
// - one CREATE billing event
// - one future CHANGE billing event (used to compute period endDate)
// - targetDate = CREATE date
// 
// => Expect 1 notification
// 
@Test(groups = "fast")
public void testInArrear4a() 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-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(), 0);
    final SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
    assertEquals(notifications.getNextRecurringDate(), eventDate1.plusMonths(1));
}
Also used : SubscriptionFutureNotificationDates(org.killbill.billing.invoice.generator.InvoiceWithMetadata.SubscriptionFutureNotificationDates) FixedPriceInvoiceItem(org.killbill.billing.invoice.model.FixedPriceInvoiceItem) RecurringInvoiceItem(org.killbill.billing.invoice.model.RecurringInvoiceItem) InvoiceItem(org.killbill.billing.invoice.api.InvoiceItem) RepairAdjInvoiceItem(org.killbill.billing.invoice.model.RepairAdjInvoiceItem) ItemAdjInvoiceItem(org.killbill.billing.invoice.model.ItemAdjInvoiceItem) HashMap(java.util.HashMap) BillingMode(org.killbill.billing.catalog.api.BillingMode) DefaultBillingEvent(org.killbill.billing.junction.plumbing.billing.DefaultBillingEvent) BillingEvent(org.killbill.billing.junction.BillingEvent) UUID(java.util.UUID) InvoiceItemGeneratorLogger(org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger) LocalDate(org.joda.time.LocalDate) Test(org.testng.annotations.Test)

Example 12 with BillingMode

use of org.killbill.billing.catalog.api.BillingMode in project killbill by killbill.

the class TestFixedAndRecurringInvoiceItemGenerator method testInArrear2.

// 
// Scenario:
// - IN_ARREAR
// - one CREATE billing event
// - targetDate < CREATE date
// 
// => Expect nothing
// 
@Test(groups = "fast")
public void testInArrear2() 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 targetDate = eventDate1.minusDays(1);
    final List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, null, targetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
    assertEquals(invoiceItems.size(), 0);
    final SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
    assertNull(notifications);
}
Also used : SubscriptionFutureNotificationDates(org.killbill.billing.invoice.generator.InvoiceWithMetadata.SubscriptionFutureNotificationDates) FixedPriceInvoiceItem(org.killbill.billing.invoice.model.FixedPriceInvoiceItem) RecurringInvoiceItem(org.killbill.billing.invoice.model.RecurringInvoiceItem) InvoiceItem(org.killbill.billing.invoice.api.InvoiceItem) RepairAdjInvoiceItem(org.killbill.billing.invoice.model.RepairAdjInvoiceItem) ItemAdjInvoiceItem(org.killbill.billing.invoice.model.ItemAdjInvoiceItem) HashMap(java.util.HashMap) BillingMode(org.killbill.billing.catalog.api.BillingMode) DefaultBillingEvent(org.killbill.billing.junction.plumbing.billing.DefaultBillingEvent) BillingEvent(org.killbill.billing.junction.BillingEvent) UUID(java.util.UUID) InvoiceItemGeneratorLogger(org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger) LocalDate(org.joda.time.LocalDate) Test(org.testng.annotations.Test)

Example 13 with BillingMode

use of org.killbill.billing.catalog.api.BillingMode in project killbill by killbill.

the class TestFixedAndRecurringInvoiceItemGenerator method testInAdvance1.

// 
// 
// PROCESS_RECURRING_EVENT TESTS
// 
// 
// 
// Scenario:
// - IN_ADVANCE
// - one CREATE billing event
// - targetDate = CREATE date
// 
// => Expect one item + 1 notification
// 
@Test(groups = "fast")
public void testInAdvance1() 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;
    final List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, null, 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);
    final SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
    assertEquals(notifications.getNextRecurringDate(), eventDate1.plusMonths(1));
}
Also used : SubscriptionFutureNotificationDates(org.killbill.billing.invoice.generator.InvoiceWithMetadata.SubscriptionFutureNotificationDates) FixedPriceInvoiceItem(org.killbill.billing.invoice.model.FixedPriceInvoiceItem) RecurringInvoiceItem(org.killbill.billing.invoice.model.RecurringInvoiceItem) InvoiceItem(org.killbill.billing.invoice.api.InvoiceItem) RepairAdjInvoiceItem(org.killbill.billing.invoice.model.RepairAdjInvoiceItem) ItemAdjInvoiceItem(org.killbill.billing.invoice.model.ItemAdjInvoiceItem) HashMap(java.util.HashMap) BillingMode(org.killbill.billing.catalog.api.BillingMode) DefaultBillingEvent(org.killbill.billing.junction.plumbing.billing.DefaultBillingEvent) BillingEvent(org.killbill.billing.junction.BillingEvent) UUID(java.util.UUID) InvoiceItemGeneratorLogger(org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger) LocalDate(org.joda.time.LocalDate) Test(org.testng.annotations.Test)

Example 14 with BillingMode

use of org.killbill.billing.catalog.api.BillingMode in project killbill by killbill.

the class TestFixedAndRecurringInvoiceItemGenerator method testInArrear3.

// 
// Scenario:
// - IN_ARREAR
// - one CREATE billing event
// - targetDate in the future (> 1 billingPeriod)
// 
// => Expect 1 item item + 1 notification
// 
@Test(groups = "fast")
public void testInArrear3() 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 targetDate = eventDate1.plusMonths(1);
    final List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, null, 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);
    final SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
    assertEquals(notifications.getNextRecurringDate(), eventDate1.plusMonths(2));
}
Also used : SubscriptionFutureNotificationDates(org.killbill.billing.invoice.generator.InvoiceWithMetadata.SubscriptionFutureNotificationDates) FixedPriceInvoiceItem(org.killbill.billing.invoice.model.FixedPriceInvoiceItem) RecurringInvoiceItem(org.killbill.billing.invoice.model.RecurringInvoiceItem) InvoiceItem(org.killbill.billing.invoice.api.InvoiceItem) RepairAdjInvoiceItem(org.killbill.billing.invoice.model.RepairAdjInvoiceItem) ItemAdjInvoiceItem(org.killbill.billing.invoice.model.ItemAdjInvoiceItem) HashMap(java.util.HashMap) BillingMode(org.killbill.billing.catalog.api.BillingMode) DefaultBillingEvent(org.killbill.billing.junction.plumbing.billing.DefaultBillingEvent) BillingEvent(org.killbill.billing.junction.BillingEvent) UUID(java.util.UUID) InvoiceItemGeneratorLogger(org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger) LocalDate(org.joda.time.LocalDate) Test(org.testng.annotations.Test)

Example 15 with BillingMode

use of org.killbill.billing.catalog.api.BillingMode in project killbill by killbill.

the class TestFixedAndRecurringInvoiceItemGenerator method testInAdvance2.

// 
// Scenario:
// - IN_ADVANCE
// - one CREATE billing event
// - targetDate < CREATE date
// 
// => Expect nothing
// 
@Test(groups = "fast")
public void testInAdvance2() 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.minusDays(1);
    final List<InvoiceItem> invoiceItems = fixedAndRecurringInvoiceItemGenerator.processRecurringEvent(invoiceId, account.getId(), event1, null, targetDate, account.getCurrency(), invoiceItemGeneratorLogger, perSubscriptionFutureNotificationDates, internalCallContext);
    assertEquals(invoiceItems.size(), 0);
    final SubscriptionFutureNotificationDates notifications = perSubscriptionFutureNotificationDates.get(subscription.getId());
    assertNull(notifications);
}
Also used : SubscriptionFutureNotificationDates(org.killbill.billing.invoice.generator.InvoiceWithMetadata.SubscriptionFutureNotificationDates) FixedPriceInvoiceItem(org.killbill.billing.invoice.model.FixedPriceInvoiceItem) RecurringInvoiceItem(org.killbill.billing.invoice.model.RecurringInvoiceItem) InvoiceItem(org.killbill.billing.invoice.api.InvoiceItem) RepairAdjInvoiceItem(org.killbill.billing.invoice.model.RepairAdjInvoiceItem) ItemAdjInvoiceItem(org.killbill.billing.invoice.model.ItemAdjInvoiceItem) HashMap(java.util.HashMap) BillingMode(org.killbill.billing.catalog.api.BillingMode) DefaultBillingEvent(org.killbill.billing.junction.plumbing.billing.DefaultBillingEvent) BillingEvent(org.killbill.billing.junction.BillingEvent) UUID(java.util.UUID) InvoiceItemGeneratorLogger(org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger) LocalDate(org.joda.time.LocalDate) Test(org.testng.annotations.Test)

Aggregations

LocalDate (org.joda.time.LocalDate)15 BillingMode (org.killbill.billing.catalog.api.BillingMode)15 InvoiceItem (org.killbill.billing.invoice.api.InvoiceItem)15 SubscriptionFutureNotificationDates (org.killbill.billing.invoice.generator.InvoiceWithMetadata.SubscriptionFutureNotificationDates)15 FixedPriceInvoiceItem (org.killbill.billing.invoice.model.FixedPriceInvoiceItem)15 RecurringInvoiceItem (org.killbill.billing.invoice.model.RecurringInvoiceItem)15 HashMap (java.util.HashMap)14 UUID (java.util.UUID)14 InvoiceItemGeneratorLogger (org.killbill.billing.invoice.generator.InvoiceItemGenerator.InvoiceItemGeneratorLogger)14 ItemAdjInvoiceItem (org.killbill.billing.invoice.model.ItemAdjInvoiceItem)14 RepairAdjInvoiceItem (org.killbill.billing.invoice.model.RepairAdjInvoiceItem)14 BillingEvent (org.killbill.billing.junction.BillingEvent)14 DefaultBillingEvent (org.killbill.billing.junction.plumbing.billing.DefaultBillingEvent)14 Test (org.testng.annotations.Test)14 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 BigDecimal (java.math.BigDecimal)1 ArrayList (java.util.ArrayList)1 DateTime (org.joda.time.DateTime)1 BillingPeriod (org.killbill.billing.catalog.api.BillingPeriod)1 Plan (org.killbill.billing.catalog.api.Plan)1