killbill-memoizeit
Changes
subscription/src/main/java/org/killbill/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java 12(+6 -6)
Details
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java b/subscription/src/main/java/org/killbill/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java
index 727f476..e6bdb7b 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/api/svcs/DefaultSubscriptionInternalApi.java
@@ -227,10 +227,8 @@ public class DefaultSubscriptionInternalApi extends SubscriptionApiBase implemen
final boolean isStandalone = isStandaloneSpecifier(catalog, effectiveDate, cur);
final boolean isBaseOrStandaloneSpecifier = isBase || isStandalone;
if (isBaseOrStandaloneSpecifier) {
- if (baseOrStandalonePlanSpecifier == null &&
- (isStandalone || (isBase && subscriptionBaseWithAddOnsSpecifier.getBundleId() == null))) {
+ if (baseOrStandalonePlanSpecifier == null) {
baseOrStandalonePlanSpecifier = cur;
-
} else {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_INVALID_ENTITLEMENT_SPECIFIER);
}
@@ -279,7 +277,8 @@ public class DefaultSubscriptionInternalApi extends SubscriptionApiBase implemen
SubscriptionBaseBundle bundle = null;
if (subscriptionBaseWithAddOnsSpecifier.getBundleId() != null) {
bundle = dao.getSubscriptionBundleFromId(subscriptionBaseWithAddOnsSpecifier.getBundleId(), context);
- if (bundle == null || (subscriptionBaseWithAddOnsSpecifier.getBundleExternalKey() != null && subscriptionBaseWithAddOnsSpecifier.getBundleExternalKey().equals(bundle.getExternalKey()))) {
+ if (bundle == null ||
+ (subscriptionBaseWithAddOnsSpecifier.getBundleExternalKey() != null && !subscriptionBaseWithAddOnsSpecifier.getBundleExternalKey().equals(bundle.getExternalKey()))) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_INVALID_ENTITLEMENT_SPECIFIER);
}
} else if (subscriptionBaseWithAddOnsSpecifier.getBundleExternalKey() != null &&
@@ -295,8 +294,9 @@ public class DefaultSubscriptionInternalApi extends SubscriptionApiBase implemen
}
}
+ SubscriptionBase baseSubscription = null;
if (bundle != null) {
- final SubscriptionBase baseSubscription = dao.getBaseSubscription(bundle.getId(), catalog, context);
+ baseSubscription = dao.getBaseSubscription(bundle.getId(), catalog, context);
if (baseSubscription != null) {
final DateTime baseSubscriptionStartDate = getBaseSubscription(bundle.getId(), context).getStartDate();
billingRequestedDate = billingRequestedDateRaw.isBefore(baseSubscriptionStartDate) ? baseSubscriptionStartDate : billingRequestedDateRaw;
@@ -308,7 +308,7 @@ public class DefaultSubscriptionInternalApi extends SubscriptionApiBase implemen
subscriptionBaseWithAddOnsSpecifier.getBundleExternalKey(),
renameCancelledBundleIfExist,
context);
- } else if (bundle != null && baseOrStandalonePlanSpecifier != null && isBaseSpecifier(catalog, billingRequestedDateRaw, baseOrStandalonePlanSpecifier)) {
+ } else if (bundle != null && baseSubscription != null && baseOrStandalonePlanSpecifier != null && isBaseSpecifier(catalog, billingRequestedDateRaw, baseOrStandalonePlanSpecifier)) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_BP_EXISTS, bundle.getExternalKey());
} else if (bundle == null) {
throw new SubscriptionBaseApiException(ErrorCode.SUB_CREATE_INVALID_ENTITLEMENT_SPECIFIER);
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiCreate.java b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiCreate.java
index b01709c..1cdba9a 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiCreate.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/user/TestUserApiCreate.java
@@ -41,6 +41,7 @@ import org.testng.Assert;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
@@ -88,17 +89,13 @@ public class TestUserApiCreate extends SubscriptionTestSuiteWithEmbeddedDB {
final SubscriptionBaseBundle newBundle = subscriptionInternalApi.createBundleForAccount(bundle.getAccountId(), DefaultSubscriptionTestInitializer.DEFAULT_BUNDLE_KEY, true, internalCallContext);
assertNotNull(newBundle);
- assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundle.getCreatedDate()), 0);
+ assertNotEquals(newBundle.getId(), subscription.getBundleId());
+ assertEquals(newBundle.getExternalKey(), DefaultSubscriptionTestInitializer.DEFAULT_BUNDLE_KEY);
+ assertEquals(newBundle.getOriginalCreatedDate().compareTo(bundle.getCreatedDate()), 0, String.format("OriginalCreatedDate=%s != CreatedDate=%s", newBundle.getOriginalCreatedDate(), bundle.getCreatedDate()));
- testListener.pushExpectedEvents(NextEvent.PHASE);
- final DefaultSubscriptionBase newSubscription = testUtil.createSubscription(bundle, productName, term, planSetName, requestedDate);
subscriptionInternalApi.updateExternalKey(newBundle.getId(), "myNewSuperKey", internalCallContext);
-
final SubscriptionBaseBundle bundleWithNewKey = subscriptionInternalApi.getBundleFromId(newBundle.getId(), internalCallContext);
assertEquals(bundleWithNewKey.getExternalKey(), "myNewSuperKey");
-
- assertListenerStatus();
- assertNotNull(newSubscription);
}
@Test(groups = "slow")
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
index 94d76ad..fb54d56 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/SubscriptionTestSuiteWithEmbeddedDB.java
@@ -120,7 +120,8 @@ public class SubscriptionTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteW
this.catalog = subscriptionTestInitializer.initCatalog(catalogService, internalCallContext);
this.accountData = subscriptionTestInitializer.initAccountData(clock);
final Account account = createAccount(accountData);
- this.bundle = subscriptionTestInitializer.initBundle(account.getId(), subscriptionInternalApi, clock, internalCallContext);
+ final SubscriptionBaseBundle model = subscriptionTestInitializer.initBundle(account.getId(), subscriptionInternalApi, clock, internalCallContext);
+ this.bundle = subscriptionInternalApi.createBundleForAccount(model.getAccountId(), model.getExternalKey(), false, internalCallContext);
}
@AfterMethod(groups = "slow")