protected BillingEvent precedingBillingEventForSubscription(final DateTime datetime, final SortedSet<BillingEvent> billingEvents, final SubscriptionBase subscription) { if (datetime == null) { //second of a pair can be null if there's no re-enabling return null; } final SortedSet<BillingEvent> filteredBillingEvents = filter(billingEvents, subscription); BillingEvent result = filteredBillingEvents.first(); if (datetime.isBefore(result.getEffectiveDate())) { //This case can happen, for example, if we have an add on and the bundle goes into disabled before the add on is created return null; } for (final BillingEvent event : filteredBillingEvents) { if (!event.getEffectiveDate().isBefore(datetime)) { // found it its the previous event return result; } else { // still looking result = event; } } return result; }
protected SortedSet<BillingEvent> eventsToRemove(final List<DisabledDuration> disabledDuration, final SortedSet<BillingEvent> billingEvents, final SubscriptionBase subscription) { final SortedSet<BillingEvent> result = new TreeSet<BillingEvent>(); final SortedSet<BillingEvent> filteredBillingEvents = filter(billingEvents, subscription); for (final DisabledDuration duration : disabledDuration) { for (final BillingEvent event : filteredBillingEvents) { if (duration.getEnd() == null || event.getEffectiveDate().isBefore(duration.getEnd())) { if (event.getEffectiveDate().isAfter(duration.getStart())) { //between the pair result.add(event); } } else { //after the last event of the pair no need to keep checking break; } } } return result; }
@Test(groups = "fast") public void testFilter() { final SortedSet<BillingEvent> events = new TreeSet<BillingEvent>(); events.add(createBillingEvent(subscription1)); events.add(createBillingEvent(subscription1)); events.add(createBillingEvent(subscription1)); events.add(createBillingEvent(subscription2)); final SortedSet<BillingEvent> result1 = blockingCalculator.filter(events, subscription1); final SortedSet<BillingEvent> result2 = blockingCalculator.filter(events, subscription2); final SortedSet<BillingEvent> result3 = blockingCalculator.filter(events, subscription3); assertEquals(result1.size(), 3); assertEquals(result1.first().getSubscription(), subscription1); assertEquals(result1.last().getSubscription(), subscription1); assertEquals(result2.size(), 1); assertEquals(result2.first().getSubscription(), subscription2); assertEquals(result3.size(), 0); }
final SortedSet<BillingEvent> s1Events = blockingCalculator.filter(billingEvents, subscription1); final Iterator<BillingEvent> it1 = s1Events.iterator(); assertEquals(it1.next(), A); assertEquals(it1.next().getTransitionType(), SubscriptionBaseTransitionType.END_BILLING_DISABLED); final SortedSet<BillingEvent> s2Events = blockingCalculator.filter(billingEvents, subscription2); final Iterator<BillingEvent> it2 = s2Events.iterator(); assertEquals(it2.next(), B); assertEquals(it2.next().getTransitionType(), SubscriptionBaseTransitionType.END_BILLING_DISABLED); final SortedSet<BillingEvent> s3Events = blockingCalculator.filter(billingEvents, subscription3); final Iterator<BillingEvent> it3 = s3Events.iterator(); assertEquals(it3.next(), D);