killbill-memoizeit
Changes
overdue/src/test/java/com/ning/billing/overdue/applicator/ApplicatorMockJunctionModule.java 53(+52 -1)
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;
+ }
}