@Test(groups = "fast")
 public void testAfterBCDWithOnOrAfter() throws Exception {
   final LocalDate from = new LocalDate("2012-03-04");
   final LocalDate to =
       InvoiceDateUtils.calculateBillingCycleDateOnOrAfter(from, DateTimeZone.UTC, 3);
   Assert.assertEquals(to, new LocalDate("2012-04-03"));
 }
 @Test(groups = "fast")
 public void testNextBCDShouldNotBeInThePast() throws Exception {
   final LocalDate from = new LocalDate("2012-07-16");
   final LocalDate to =
       InvoiceDateUtils.calculateBillingCycleDateOnOrAfter(
           from, DateTimeZone.forID("Pacific/Pitcairn"), 15);
   Assert.assertEquals(to, new LocalDate("2012-08-15"));
 }
 @Test(groups = "fast")
 public void testProRationAfterLastBillingCycleDate() throws Exception {
   final LocalDate endDate = new LocalDate("2012-06-02");
   final LocalDate previousBillThroughDate = new LocalDate("2012-03-02");
   final BigDecimal proration =
       InvoiceDateUtils.calculateProRationAfterLastBillingCycleDate(
           endDate, previousBillThroughDate, BillingPeriod.MONTHLY);
   Assert.assertEquals(proration, new BigDecimal("2.9677"));
 }
 @Test(groups = "fast")
 public void testCalculateNbOfBillingPeriods() throws Exception {
   final LocalDate firstBCD = new LocalDate(2012, 7, 16);
   final LocalDate lastBCD = new LocalDate(2012, 9, 16);
   final BillingPeriod billingPeriod = BillingPeriod.MONTHLY;
   final int numberOfWholeBillingPeriods =
       InvoiceDateUtils.calculateNumberOfWholeBillingPeriods(firstBCD, lastBCD, billingPeriod);
   Assert.assertEquals(numberOfWholeBillingPeriods, 2);
 }
 @Test(groups = "fast")
 public void testLastBCDShouldNotBeBeforePreviousBCD() throws Exception {
   final LocalDate from = new LocalDate("2012-07-16");
   final LocalDate previousBCD = new LocalDate("2012-08-15");
   final int bcdLocal = 15;
   final LocalDate lastBCD =
       InvoiceDateUtils.calculateLastBillingCycleDateBefore(
           from, previousBCD, bcdLocal, BillingPeriod.MONTHLY);
   Assert.assertEquals(lastBCD, new LocalDate("2012-08-15"));
 }
 @Test(groups = "fast")
 public void testLastBCD() throws Exception {
   final LocalDate firstBCD = new LocalDate(2012, 7, 16);
   final LocalDate effectiveEndDate = new LocalDate(2012, 9, 15);
   final BillingPeriod billingPeriod = BillingPeriod.MONTHLY;
   final LocalDate lastBCD =
       InvoiceDateUtils.calculateLastBillingCycleDateBefore(
           effectiveEndDate, firstBCD, 16, billingPeriod);
   Assert.assertEquals(lastBCD, new LocalDate(2012, 8, 16));
 }
 @Test(groups = "fast")
 public void testEffectiveEndDate() throws Exception {
   final LocalDate firstBCD = new LocalDate(2012, 7, 16);
   final LocalDate targetDate = new LocalDate(2012, 8, 16);
   final BillingPeriod billingPeriod = BillingPeriod.MONTHLY;
   final LocalDate effectiveEndDate =
       InvoiceDateUtils.calculateEffectiveEndDate(firstBCD, targetDate, billingPeriod);
   // TODO should that be 2012-09-15?
   Assert.assertEquals(effectiveEndDate, new LocalDate(2012, 9, 16));
 }