Details
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
index b585844..d265697 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
@@ -134,6 +134,13 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
checkAddonCreationRights(baseSubscription, plan);
bundleStartDate = baseSubscription.getStartDate();
break;
+ case STANDALONE:
+ if (baseSubscription != null) {
+ throw new EntitlementUserApiException(ErrorCode.ENT_CREATE_BP_EXISTS, bundleId);
+ }
+ // Not really but we don't care, there is no alignment for STANDALONE subscriptions
+ bundleStartDate = requestedDate;
+ break;
default:
throw new EntitlementError(String.format("Can't create subscription of type %s",
plan.getProduct().getCategory().toString()));
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
index 2646d3e..427353a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/core/Engine.java
@@ -234,6 +234,7 @@ public class Engine implements EventListener, EntitlementService {
continue;
}
Plan addonCurrentPlan = cur.getCurrentPlan();
+ // If base Plan has been canceled, that will cancel all the OA
if (addonUtils.isAddonIncluded(baseSubscription, addonCurrentPlan) ||
! addonUtils.isAddonAvailable(baseSubscription, addonCurrentPlan)) {
//
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
index dff8fad..9507061 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
@@ -243,7 +243,7 @@ public class EntitlementSqlDao implements EntitlementDao {
@Override
public Void inTransaction(EventSqlDao dao,
TransactionStatus status) throws Exception {
- // STEPH what about future cancel events : seems like this is missing?
+ cancelNextCancelEventFromTransaction(subscriptionId, dao);
cancelNextChangeEventFromTransaction(subscriptionId, dao);
cancelNextPhaseEventFromTransaction(subscriptionId, dao);
dao.insertEvent(cancelEvent);
@@ -333,6 +333,10 @@ public class EntitlementSqlDao implements EntitlementDao {
cancelFutureEventFromTransaction(subscriptionId, dao, EventType.API_USER, ApiEventType.CHANGE);
}
+ private void cancelNextCancelEventFromTransaction(final UUID subscriptionId, final EventSqlDao dao) {
+ cancelFutureEventFromTransaction(subscriptionId, dao, EventType.API_USER, ApiEventType.CANCEL);
+ }
+
private void cancelFutureEventFromTransaction(final UUID subscriptionId, final EventSqlDao dao, EventType type, ApiEventType apiType) {
UUID futureEventId = null;
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiAddOn.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiAddOn.java
index 2e8bffd..71f2bb9 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiAddOn.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/user/TestUserApiAddOn.java
@@ -96,6 +96,7 @@ public class TestUserApiAddOn extends TestApiBase {
// MOVE AFTER CANCELLATION
testListener.reset();
testListener.pushExpectedEvent(NextEvent.CANCEL);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
clock.addDeltaFromReality(ctd);
now = clock.getUTCNow();
assertTrue(testListener.isCompleted(5000));
@@ -150,6 +151,7 @@ public class TestUserApiAddOn extends TestApiBase {
testListener.reset();
testListener.pushExpectedEvent(NextEvent.CHANGE);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
baseSubscription.changePlan(newBaseProduct, newBaseTerm, newBasePriceList, now);
assertTrue(testListener.isCompleted(5000));
@@ -210,6 +212,7 @@ public class TestUserApiAddOn extends TestApiBase {
// MOVE AFTER CHANGE
testListener.reset();
testListener.pushExpectedEvent(NextEvent.CHANGE);
+ testListener.pushExpectedEvent(NextEvent.CANCEL);
clock.addDeltaFromReality(ctd);
now = clock.getUTCNow();
assertTrue(testListener.isCompleted(5000));