/** * Given a set of billing events, add corresponding blocking (overdue) billing events. * * @param billingEvents the original list of billing events to update (without overdue events) */ public void insertBlockingEvents(final SortedSet<BillingEvent> billingEvents, final InternalTenantContext context) { if (billingEvents.size() <= 0) { return; } final Account account = billingEvents.first().getAccount(); final Hashtable<UUID, List<SubscriptionBase>> bundleMap = createBundleSubscriptionMap(billingEvents); final SortedSet<BillingEvent> billingEventsToAdd = new TreeSet<BillingEvent>(); final SortedSet<BillingEvent> billingEventsToRemove = new TreeSet<BillingEvent>(); final List<BlockingState> blockingEvents = blockingApi.getBlockingAllForAccount(context); final List<DisabledDuration> blockingDurations = createBlockingDurations(blockingEvents); for (final UUID bundleId : bundleMap.keySet()) { for (final SubscriptionBase subscription : bundleMap.get(bundleId)) { billingEventsToAdd.addAll(createNewEvents(blockingDurations, billingEvents, account, subscription)); billingEventsToRemove.addAll(eventsToRemove(blockingDurations, billingEvents, subscription)); } } for (final BillingEvent eventToAdd : billingEventsToAdd) { billingEvents.add(eventToAdd); } for (final BillingEvent eventToRemove : billingEventsToRemove) { billingEvents.remove(eventToRemove); } }
List<DisabledDuration> pairs = blockingCalculator.createBlockingDurations(blockingEvents); assertEquals(pairs.size(), 1); assertNotNull(pairs.get(0).getStart()); pairs = blockingCalculator.createBlockingDurations(blockingEvents); assertEquals(pairs.size(), 1); assertNotNull(pairs.get(0).getStart()); pairs = blockingCalculator.createBlockingDurations(blockingEvents); assertEquals(pairs.size(), 1); assertNotNull(pairs.get(0).getStart()); pairs = blockingCalculator.createBlockingDurations(blockingEvents); assertEquals(pairs.size(), 1); assertNotNull(pairs.get(0).getStart()); pairs = blockingCalculator.createBlockingDurations(blockingEvents); assertEquals(pairs.size(), 1); assertNotNull(pairs.get(0).getStart()); pairs = blockingCalculator.createBlockingDurations(blockingEvents); assertEquals(pairs.size(), 1); assertEquals(pairs.get(0).getStart(), now.plusDays(1)); pairs = blockingCalculator.createBlockingDurations(blockingEvents); assertEquals(pairs.size(), 1); assertEquals(pairs.get(0).getStart(), now.plusDays(1));