killbill-aplcache
Changes
entitlement/src/main/java/com/ning/billing/entitlement/api/overdue/DefaultEntitlementOverdueApi.java 45(+45 -0)
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;
}
}