killbill-aplcache
Changes
entitlement/killbill-entitlement.iml 2(+1 -1)
entitlement/pom.xml 8(+4 -4)
Details
entitlement/killbill-entitlement.iml 2(+1 -1)
diff --git a/entitlement/killbill-entitlement.iml b/entitlement/killbill-entitlement.iml
index 5aac51c..b72ca26 100644
--- a/entitlement/killbill-entitlement.iml
+++ b/entitlement/killbill-entitlement.iml
@@ -51,9 +51,9 @@
<orderEntry type="module" module-name="killbill-catalog" scope="TEST" production-on-test="" />
<orderEntry type="library" scope="TEST" name="Maven: com.ning.billing:killbill-catalog:test-jar:tests:0.3.6-SNAPSHOT" level="project" />
<orderEntry type="module" module-name="killbill-catalog" scope="TEST" />
+ <orderEntry type="module" module-name="killbill-subscription" scope="TEST" />
<orderEntry type="module" module-name="killbill-util" scope="TEST" production-on-test="" />
<orderEntry type="library" scope="TEST" name="Maven: com.ning.billing:killbill-util:test-jar:tests:0.3.6-SNAPSHOT" level="project" />
- <orderEntry type="module" module-name="killbill-subscription" scope="TEST" />
<orderEntry type="library" scope="TEST" name="Maven: com.ning.billing.commons:killbill-clock:test-jar:tests:0.1.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.ning.billing.commons:killbill-queue:test-jar:tests:0.1.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: mysql:mysql-connector-mxj:5.0.12" level="project" />
entitlement/pom.xml 8(+4 -4)
diff --git a/entitlement/pom.xml b/entitlement/pom.xml
index 2d62a73..fd23f09 100644
--- a/entitlement/pom.xml
+++ b/entitlement/pom.xml
@@ -74,13 +74,12 @@
</dependency>
<dependency>
<groupId>com.ning.billing</groupId>
- <artifactId>killbill-util</artifactId>
+ <artifactId>killbill-subscription</artifactId>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>com.ning.billing</groupId>
<artifactId>killbill-util</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>com.ning.billing</groupId>
@@ -90,7 +89,8 @@
</dependency>
<dependency>
<groupId>com.ning.billing</groupId>
- <artifactId>killbill-subscription</artifactId>
+ <artifactId>killbill-util</artifactId>
+ <type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlementApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlementApi.java
index 94cb080..df1ce61 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlementApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlementApi.java
@@ -223,7 +223,7 @@ public class DefaultEntitlementApi implements EntitlementApi {
}
@Override
- public void block(final UUID bundleId, final String serviceName, final LocalDate effectiveDate, final CallContext context) throws EntitlementApiException {
+ public void block(final UUID bundleId, final LocalDate effectiveDate, final CallContext context) throws EntitlementApiException {
final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(context);
final BlockingState currentState = blockingStateDao.getBlockingStateForService(bundleId, EntitlementService.ENTITLEMENT_SERVICE_NAME, internalContext);
if (currentState != null && currentState.getStateName().equals(ENT_STATE_BLOCKED)) {
@@ -233,7 +233,7 @@ public class DefaultEntitlementApi implements EntitlementApi {
}
@Override
- public void unblock(final UUID bundleId, final String serviceName, final LocalDate effectiveDate, final CallContext context) throws EntitlementApiException {
+ public void unblock(final UUID bundleId, final LocalDate effectiveDate, final CallContext context) throws EntitlementApiException {
final InternalCallContext internalContext = internalCallContextFactory.createInternalCallContext(context);
final BlockingState currentState = blockingStateDao.getBlockingStateForService(bundleId, EntitlementService.ENTITLEMENT_SERVICE_NAME, internalContext);
if (currentState == null || currentState.getStateName().equals(ENT_STATE_CLEAR)) {
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/dao/BlockingStateSqlDao.sql.stg b/entitlement/src/main/resources/com/ning/billing/entitlement/dao/BlockingStateSqlDao.sql.stg
index 79b5491..0a12fb5 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/dao/BlockingStateSqlDao.sql.stg
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/dao/BlockingStateSqlDao.sql.stg
@@ -43,12 +43,19 @@ limit 1
getBlockingState() ::= <<
select
- <allTableFields()>
+ <allTableFields("t.")>
from
- <tableName()>
- where blockable_id = :blockableId
- <AND_CHECK_TENANT()>
- order by record_id asc
+ <tableName()> t
+ join (
+ select max(record_id) record_id
+ , service
+ from blocking_states
+ where blockable_id = :blockableId
+ <AND_CHECK_TENANT()>
+ group by service
+ ) tmp
+ on t.record_id = tmp.record_id
+ order by t.record_id asc
;
>>
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
index 9711717..9c06450 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/TestDefaultEntitlementApi.java
@@ -6,6 +6,7 @@ import org.joda.time.LocalDate;
import org.testng.Assert;
import org.testng.annotations.Test;
+import com.ning.billing.ErrorCode;
import com.ning.billing.account.api.Account;
import com.ning.billing.account.api.AccountApiException;
import com.ning.billing.catalog.api.BillingPeriod;
@@ -165,4 +166,71 @@ public class TestDefaultEntitlementApi extends EntitlementTestSuiteWithEmbeddedD
}
}
+
+ @Test(groups = "slow")
+ public void testBlockUnblock() {
+
+ try {
+
+ final LocalDate initialDate = new LocalDate(2013, 8, 7);
+ clock.setDay(initialDate);
+
+ final Account account = accountApi.createAccount(getAccountData(7), callContext);
+
+ final PlanPhaseSpecifier spec = new PlanPhaseSpecifier("Shotgun", ProductCategory.BASE, BillingPeriod.ANNUAL, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+
+ // Create entitlement and check each field
+ final Entitlement baseEntitlement = entitlementApi.createBaseEntitlement(account.getId(), spec, account.getExternalKey(), callContext);
+
+ clock.addDays(1);
+
+ final PlanPhaseSpecifier spec1 = new PlanPhaseSpecifier("Telescopic-Scope", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+ final Entitlement telescopicEntitlement = entitlementApi.addEntitlement(baseEntitlement.getBundleId(), spec1, callContext);
+
+ // Block all entitlement in the bundle
+ clock.addDays(5);
+ entitlementApi.block(baseEntitlement.getBundleId(), new LocalDate(clock.getUTCNow()), callContext);
+
+ // Verify blocking state
+ final Entitlement baseEntitlement2 = entitlementApi.getEntitlementForId(baseEntitlement.getId(), callContext);
+ assertEquals(baseEntitlement2.getState(), EntitlementState.BLOCKED);
+
+ final Entitlement telescopicEntitlement2 = entitlementApi.getEntitlementForId(telescopicEntitlement.getId(), callContext);
+ assertEquals(telescopicEntitlement2.getState(), EntitlementState.BLOCKED);
+
+ final List<Entitlement> bundleEntitlements2 = entitlementApi.getAllEntitlementsForBundle(telescopicEntitlement2.getBundleId(), callContext);
+ assertEquals(bundleEntitlements2.size(), 2);
+ for (Entitlement cur : bundleEntitlements2) {
+ assertEquals(cur.getState(), EntitlementState.BLOCKED);
+ }
+
+ // Try to add an ADD_ON, it should fail
+ try {
+ final PlanPhaseSpecifier spec3 = new PlanPhaseSpecifier("Telescopic-Scope", ProductCategory.BASE, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, null);
+ final Entitlement telescopicEntitlement3 = entitlementApi.addEntitlement(baseEntitlement.getBundleId(), spec1, callContext);
+ } catch (EntitlementApiException e) {
+ assertEquals(e.getCode(), ErrorCode.BLOCK_BLOCKED_ACTION.getCode());
+ }
+
+ clock.addDays(3);
+ entitlementApi.unblock(baseEntitlement.getBundleId(), new LocalDate(), callContext);
+
+ // Verify blocking state
+ final Entitlement baseEntitlement3 = entitlementApi.getEntitlementForId(baseEntitlement.getId(), callContext);
+ assertEquals(baseEntitlement3.getState(), EntitlementState.ACTIVE);
+
+ final Entitlement telescopicEntitlement3 = entitlementApi.getEntitlementForId(telescopicEntitlement.getId(), callContext);
+ assertEquals(telescopicEntitlement3.getState(), EntitlementState.ACTIVE);
+
+ final List<Entitlement> bundleEntitlements3 = entitlementApi.getAllEntitlementsForBundle(telescopicEntitlement2.getBundleId(), callContext);
+ assertEquals(bundleEntitlements3.size(), 2);
+ for (Entitlement cur : bundleEntitlements3) {
+ assertEquals(cur.getState(), EntitlementState.ACTIVE);
+ }
+ } catch (AccountApiException e) {
+ Assert.fail("Test failed " + e.getMessage());
+ } catch (EntitlementApiException e) {
+ Assert.fail("Test failed " + e.getMessage());
+ }
+ }
}