killbill-aplcache

Details

diff --git a/api/src/main/java/com/ning/billing/entitlement/api/overdue/EntitlementOverdueApi.java b/api/src/main/java/com/ning/billing/entitlement/api/overdue/EntitlementOverdueApi.java
new file mode 100644
index 0000000..37ac264
--- /dev/null
+++ b/api/src/main/java/com/ning/billing/entitlement/api/overdue/EntitlementOverdueApi.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.overdue;
+
+import java.util.UUID;
+
+import com.ning.billing.entitlement.api.user.Subscription;
+
+public interface EntitlementOverdueApi {
+
+    public Subscription getBaseSubscription(UUID bundleId);
+}
\ No newline at end of file
diff --git a/catalog/src/test/java/com/ning/billing/catalog/MockPlan.java b/catalog/src/test/java/com/ning/billing/catalog/MockPlan.java
index deececb..45ea7d3 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/MockPlan.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/MockPlan.java
@@ -60,13 +60,21 @@ public class MockPlan extends DefaultPlan {
 				-1);
 	}
 
-	public static MockPlan createJetTrialFixedTermEvergreen1000USD() {
-		return new MockPlan("JetTrialEvergreen1000USD",
-				MockProduct.createJet(),
-				new DefaultPlanPhase[]{ MockPlanPhase.create30DayTrial(), MockPlanPhase.createUSDMonthlyFixedTerm("500.00", null, 6) },
-				MockPlanPhase.create1USDMonthlyEvergreen(),
-				-1);
-	}
+    public static MockPlan createJetTrialFixedTermEvergreen1000USD() {
+        return new MockPlan("JetTrialEvergreen1000USD",
+                MockProduct.createJet(),
+                new DefaultPlanPhase[]{ MockPlanPhase.create30DayTrial(), MockPlanPhase.createUSDMonthlyFixedTerm("500.00", null, 6) },
+                MockPlanPhase.create1USDMonthlyEvergreen(),
+                -1);
+    }
+
+    public static MockPlan createHornMonthlyNoTrial1USD() {
+        return new MockPlan("Horn1USD",
+                MockProduct.createHorn(),
+                new DefaultPlanPhase[]{ },
+                MockPlanPhase.create1USDMonthlyEvergreen(),
+                -1);
+    }
 
 	public MockPlan() {
 		this("BicycleTrialEvergreen1USD",
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/overdue/DefaultEntitlementOverdueApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/overdue/DefaultEntitlementOverdueApi.java
new file mode 100644
index 0000000..eec6946
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/overdue/DefaultEntitlementOverdueApi.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.overdue;
+
+import java.util.List;
+import java.util.UUID;
+
+import com.google.inject.Inject;
+import com.ning.billing.catalog.api.ProductCategory;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.engine.dao.EntitlementDao;
+
+public class DefaultEntitlementOverdueApi implements EntitlementOverdueApi {
+    private EntitlementDao dao;
+
+    @Inject
+    public DefaultEntitlementOverdueApi(EntitlementDao dao) {
+        this.dao = dao;
+    }
+
+    @Override
+    public Subscription getBaseSubscription(UUID bundleId) {
+        List<Subscription> subscriptions = dao.getSubscriptions(bundleId);
+        for(Subscription subscription: subscriptions) {
+            if(subscription.getCurrentPlan().getProduct().getCategory() == ProductCategory.BASE) {
+                return subscription;
+            }
+        }
+        return null;
+    }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
index 704b765..88b3045 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/EntitlementModule.java
@@ -27,6 +27,8 @@ import com.ning.billing.entitlement.api.billing.DefaultEntitlementBillingApi;
 import com.ning.billing.entitlement.api.billing.EntitlementBillingApi;
 import com.ning.billing.entitlement.api.migration.DefaultEntitlementMigrationApi;
 import com.ning.billing.entitlement.api.migration.EntitlementMigrationApi;
+import com.ning.billing.entitlement.api.overdue.DefaultEntitlementOverdueApi;
+import com.ning.billing.entitlement.api.overdue.EntitlementOverdueApi;
 import com.ning.billing.entitlement.api.user.DefaultEntitlementUserApi;
 import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.api.user.SubscriptionApiService;
@@ -60,6 +62,7 @@ public class EntitlementModule extends AbstractModule {
         bind(EntitlementUserApi.class).to(DefaultEntitlementUserApi.class).asEagerSingleton();
         bind(EntitlementBillingApi.class).to(DefaultEntitlementBillingApi.class).asEagerSingleton();
         bind(EntitlementMigrationApi.class).to(DefaultEntitlementMigrationApi.class).asEagerSingleton();
+        bind(EntitlementOverdueApi.class).to(DefaultEntitlementOverdueApi.class).asEagerSingleton();
     }
 
     @Override
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/overdue/TestEntitlementOverdueApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/overdue/TestEntitlementOverdueApi.java
new file mode 100644
index 0000000..8a94cb7
--- /dev/null
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/overdue/TestEntitlementOverdueApi.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api.overdue;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.ning.billing.catalog.MockPlan;
+import com.ning.billing.catalog.api.Plan;
+import com.ning.billing.entitlement.api.user.Subscription;
+import com.ning.billing.entitlement.engine.dao.EntitlementDao;
+import com.ning.billing.mock.BrainDeadProxyFactory;
+import com.ning.billing.mock.BrainDeadProxyFactory.ZombieControl;
+
+public class TestEntitlementOverdueApi {
+    
+    @Test(groups={"fast"}, enabled=true)
+    public void testGetBasePlan() {
+        Plan basePlan = MockPlan.createBicycleNoTrialEvergreen1USD();
+        Plan addonPlan = MockPlan.createHornMonthlyNoTrial1USD();
+        
+        List<Subscription> subs = new ArrayList<Subscription>();
+        Subscription s1 = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+        Subscription s2 = BrainDeadProxyFactory.createBrainDeadProxyFor(Subscription.class);
+        ((ZombieControl)s1).addResult("getCurrentPlan", addonPlan);
+        ((ZombieControl)s2).addResult("getCurrentPlan", basePlan);
+        
+        subs.add(s1);
+        subs.add(s2);
+        
+        EntitlementDao dao = BrainDeadProxyFactory.createBrainDeadProxyFor(EntitlementDao.class);
+        ((ZombieControl)dao).addResult("getSubscriptions", subs);
+        
+        EntitlementOverdueApi api = new DefaultEntitlementOverdueApi(dao);
+        
+        Assert.assertEquals(api.getBaseSubscription(new UUID(0L,0L)).getCurrentPlan(),s2.getCurrentPlan());
+        // Note can't compare proxy objects directly because 'equals' is not implemented...
+    }
+
+}
diff --git a/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java b/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
index caccf62..75c6a60 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
@@ -30,7 +30,7 @@ import com.ning.billing.catalog.api.Product;
 import com.ning.billing.catalog.api.overdue.BillingState;
 import com.ning.billing.catalog.api.overdue.BillingStateBundle;
 import com.ning.billing.catalog.api.overdue.PaymentResponse;
-import com.ning.billing.entitlement.api.user.EntitlementUserApi;
+import com.ning.billing.entitlement.api.overdue.EntitlementOverdueApi;
 import com.ning.billing.entitlement.api.user.Subscription;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.invoice.api.Invoice;
@@ -39,11 +39,11 @@ import com.ning.billing.util.tag.Tag;
 
 public class BillingStateCalculatorBundle  extends BillingStateCalculator<SubscriptionBundle>{
 
-    private EntitlementUserApi entitlementApi;
+    private EntitlementOverdueApi entitlementApi;
     private InvoiceUserApi invoiceApi;
 
     @Inject 
-    public BillingStateCalculatorBundle(EntitlementUserApi entitlementApi, InvoiceUserApi invoiceApi) {
+    public BillingStateCalculatorBundle(EntitlementOverdueApi entitlementApi, InvoiceUserApi invoiceApi) {
         this.entitlementApi = entitlementApi;
         this.invoiceApi = invoiceApi;
     }
@@ -52,13 +52,13 @@ public class BillingStateCalculatorBundle  extends BillingStateCalculator<Subscr
     public BillingState<SubscriptionBundle> calculateBillingState(SubscriptionBundle bundle) {
         
         SortedSet<Invoice> unpaidInvoices = unpaidInvoicesFor(bundle.getId());
-        Subscription basePlan = null;
+        Subscription basePlan = entitlementApi.getBaseSubscription(bundle.getId());
         
         UUID id = bundle.getId();
         int numberOfUnpaidInvoices = unpaidInvoices.size(); 
         BigDecimal unpaidInvoiceBalance = sumBalance(unpaidInvoices);
         DateTime dateOfEarliestUnpaidInvoice = earliest(unpaidInvoices);
-        PaymentResponse responseForLastFailedPayment;
+        PaymentResponse responseForLastFailedPayment = null; //TODO
         Tag[] tags = new Tag[]{}; //TODO
         Product basePlanProduct = basePlan.getCurrentPlan().getProduct();
         BillingPeriod basePlanBillingPeriod = basePlan.getCurrentPlan().getBillingPeriod();
@@ -66,18 +66,17 @@ public class BillingStateCalculatorBundle  extends BillingStateCalculator<Subscr
         PhaseType basePlanPhaseType = basePlan.getCurrentPhase().getPhaseType();
         
 
-//        return new BillingStateBundle( 
-//            id, 
-//            numberOfUnpaidInvoices, 
-//            unpaidInvoiceBalance,
-//            dateOfEarliestUnpaidInvoice,
-//            responseForLastFailedPayment,
-//            tags, 
-//            basePlanProduct,
-//            basePlanBillingPeriod, 
-//            basePlanPriceList, 
-//            basePlanPhaseType);
+        return new BillingStateBundle( 
+            id, 
+            numberOfUnpaidInvoices, 
+            unpaidInvoiceBalance,
+            dateOfEarliestUnpaidInvoice,
+            responseForLastFailedPayment,
+            tags, 
+            basePlanProduct,
+            basePlanBillingPeriod, 
+            basePlanPriceList, 
+            basePlanPhaseType);
         
-        return null;
     }
 }