Details
diff --git a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
index 9c2972e..9601841 100644
--- a/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
+++ b/entitlement/src/main/java/org/killbill/billing/entitlement/api/DefaultEntitlementApi.java
@@ -302,6 +302,12 @@ public class DefaultEntitlementApi extends DefaultEntitlementApiBase implements
}
@Override
+ public Iterable<BlockingState> getBlockingStatesForServiceAndType(final UUID blockableId, final BlockingStateType blockingStateType, final String serviceName, final TenantContext tenantContext) {
+ // Not implemented see #431
+ return null;
+ }
+
+ @Override
public UUID transferEntitlements(final UUID sourceAccountId, final UUID destAccountId, final String externalKey, final LocalDate effectiveDate, final Iterable<PluginProperty> properties, final CallContext context) throws EntitlementApiException {
return transferEntitlementsOverrideBillingPolicy(sourceAccountId, destAccountId, externalKey, effectiveDate, BillingActionPolicy.IMMEDIATE, properties, context);
}
diff --git a/entitlement/src/test/java/org/killbill/billing/entitlement/api/TestDefaultEntitlementApi.java b/entitlement/src/test/java/org/killbill/billing/entitlement/api/TestDefaultEntitlementApi.java
index 0e6bf5e..816c092 100644
--- a/entitlement/src/test/java/org/killbill/billing/entitlement/api/TestDefaultEntitlementApi.java
+++ b/entitlement/src/test/java/org/killbill/billing/entitlement/api/TestDefaultEntitlementApi.java
@@ -353,35 +353,6 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
}
}
- @Test(groups = "slow", description = "Test pause in the past")
- public void testPauseInThePast() throws AccountApiException, EntitlementApiException {
-
- final LocalDate initialDate = new LocalDate(2013, 8, 7);
- clock.setDay(initialDate);
-
- final Account account = accountApi.createAccount(getAccountData(7), callContext);
-
- // Create entitlement
- testListener.pushExpectedEvent(NextEvent.CREATE);
- final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, null);
- final Entitlement baseEntitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), null, initialDate, ImmutableList.<PluginProperty>of(), callContext);
- assertListenerStatus();
-
- // Get the phase event out of the way
- testListener.pushExpectedEvents(NextEvent.PHASE);
- clock.setDay(new LocalDate(2013, 9, 7));
- assertListenerStatus();
-
- // Move clock 4 days ahead
- clock.setDay(new LocalDate(2013, 9, 11));
-
- try {
- final LocalDate pauseDateInThePast = new LocalDate(2013, 9, 10);
- entitlementApi.pause(baseEntitlement.getBundleId(), pauseDateInThePast, ImmutableList.<PluginProperty>of(), callContext);
- Assert.fail("Operation pause with date in the past should fail");
- } catch (final EntitlementApiException expected) {
- }
- }
@Test(groups = "slow", description = "Test pause / unpause in the future")
public void testPauseUnpauseInTheFuture() throws AccountApiException, EntitlementApiException {
@@ -474,8 +445,6 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
final LocalDate initialDate = new LocalDate(2013, 8, 7);
clock.setDay(initialDate);
- final String stateName = "something";
-
final Account account = accountApi.createAccount(getAccountData(7), callContext);
final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, null);
@@ -488,7 +457,7 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
clock.addDays(5);
testListener.pushExpectedEvents(NextEvent.BLOCK);
- entitlementApi.block(baseEntitlement.getBundleId(), stateName, "foo", new LocalDate(clock.getUTCNow()), true, true, true, ImmutableList.<PluginProperty>of(), callContext);
+ entitlementApi.block(baseEntitlement.getBundleId(), "BLOCK", "foo", new LocalDate(clock.getUTCNow()), true, true, true, ImmutableList.<PluginProperty>of(), callContext);
assertListenerStatus();
List<Entitlement> bundleEntitlements = entitlementApi.getAllEntitlementsForBundle(baseEntitlement.getBundleId(), callContext);
@@ -504,7 +473,7 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
// Check unblocking on another service will not bring the sate back to ACTIVE
clock.addDays(1);
testListener.pushExpectedEvents(NextEvent.BLOCK);
- entitlementApi.unblock(baseEntitlement.getBundleId(), stateName, "bar", new LocalDate(clock.getUTCNow()), ImmutableList.<PluginProperty>of(), callContext);
+ entitlementApi.unblock(baseEntitlement.getBundleId(), "UNBLOCK", "bar", new LocalDate(clock.getUTCNow()), ImmutableList.<PluginProperty>of(), callContext);
assertListenerStatus();
bundleEntitlements = entitlementApi.getAllEntitlementsForBundle(baseEntitlement.getBundleId(), callContext);
@@ -513,7 +482,7 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
testListener.pushExpectedEvents(NextEvent.BLOCK);
- entitlementApi.unblock(baseEntitlement.getBundleId(), stateName, "foo", new LocalDate(clock.getUTCNow()), ImmutableList.<PluginProperty>of(), callContext);
+ entitlementApi.unblock(baseEntitlement.getBundleId(), "UNBLOCK", "foo", new LocalDate(clock.getUTCNow()), ImmutableList.<PluginProperty>of(), callContext);
assertListenerStatus();
bundleEntitlements = entitlementApi.getAllEntitlementsForBundle(baseEntitlement.getBundleId(), callContext);
@@ -524,7 +493,7 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
clock.addDays(1);
testListener.pushExpectedEvents(NextEvent.BLOCK);
- entitlementApi.block(baseEntitlement.getBundleId(), stateName, "foo", new LocalDate(clock.getUTCNow()), true, true, true, ImmutableList.<PluginProperty>of(), callContext);
+ entitlementApi.block(baseEntitlement.getBundleId(), "BLOCK", "foo", new LocalDate(clock.getUTCNow()), true, true, true, ImmutableList.<PluginProperty>of(), callContext);
assertListenerStatus();
bundleEntitlements = entitlementApi.getAllEntitlementsForBundle(baseEntitlement.getBundleId(), callContext);
@@ -533,7 +502,7 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
// Same day but happened after so should take precedence
testListener.pushExpectedEvents(NextEvent.BLOCK);
- entitlementApi.unblock(baseEntitlement.getBundleId(), stateName, "foo", new LocalDate(clock.getUTCNow()), ImmutableList.<PluginProperty>of(), callContext);
+ entitlementApi.unblock(baseEntitlement.getBundleId(), "UNBLOCK", "foo", new LocalDate(clock.getUTCNow()), ImmutableList.<PluginProperty>of(), callContext);
assertListenerStatus();
bundleEntitlements = entitlementApi.getAllEntitlementsForBundle(baseEntitlement.getBundleId(), callContext);
diff --git a/entitlement/src/test/java/org/killbill/billing/entitlement/block/TestBlockingApi.java b/entitlement/src/test/java/org/killbill/billing/entitlement/block/TestBlockingApi.java
index 28e0e04..cd6daa3 100644
--- a/entitlement/src/test/java/org/killbill/billing/entitlement/block/TestBlockingApi.java
+++ b/entitlement/src/test/java/org/killbill/billing/entitlement/block/TestBlockingApi.java
@@ -24,10 +24,17 @@ import java.util.UUID;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.api.TestApiListener.NextEvent;
import org.killbill.billing.callcontext.InternalCallContext;
+import org.killbill.billing.catalog.api.BillingPeriod;
+import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
+import org.killbill.billing.catalog.api.PriceListSet;
+import org.killbill.billing.catalog.api.ProductCategory;
import org.killbill.billing.entitlement.EntitlementTestSuiteWithEmbeddedDB;
import org.killbill.billing.entitlement.api.BlockingState;
import org.killbill.billing.entitlement.api.BlockingStateType;
+import org.killbill.billing.entitlement.api.Entitlement;
+import org.killbill.billing.entitlement.api.Entitlement.EntitlementState;
import org.killbill.billing.junction.DefaultBlockingState;
+import org.killbill.billing.payment.api.PluginProperty;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@@ -36,6 +43,8 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
+import static org.testng.Assert.assertEquals;
+
public class TestBlockingApi extends EntitlementTestSuiteWithEmbeddedDB {
@BeforeMethod(groups = "slow")
@@ -72,7 +81,6 @@ public class TestBlockingApi extends EntitlementTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testApiHistory() throws Exception {
- final UUID uuid = UUID.randomUUID();
final String overdueStateName = "WayPassedItMan";
final String service = "TEST";
@@ -84,7 +92,7 @@ public class TestBlockingApi extends EntitlementTestSuiteWithEmbeddedDB {
final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
testListener.pushExpectedEvent(NextEvent.BLOCK);
- final BlockingState state1 = new DefaultBlockingState(uuid, BlockingStateType.ACCOUNT, overdueStateName, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
+ final BlockingState state1 = new DefaultBlockingState(account.getId(), BlockingStateType.ACCOUNT, overdueStateName, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
blockingInternalApi.setBlockingState(state1, internalCallContext);
assertListenerStatus();
@@ -92,7 +100,7 @@ public class TestBlockingApi extends EntitlementTestSuiteWithEmbeddedDB {
testListener.pushExpectedEvent(NextEvent.BLOCK);
final String overdueStateName2 = "NoReallyThisCantGoOn";
- final BlockingState state2 = new DefaultBlockingState(uuid, BlockingStateType.ACCOUNT, overdueStateName2, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
+ final BlockingState state2 = new DefaultBlockingState(account.getId(), BlockingStateType.ACCOUNT, overdueStateName2, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
blockingInternalApi.setBlockingState(state2, internalCallContext);
assertListenerStatus();
@@ -109,4 +117,74 @@ public class TestBlockingApi extends EntitlementTestSuiteWithEmbeddedDB {
Assert.assertEquals(history.get(0).getStateName(), overdueStateName);
Assert.assertEquals(history.get(1).getStateName(), overdueStateName2);
}
+
+
+ @Test(groups = "slow")
+ public void testBlockingAcrossTypes() throws Exception {
+
+ final String stateNameBlock = "stateBlock";
+ final String stateNameUnBlock = "stateUnBlock";
+ final String service = "SVC_BLOC_TYPES";
+
+ final boolean blockChange = false;
+ final boolean blockEntitlement = true;
+ final boolean blockBilling = false;
+
+ final Account account = accountApi.createAccount(getAccountData(7), callContext);
+ final InternalCallContext internalCallContext = internalCallContextFactory.createInternalCallContext(account.getId(), callContext);
+
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
+ final BlockingState state1 = new DefaultBlockingState(account.getId(), BlockingStateType.ACCOUNT, stateNameBlock, service, blockChange, blockEntitlement, blockBilling, clock.getUTCNow());
+ blockingInternalApi.setBlockingState(state1, internalCallContext);
+ assertListenerStatus();
+
+ final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+
+ testListener.pushExpectedEvent(NextEvent.CREATE);
+ Entitlement baseEntitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), null, clock.getUTCToday(), ImmutableList.<PluginProperty>of(), callContext);
+ assertListenerStatus();
+
+ assertEquals(baseEntitlement.getState(), EntitlementState.BLOCKED);
+
+ // Add blocking at bundle level.
+ clock.addDays(1);
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
+ entitlementApi.block(baseEntitlement.getBundleId(), stateNameBlock, service, clock.getUTCToday(), blockBilling, blockEntitlement, blockChange, ImmutableList.<PluginProperty>of(), callContext);
+ assertListenerStatus();
+
+
+ baseEntitlement = entitlementApi.getEntitlementForId(baseEntitlement.getId(), callContext);
+ assertEquals(baseEntitlement.getState(), EntitlementState.BLOCKED);
+
+ // Remove blocking at account level
+ clock.addDays(1);
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
+ final BlockingState state2 = new DefaultBlockingState(account.getId(), BlockingStateType.ACCOUNT, stateNameUnBlock, service, false, false, false, clock.getUTCNow());
+ blockingInternalApi.setBlockingState(state2, internalCallContext);
+ assertListenerStatus();
+
+ baseEntitlement = entitlementApi.getEntitlementForId(baseEntitlement.getId(), callContext);
+ assertEquals(baseEntitlement.getState(), EntitlementState.BLOCKED);
+
+
+ // Remove blocking at bundle level.
+ clock.addDays(1);
+ testListener.pushExpectedEvent(NextEvent.BLOCK);
+ entitlementApi.unblock(baseEntitlement.getBundleId(), stateNameUnBlock, service, clock.getUTCToday(), ImmutableList.<PluginProperty>of(), callContext);
+ assertListenerStatus();
+
+ baseEntitlement = entitlementApi.getEntitlementForId(baseEntitlement.getId(), callContext);
+ assertEquals(baseEntitlement.getState(), EntitlementState.ACTIVE);
+
+ final List<BlockingState> blockingAll = blockingInternalApi.getBlockingAllForAccount(internalCallContext);
+ final List<BlockingState> history = ImmutableList.<BlockingState>copyOf(Collections2.<BlockingState>filter(blockingAll,
+ new Predicate<BlockingState>() {
+ @Override
+ public boolean apply(final BlockingState input) {
+ return input.getService().equals(service);
+ }
+ }));
+
+ Assert.assertEquals(history.size(), 4);
+ }
}
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestBundle.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestBundle.java
index dcc2f9a..84bc268 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestBundle.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestBundle.java
@@ -139,7 +139,7 @@ public class TestBundle extends TestJaxrsBase {
assertEquals(bundle.getAccountId(), accountJson.getAccountId());
assertEquals(bundle.getExternalKey(), bundleExternalKey);
- final BlockingState blockingState = new BlockingState(bundle.getBundleId(), "state", "service", false, true, true, clock.getToday(DateTimeZone.forID(accountJson.getTimeZone())), BlockingStateType.SUBSCRIPTION_BUNDLE, null);
+ final BlockingState blockingState = new BlockingState(bundle.getBundleId(), "block", "service", false, true, true, clock.getToday(DateTimeZone.forID(accountJson.getTimeZone())), BlockingStateType.SUBSCRIPTION_BUNDLE, null);
killBillClient.blockBundle(bundle.getBundleId(), blockingState, createdBy, reason, comment);
final Subscription subscription = killBillClient.getSubscription(entitlement.getSubscriptionId());
@@ -147,7 +147,7 @@ public class TestBundle extends TestJaxrsBase {
clock.addDays(1);
- final BlockingState unblockingState = new BlockingState(bundle.getBundleId(), "state", "service", false, false, false, clock.getToday(DateTimeZone.forID(accountJson.getTimeZone())), BlockingStateType.SUBSCRIPTION_BUNDLE, null);
+ final BlockingState unblockingState = new BlockingState(bundle.getBundleId(), "unblock", "service", false, false, false, clock.getToday(DateTimeZone.forID(accountJson.getTimeZone())), BlockingStateType.SUBSCRIPTION_BUNDLE, null);
killBillClient.blockBundle(bundle.getBundleId(), unblockingState, createdBy, reason, comment);
final Subscription subscription2 = killBillClient.getSubscription(entitlement.getSubscriptionId());