diff --git a/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java b/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java
index 8d93aa4..b5d7b6c 100644
--- a/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java
+++ b/invoice/src/main/java/org/killbill/billing/invoice/usage/ContiguousIntervalUsageInArrear.java
@@ -144,7 +144,9 @@ public class ContiguousIntervalUsageInArrear {
numberOfPeriod++;
nextBillCycleDate = bid.getFutureBillingDateFor(numberOfPeriod);
}
- if (closedInterval && endDate.isAfter(transitionTimes.get(transitionTimes.size() - 1))) {
+ if (closedInterval &&
+ transitionTimes.size() > 0 &&
+ endDate.isAfter(transitionTimes.get(transitionTimes.size() - 1))) {
transitionTimes.add(endDate);
}
isBuilt.set(true);
diff --git a/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalConsumableInArrear.java b/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalConsumableInArrear.java
index ea6ce5e..70d6944 100644
--- a/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalConsumableInArrear.java
+++ b/invoice/src/test/java/org/killbill/billing/invoice/usage/TestContiguousIntervalConsumableInArrear.java
@@ -276,4 +276,35 @@ public class TestContiguousIntervalConsumableInArrear extends TestUsageInArrearB
Assert.assertEquals(rolledUpUsage.get(1).getRolledUpUnits().get(1).getAmount(), new Long(21L));
}
+
+
+ @Test(groups = "fast", description="See https://github.com/killbill/killbill/issues/706")
+ public void testWithRawUsageStartDateAfterEndDate() throws CatalogApiException {
+
+ final LocalDate startDate = new LocalDate(2014, 10, 16);
+ final LocalDate endDate = startDate;
+ final LocalDate targetDate = endDate;
+
+ final LocalDate rawUsageStartDate = new LocalDate(2015, 10, 16);
+
+ final List<RawUsage> rawUsages = new ArrayList<RawUsage>();
+ rawUsages.add(new DefaultRawUsage(subscriptionId, startDate, "unit", 130L));
+
+ final DefaultTieredBlock block = createDefaultTieredBlock("unit", 100, 10, BigDecimal.ONE);
+ final DefaultTier tier = createDefaultTierWithBlocks(block);
+ final DefaultUsage usage = createConsumableInArrearUsage(usageName, BillingPeriod.MONTHLY, tier);
+
+
+ final BillingEvent event1 = createMockBillingEvent(startDate.toDateTimeAtStartOfDay(DateTimeZone.UTC),BillingPeriod.MONTHLY, Collections.<Usage>emptyList());
+ final BillingEvent event2 = createMockBillingEvent(new LocalDate(2014, 10, 16).toDateTimeAtStartOfDay(DateTimeZone.UTC), BillingPeriod.MONTHLY, Collections.<Usage>emptyList());
+
+
+ final ContiguousIntervalUsageInArrear intervalConsumableInArrear = new ContiguousIntervalUsageInArrear(usage, accountId, invoiceId, rawUsages, targetDate, rawUsageStartDate, internalCallContext);
+ intervalConsumableInArrear.addBillingEvent(event1);
+ intervalConsumableInArrear.addBillingEvent(event2);
+
+ final ContiguousIntervalUsageInArrear res = intervalConsumableInArrear.build(true);
+ assertEquals(res.getTransitionTimes().size(), 0);
+ }
+
}