killbill-aplcache

More Overdue tests

5/21/2012 8:45:52 PM

Details

diff --git a/api/src/main/java/com/ning/billing/overdue/config/api/OverdueStateSet.java b/api/src/main/java/com/ning/billing/overdue/config/api/OverdueStateSet.java
index 2c043d6..8449db2 100644
--- a/api/src/main/java/com/ning/billing/overdue/config/api/OverdueStateSet.java
+++ b/api/src/main/java/com/ning/billing/overdue/config/api/OverdueStateSet.java
@@ -29,4 +29,6 @@ public interface OverdueStateSet<T extends Blockable> {
     public abstract OverdueState<T> findState(String stateName) throws OverdueApiException;
 
     public abstract OverdueState<T> calculateOverdueState(BillingState<T> billingState, DateTime now) throws OverdueApiException;
+
+    public abstract int size();
 }
\ No newline at end of file
diff --git a/api/src/main/java/com/ning/billing/overdue/OverdueState.java b/api/src/main/java/com/ning/billing/overdue/OverdueState.java
index 3de2c94..231a434 100644
--- a/api/src/main/java/com/ning/billing/overdue/OverdueState.java
+++ b/api/src/main/java/com/ning/billing/overdue/OverdueState.java
@@ -37,4 +37,6 @@ public interface OverdueState<T extends Blockable> {
     public boolean isClearState();
 
     public Period getReevaluationInterval() throws OverdueApiException;
+
+    public Condition<T> getCondition();
 }
\ No newline at end of file
diff --git a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultCondition.java b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultCondition.java
index 711f14d..6289724 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultCondition.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultCondition.java
@@ -29,6 +29,7 @@ import org.joda.time.DateTime;
 import com.ning.billing.catalog.api.Duration;
 import com.ning.billing.catalog.api.TimeUnit;
 import com.ning.billing.junction.api.Blockable;
+import com.ning.billing.overdue.Condition;
 import com.ning.billing.overdue.config.api.BillingState;
 import com.ning.billing.overdue.config.api.PaymentResponse;
 import com.ning.billing.util.config.ValidatingConfig;
diff --git a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueState.java b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueState.java
index 4206e45..2232710 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueState.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueState.java
@@ -112,7 +112,7 @@ public class DefaultOverdueState<T extends Blockable> extends ValidatingConfig<O
         return autoReevaluationInterval.toJodaPeriod();       
     }
 	
-    protected DefaultCondition<T> getCondition() {
+    public DefaultCondition<T> getCondition() {
 		return condition;
 	}
 
diff --git a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueStateSet.java b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueStateSet.java
index 59a82bf..5493dbc 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueStateSet.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/config/DefaultOverdueStateSet.java
@@ -41,7 +41,7 @@ public abstract class DefaultOverdueStateSet<T extends Blockable> extends Valida
     private DefaultOverdueState<T> clearState = new DefaultOverdueState<T>().setName(BlockingApi.CLEAR_STATE_NAME).setClearState(true);
 
     protected abstract DefaultOverdueState<T>[] getStates();
-
+    
     @Override
     public OverdueState<T> findState(String stateName) throws OverdueApiException {
         if(stateName.equals( BlockingApi.CLEAR_STATE_NAME)) {
@@ -92,4 +92,10 @@ public abstract class DefaultOverdueStateSet<T extends Blockable> extends Valida
 
         return errors;
     }
+
+    @Override
+    public int size() {
+        return getStates().length;
+    }
+    
 }
diff --git a/overdue/src/main/java/com/ning/billing/overdue/wrapper/OverdueWrapper.java b/overdue/src/main/java/com/ning/billing/overdue/wrapper/OverdueWrapper.java
index 6ec4bf7..56ab20c 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/wrapper/OverdueWrapper.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/wrapper/OverdueWrapper.java
@@ -49,8 +49,8 @@ public class OverdueWrapper<T extends Blockable> {
     }
 
     public OverdueState<T> refresh() throws OverdueError, OverdueApiException {
-        if(overdueStateSet == null) { // No configuration available
-            return null;
+        if(overdueStateSet.size() >= 0) { // No configuration available
+            return overdueStateSet.getClearState();
         } 
         
         OverdueState<T> nextOverdueState;
diff --git a/overdue/src/main/java/com/ning/billing/overdue/wrapper/OverdueWrapperFactory.java b/overdue/src/main/java/com/ning/billing/overdue/wrapper/OverdueWrapperFactory.java
index 3a1df56..6d3b967 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/wrapper/OverdueWrapperFactory.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/wrapper/OverdueWrapperFactory.java
@@ -31,9 +31,11 @@ import com.ning.billing.junction.api.BlockingApi;
 import com.ning.billing.junction.api.BlockingState;
 import com.ning.billing.overdue.applicator.OverdueStateApplicator;
 import com.ning.billing.overdue.calculator.BillingStateCalculatorBundle;
+import com.ning.billing.overdue.config.DefaultOverdueState;
+import com.ning.billing.overdue.config.DefaultOverdueStateSet;
 import com.ning.billing.overdue.config.OverdueConfig;
 import com.ning.billing.overdue.config.api.OverdueError;
-import com.ning.billing.overdue.service.ExtendedOverdueService;
+import com.ning.billing.overdue.config.api.OverdueStateSet;
 import com.ning.billing.util.clock.Clock;
 
 public class OverdueWrapperFactory {
@@ -44,7 +46,7 @@ public class OverdueWrapperFactory {
     private final OverdueStateApplicator<SubscriptionBundle> overdueStateApplicatorBundle;
     private final BlockingApi api;
     private final Clock clock;
-    private  OverdueConfig overdueConfig;
+    private OverdueStateSet<SubscriptionBundle> overdueStates;
 
     @Inject
     public OverdueWrapperFactory(BlockingApi api, Clock clock, 
@@ -60,12 +62,10 @@ public class OverdueWrapperFactory {
 
     @SuppressWarnings("unchecked")
     public <T extends Blockable> OverdueWrapper<T> createOverdueWrapperFor(T bloackable) throws OverdueError {
-        if (overdueConfig == null) {
-            throw new OverdueError(ErrorCode.OVERDUE_NOT_CONFIGURED);
-        }
+  
         if(bloackable instanceof SubscriptionBundle) {
-            return (OverdueWrapper<T>)new OverdueWrapper<SubscriptionBundle>((SubscriptionBundle)bloackable, api, overdueConfig.getBundleStateSet(), 
-                    clock, billingStateCalcuatorBundle, overdueStateApplicatorBundle );
+            return (OverdueWrapper<T>)new OverdueWrapper<SubscriptionBundle>((SubscriptionBundle)bloackable, api, overdueStates, 
+                    clock, billingStateCalcuatorBundle, overdueStateApplicatorBundle);
         } else {
             throw new OverdueError(ErrorCode.OVERDUE_TYPE_NOT_SUPPORTED, bloackable.getId(), bloackable.getClass());
         }
@@ -79,7 +79,7 @@ public class OverdueWrapperFactory {
             switch (state.getType()) {
             case SUBSCRIPTION_BUNDLE : {
                 SubscriptionBundle bundle = entitlementApi.getBundleFromId(id);
-                return (OverdueWrapper<T>)new OverdueWrapper<SubscriptionBundle>(bundle, api, overdueConfig.getBundleStateSet(), 
+                return (OverdueWrapper<T>) new OverdueWrapper<SubscriptionBundle>(bundle, api, overdueStates, 
                         clock, billingStateCalcuatorBundle, overdueStateApplicatorBundle );
             }
             default : {
@@ -93,7 +93,18 @@ public class OverdueWrapperFactory {
     }
     
     public void setOverdueConfig(OverdueConfig config) {
-        overdueConfig = config;
+        if(config != null) {
+            overdueStates = config.getBundleStateSet();
+        } else {
+            overdueStates = new DefaultOverdueStateSet<SubscriptionBundle>() {
+
+                @SuppressWarnings("unchecked")
+                @Override
+                protected DefaultOverdueState<SubscriptionBundle>[] getStates() {
+                    return new DefaultOverdueState[0];
+                }
+            };
+        }
     }
 
 }
diff --git a/overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java b/overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java
index 4933492..25721d5 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java
@@ -20,8 +20,10 @@ import java.util.SortedSet;
 import java.util.UUID;
 
 import org.apache.commons.lang.NotImplementedException;
+import org.joda.time.DateTime;
 
 import com.ning.billing.junction.api.Blockable;
+import com.ning.billing.junction.api.Blockable.Type;
 import com.ning.billing.junction.api.BlockingApi;
 import com.ning.billing.junction.api.BlockingState;
 import com.ning.billing.mock.glue.MockJunctionModule;
@@ -37,7 +39,56 @@ public class ApplicatorMockJunctionModule extends MockJunctionModule {
 
             @Override
             public BlockingState getBlockingStateFor(Blockable overdueable) {
-                throw new NotImplementedException();
+                return new BlockingState() {
+
+                    @Override
+                    public String getStateName() {
+                        return BlockingApi.CLEAR_STATE_NAME;
+                    }
+
+                    @Override
+                    public Type getType() {
+                        // TODO Auto-generated method stub
+                        return null;
+                    }
+
+                    @Override
+                    public DateTime getTimestamp() {
+                        // TODO Auto-generated method stub
+                        return null;
+                    }
+
+                    @Override
+                    public boolean isBlockChange() {
+                        // TODO Auto-generated method stub
+                        return false;
+                    }
+
+                    @Override
+                    public boolean isBlockEntitlement() {
+                        // TODO Auto-generated method stub
+                        return false;
+                    }
+
+                    @Override
+                    public boolean isBlockBilling() {
+                        // TODO Auto-generated method stub
+                        return false;
+                    }
+
+                    @Override
+                    public int compareTo(BlockingState arg0) {
+                        // TODO Auto-generated method stub
+                        return 0;
+                    }
+
+                    @Override
+                    public String getDescription() {
+                        // TODO Auto-generated method stub
+                        return null;
+                    }
+                    
+                };
             }
 
             @Override
diff --git a/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java b/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
index fc242a9..ea0eb62 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/applicator/TestOverdueStateApplicator.java
@@ -45,15 +45,10 @@ import com.ning.billing.util.config.XMLLoader;
 import com.ning.billing.util.glue.BusModule;
 import com.ning.billing.util.glue.NotificationQueueModule;
 
-@Guice( modules = {DefaultOverdueModule.class, MockClockModule.class, ApplicatorMockJunctionModule.class, CatalogModule.class, MockInvoiceModule.class, MockPaymentModule.class, BusModule.class, NotificationQueueModule.class, TestDbiModule.class})
 public class TestOverdueStateApplicator extends OverdueTestBase {
     @Inject
     OverdueStateApplicator<SubscriptionBundle> applicator;
-    
-    @Inject
-    BlockingApi blockingApi;
-  
-    
+        
     @Test( groups={"fast"} , enabled = true)
      public void testApplicator() throws Exception {
          InputStream is = new ByteArrayInputStream(configXml.getBytes());
@@ -66,37 +61,27 @@ public class TestOverdueStateApplicator extends OverdueTestBase {
          ((ZombieControl)bundle).addResult("getId", UUID.randomUUID());
          
          OverdueState<SubscriptionBundle> state;
-         BlockingState result;
          
          state = config.getBundleStateSet().findState("OD1");
          applicator.apply(bundle, BlockingApi.CLEAR_STATE_NAME, state);
-         result = ((ApplicatorBlockingApi)blockingApi).getBlockingState();
-         Assert.assertEquals(result.getStateName(),state.getName());
-         Assert.assertEquals(result.isBlockChange(), state.blockChanges());
-         Assert.assertEquals(result.isBlockEntitlement(), state.disableEntitlementAndChangesBlocked());
-         Assert.assertEquals(result.isBlockBilling(), state.disableEntitlementAndChangesBlocked());
+         checkStateApplied(state);
+         
         
          state = config.getBundleStateSet().findState("OD2");
          applicator.apply(bundle, BlockingApi.CLEAR_STATE_NAME, state);
-         result = ((ApplicatorBlockingApi)blockingApi).getBlockingState();
-         Assert.assertEquals(result.getStateName(),state.getName());
-         Assert.assertEquals(result.isBlockChange(), state.blockChanges());
-         Assert.assertEquals(result.isBlockEntitlement(), state.disableEntitlementAndChangesBlocked());
-         Assert.assertEquals(result.isBlockBilling(), state.disableEntitlementAndChangesBlocked());
+         checkStateApplied(state);
         
          state = config.getBundleStateSet().findState("OD3");
          applicator.apply(bundle, BlockingApi.CLEAR_STATE_NAME, state);
-         result = ((ApplicatorBlockingApi)blockingApi).getBlockingState();
-         Assert.assertEquals(result.getStateName(),state.getName());
-         Assert.assertEquals(result.isBlockChange(), state.blockChanges());
-         Assert.assertEquals(result.isBlockEntitlement(), state.disableEntitlementAndChangesBlocked());
-         Assert.assertEquals(result.isBlockBilling(), state.disableEntitlementAndChangesBlocked());
+         checkStateApplied(state);
         
          
         //TODO
         // Check blocking API called with correct arguments for the state
         // Check notification is posted with correct time delay
     }
+
+
     
     
 }
diff --git a/overdue/src/test/java/com/ning/billing/overdue/OverdueTestBase.java b/overdue/src/test/java/com/ning/billing/overdue/OverdueTestBase.java
index e44efed..de26234 100644
--- a/overdue/src/test/java/com/ning/billing/overdue/OverdueTestBase.java
+++ b/overdue/src/test/java/com/ning/billing/overdue/OverdueTestBase.java
@@ -17,8 +17,14 @@
 package com.ning.billing.overdue;
 
 import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
 
 import org.apache.commons.io.IOUtils;
+import org.joda.time.DateTime;
+import org.testng.Assert;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
@@ -26,22 +32,40 @@ import org.testng.annotations.Guice;
 
 import com.google.inject.Inject;
 import com.ning.billing.account.api.Account;
+import com.ning.billing.catalog.MockPlan;
+import com.ning.billing.catalog.MockPriceList;
 import com.ning.billing.catalog.api.BillingPeriod;
+import com.ning.billing.catalog.glue.CatalogModule;
 import com.ning.billing.dbi.MysqlTestingHelper;
+import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
+import com.ning.billing.invoice.api.Invoice;
+import com.ning.billing.invoice.api.InvoiceItem;
 import com.ning.billing.invoice.api.InvoiceUserApi;
 import com.ning.billing.junction.api.BlockingApi;
+import com.ning.billing.junction.api.BlockingState;
+import com.ning.billing.mock.BrainDeadProxyFactory;
+import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
+import com.ning.billing.mock.glue.MockClockModule;
 import com.ning.billing.mock.glue.MockInvoiceModule;
 import com.ning.billing.mock.glue.MockJunctionModule;
+import com.ning.billing.mock.glue.MockPaymentModule;
+import com.ning.billing.mock.glue.TestDbiModule;
+import com.ning.billing.overdue.applicator.ApplicatorMockJunctionModule;
 import com.ning.billing.overdue.applicator.TestOverdueStateApplicator;
+import com.ning.billing.overdue.applicator.ApplicatorMockJunctionModule.ApplicatorBlockingApi;
 import com.ning.billing.overdue.config.OverdueConfig;
 import com.ning.billing.overdue.glue.DefaultOverdueModule;
 import com.ning.billing.overdue.service.DefaultOverdueService;
 import com.ning.billing.overdue.wrapper.OverdueWrapperFactory;
 import com.ning.billing.util.bus.BusService;
 import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.glue.BusModule;
+import com.ning.billing.util.glue.NotificationQueueModule;
 
-@Guice(modules = {MockJunctionModule.class, MockInvoiceModule.class, DefaultOverdueModule.class})
+//@Guice(modules = {MockJunctionModule.class, MockInvoiceModule.class, DefaultOverdueModule.class})
+@Guice( modules = {DefaultOverdueModule.class, MockClockModule.class, ApplicatorMockJunctionModule.class, CatalogModule.class, MockInvoiceModule.class, MockPaymentModule.class, BusModule.class, NotificationQueueModule.class, TestDbiModule.class})
 public class OverdueTestBase {
     protected final String configXml =  
             "<overdueConfig>" +
@@ -110,7 +134,10 @@ public class OverdueTestBase {
     protected String productName;
     protected BillingPeriod term;
     protected String planSetName;
-    
+ 
+    @Inject
+    EntitlementUserApi entitlementApi;
+
     @Inject
     protected DefaultOverdueService service;
     @Inject
@@ -132,6 +159,9 @@ public class OverdueTestBase {
     public void setup() throws Exception{
 
         setupMySQL();
+        service.registerForBus();
+        service.initialize();
+ 
     }
 
     @AfterClass(groups = "slow")
@@ -149,4 +179,49 @@ public class OverdueTestBase {
         clock.resetDeltaFromReality();
 
     }
+    
+    protected void checkStateApplied( OverdueState<SubscriptionBundle> state) {
+        BlockingState result = ((ApplicatorBlockingApi)blockingApi).getBlockingState();
+        checkStateApplied( result, state);
+    }
+
+    protected void checkStateApplied(BlockingState result, OverdueState<SubscriptionBundle> state) {
+        Assert.assertEquals(result.getStateName(),state.getName());
+        Assert.assertEquals(result.isBlockChange(), state.blockChanges());
+        Assert.assertEquals(result.isBlockEntitlement(), state.disableEntitlementAndChangesBlocked());
+        Assert.assertEquals(result.isBlockBilling(), state.disableEntitlementAndChangesBlocked());
+    }
+
+
+    protected SubscriptionBundle createBundle(DateTime dateOfLastUnPaidInvoice) {
+        SubscriptionBundle bundle = BrainDeadProxyFactory.createBrainDeadProxyFor(SubscriptionBundle.class);
+        UUID bundleId = UUID.randomUUID();
+        ((ZombieControl)bundle).addResult("getId", bundleId);
+        ((ZombieControl)bundle).addResult("getAccountId", UUID.randomUUID());
+        
+        Invoice invoice = BrainDeadProxyFactory.createBrainDeadProxyFor(Invoice.class);
+        ((ZombieControl)invoice).addResult("getInvoiceDate",dateOfLastUnPaidInvoice);
+        ((ZombieControl)invoice).addResult("getBalance",BigDecimal.TEN);
+        ((ZombieControl)invoice).addResult("getId",UUID.randomUUID());
+
+        InvoiceItem item = BrainDeadProxyFactory.createBrainDeadProxyFor(InvoiceItem.class);
+        ((ZombieControl)item).addResult("getBundleId",bundleId);
+        List<InvoiceItem> items = new ArrayList<InvoiceItem>();
+        items.add(item);
+
+        ((ZombieControl)invoice).addResult("getInvoiceItems",items);
+        
+        List<Invoice> invoices = new ArrayList<Invoice>();
+        invoices.add(invoice);
+        ((ZombieControl)invoiceApi).addResult("getUnpaidInvoicesByAccountId", invoices);
+        
+        
+        Subscription base = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+        ((ZombieControl)base).addResult("getCurrentPlan", MockPlan.createBicycleNoTrialEvergreen1USD());
+        ((ZombieControl)base).addResult("getCurrentPriceList", new MockPriceList());
+        ((ZombieControl)base).addResult("getCurrentPhase", MockPlan.createBicycleNoTrialEvergreen1USD().getFinalPhase());
+        ((ZombieControl)entitlementApi).addResult("getBaseSubscription", base);
+       
+        return bundle;
+    }
 }