protected SortedSet<BillingEvent> createNewEvents(final List<DisabledDuration> disabledDuration, final SortedSet<BillingEvent> billingEvents, final Account account, final SubscriptionBase subscription) { final SortedSet<BillingEvent> result = new TreeSet<BillingEvent>(); for (final DisabledDuration duration : disabledDuration) { // The first one before the blocked duration final BillingEvent precedingInitialEvent = precedingBillingEventForSubscription(duration.getStart(), billingEvents, subscription); // The last one during of before the duration final BillingEvent precedingFinalEvent = precedingBillingEventForSubscription(duration.getEnd(), billingEvents, subscription); if (precedingInitialEvent != null) { // there is a preceding billing event result.add(createNewDisableEvent(duration.getStart(), precedingInitialEvent)); if (duration.getEnd() != null) { // no second event in the pair means they are still disabled (no re-enable) result.add(createNewReenableEvent(duration.getEnd(), precedingFinalEvent)); } } else if (precedingFinalEvent != null) { // can happen - e.g. phase event result.add(createNewReenableEvent(duration.getEnd(), precedingFinalEvent)); } // N.B. if there's no precedingInitial and no precedingFinal then there's nothing to do } return result; }
@Test(groups = "fast") public void testCreateNewReenableEvent() { final DateTime now = clock.getUTCNow(); final BillingEvent event = new MockBillingEvent(); final BillingEvent result = blockingCalculator.createNewReenableEvent(now, event); assertEquals(result.getBillCycleDayLocal(), event.getBillCycleDayLocal()); assertEquals(result.getEffectiveDate(), now); assertEquals(result.getPlanPhase(), event.getPlanPhase()); assertEquals(result.getPlan(), event.getPlan()); assertEquals(result.getFixedPrice(), event.getFixedPrice()); assertEquals(result.getRecurringPrice(), event.getRecurringPrice()); assertEquals(result.getCurrency(), event.getCurrency()); assertEquals(result.getDescription(), ""); assertEquals(result.getBillingMode(), event.getBillingMode()); assertEquals(result.getBillingPeriod(), event.getBillingPeriod()); assertEquals(result.getTransitionType(), SubscriptionBaseTransitionType.END_BILLING_DISABLED); // TODO - ugly, fragile assertEquals(result.getTotalOrdering(), (Long) (BlockingCalculator.getGlobalTotalOrder().get() - 1)); }