killbill-aplcache

More auto_invoice_off tests

5/29/2012 6:04:30 PM

Details

diff --git a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
index 2a0f5cd..39a9968 100644
--- a/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
+++ b/beatrix/src/test/java/com/ning/billing/beatrix/integration/TestIntegrationWithAutoInvoiceOffTag.java
@@ -16,7 +16,75 @@
 
 package com.ning.billing.beatrix.integration;
 
-public class TestIntegrationWithAutoInvoiceOffTag {
-    
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertEquals;
+
+import java.util.Collection;
+
+import junit.framework.Assert;
+
+import org.joda.time.DateTime;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Guice;
+import org.testng.annotations.Test;
+
+import com.google.inject.Inject;
+import com.ning.billing.account.api.Account;
+import com.ning.billing.api.TestApiListener.NextEvent;
+import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.PriceListSet;
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.entitlement.api.user.SubscriptionData;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceUserApi;
+
+@Guice(modules = {BeatrixModule.class})
+public class TestIntegrationWithAutoInvoiceOffTag extends TestIntegrationBase {
+
+    @Inject
+    private InvoiceUserApi invoiceApi;
+
     //TODO MDW write this test TestIntegrationWithAutoInvoiceOffTag
+    private Account account;
+    private SubscriptionBundle bundle;
+    private String productName;
+    private BillingPeriod term;
+    private String planSetName;
+
+    @BeforeMethod(groups = {"slow"})
+    public void setupOverdue() throws Exception {
+        
+        account = accountUserApi.createAccount(getAccountData(25), null, null, context);
+        assertNotNull(account);
+
+        bundle = entitlementUserApi.createBundleForAccount(account.getId(), "whatever", context);
+
+        productName = "Shotgun";
+        term = BillingPeriod.MONTHLY;
+        planSetName = PriceListSet.DEFAULT_PRICELIST_NAME;
+    }
+
+    @Test(groups={"slow"}, enabled = true)
+    public void testAutoInvoiceOffAccount() throws Exception {
+        clock.setTime(new DateTime(2012, 5, 1, 0, 3, 42, 0));
+        
+        // set next invoice to fail and create network 
+        busHandler.pushExpectedEvents(NextEvent.CREATE, NextEvent.INVOICE);
+        SubscriptionData baseSubscription = subscriptionDataFromSubscription(entitlementUserApi.createSubscription(bundle.getId(),
+                new PlanPhaseSpecifier(productName, ProductCategory.BASE, term, planSetName, null), null, context));
+        assertNotNull(baseSubscription);
+        assertTrue(busHandler.isCompleted(DELAY));
+
+        busHandler.pushExpectedEvents(NextEvent.PHASE, NextEvent.INVOICE, NextEvent.PAYMENT_ERROR);
+        clock.addDays(10); // DAY 10 still in trial
+        assertTrue(busHandler.isCompleted(DELAY));
+
+        Collection<Invoice> invoices = invoiceApi.getInvoicesByAccount(account.getId());
+        
+        assertEquals(invoices.size(), 0);
+
+    }
 }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/MockBillingEventSet.java b/invoice/src/test/java/com/ning/billing/invoice/MockBillingEventSet.java
index 3ab1f0d..f1a9550 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/MockBillingEventSet.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/MockBillingEventSet.java
@@ -33,12 +33,12 @@ public class MockBillingEventSet extends TreeSet<BillingEvent> implements Billin
     
     @Override
     public boolean isLast(BillingEvent event) {
-        return isAccountInvoiceOff;
-    }
+        return event == last();
+     }
 
     @Override
     public boolean isAccountAutoInvoiceOff() {
-        return false;
+        return isAccountInvoiceOff;
     }
 
     @Override
@@ -46,4 +46,12 @@ public class MockBillingEventSet extends TreeSet<BillingEvent> implements Billin
         return subscriptionIdsWithAutoInvoiceOff;
     }
 
+    public void setAccountInvoiceOff(boolean isAccountInvoiceOff) {
+        this.isAccountInvoiceOff = isAccountInvoiceOff;
+    }
+
+    public void setSubscriptionIdsWithAutoInvoiceOff(List<UUID> subscriptionIdsWithAutoInvoiceOff) {
+        this.subscriptionIdsWithAutoInvoiceOff = subscriptionIdsWithAutoInvoiceOff;
+    }
+
 }
diff --git a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
index fe4870c..b01473f 100644
--- a/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
+++ b/invoice/src/test/java/com/ning/billing/invoice/tests/DefaultInvoiceGeneratorTests.java
@@ -836,9 +836,25 @@ public class DefaultInvoiceGeneratorTests extends InvoicingTestBase {
      */
 
     @Test
-    public void testAutoInvoiceOff() {
-        BillingEventSet eventSet = new MockBillingEventSet();
-        fail();
+    public void testAutoInvoiceOffAccount() throws Exception {
+        MockBillingEventSet events = new MockBillingEventSet();
+        events.setAccountInvoiceOff(true);
+
+        Subscription sub = createZombieSubscription();
+        DateTime startDate = buildDateTime(2011, 9, 1);
+
+        Plan plan = new MockPlan();
+        BigDecimal rate1 = TEN;
+        PlanPhase phase = createMockMonthlyPlanPhase(rate1);
+
+        BillingEvent event = createBillingEvent(sub.getId(), startDate, plan, phase, 1);
+        events.add(event);
+
+        DateTime targetDate = buildDateTime(2011, 10, 3);
+        UUID accountId = UUID.randomUUID();
+        Invoice invoice = generator.generateInvoice(accountId, events, null, targetDate, Currency.USD);
+
+        assertNull(invoice);
     }
 
     @Test(enabled = false)