killbill-memoizeit

subscription, entitlement: Enlarge the meaning of getLastActivePlan|Product|Phase

4/21/2017 11:36:03 PM

Details

diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestSubscription.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestSubscription.java
index 3d4ea4a..880c3a5 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestSubscription.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestSubscription.java
@@ -30,6 +30,7 @@ import org.killbill.billing.api.TestApiListener.NextEvent;
 import org.killbill.billing.beatrix.util.InvoiceChecker.ExpectedInvoiceItemCheck;
 import org.killbill.billing.catalog.api.BillingActionPolicy;
 import org.killbill.billing.catalog.api.BillingPeriod;
+import org.killbill.billing.catalog.api.PlanPhase;
 import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
 import org.killbill.billing.catalog.api.PriceListSet;
 import org.killbill.billing.catalog.api.ProductCategory;
@@ -477,6 +478,9 @@ public class TestSubscription extends TestIntegrationBase {
         assertEquals(createdEntitlement.getState(), EntitlementState.PENDING);
         assertEquals(createdEntitlement.getEffectiveStartDate().compareTo(futureDate), 0);
         assertEquals(createdEntitlement.getEffectiveEndDate(), null);
+        assertEquals(createdEntitlement.getLastActiveProduct().getName(), "Shotgun");
+        assertEquals(createdEntitlement.getLastActivePlan().getName(), "shotgun-annual");
+        assertEquals(createdEntitlement.getLastActiveProductCategory(), ProductCategory.BASE);
         assertListenerStatus();
 
 
diff --git a/subscription/src/main/java/org/killbill/billing/subscription/api/user/DefaultSubscriptionBase.java b/subscription/src/main/java/org/killbill/billing/subscription/api/user/DefaultSubscriptionBase.java
index 54768ac..e4fd803 100644
--- a/subscription/src/main/java/org/killbill/billing/subscription/api/user/DefaultSubscriptionBase.java
+++ b/subscription/src/main/java/org/killbill/billing/subscription/api/user/DefaultSubscriptionBase.java
@@ -18,20 +18,12 @@
 
 package org.killbill.billing.subscription.api.user;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.UUID;
-
-import javax.annotation.Nullable;
-
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.joda.time.LocalDate;
-import org.killbill.billing.callcontext.InternalCallContext;
 import org.killbill.billing.callcontext.InternalTenantContext;
 import org.killbill.billing.catalog.api.BillingActionPolicy;
 import org.killbill.billing.catalog.api.BillingAlignment;
@@ -68,9 +60,14 @@ import org.killbill.clock.Clock;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
+import javax.annotation.Nullable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
 
 public class DefaultSubscriptionBase extends EntityBase implements SubscriptionBase {
 
@@ -309,6 +306,9 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         if (getState() == EntitlementState.CANCELLED) {
             final SubscriptionBaseTransition data = getPreviousTransition();
             return data.getPreviousPlan().getProduct();
+        } else if (getState() == EntitlementState.PENDING) {
+            final SubscriptionBaseTransition data = getPendingTransition();
+            return data.getNextPlan().getProduct();
         } else {
             final Plan currentPlan = getCurrentPlan();
             // currentPlan can be null when playing with the clock (subscription created in the future)
@@ -321,6 +321,9 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         if (getState() == EntitlementState.CANCELLED) {
             final SubscriptionBaseTransition data = getPreviousTransition();
             return data.getPreviousPriceList();
+        } else if (getState() == EntitlementState.PENDING) {
+            final SubscriptionBaseTransition data = getPendingTransition();
+            return data.getNextPriceList();
         } else {
             return getCurrentPriceList();
         }
@@ -331,6 +334,9 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         if (getState() == EntitlementState.CANCELLED) {
             final SubscriptionBaseTransition data = getPreviousTransition();
             return data.getPreviousPlan().getProduct().getCategory();
+        } else if (getState() == EntitlementState.PENDING) {
+            final SubscriptionBaseTransition data = getPendingTransition();
+            return data.getNextPlan().getProduct().getCategory();
         } else {
             final Plan currentPlan = getCurrentPlan();
             // currentPlan can be null when playing with the clock (subscription created in the future)
@@ -343,6 +349,9 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         if (getState() == EntitlementState.CANCELLED) {
             final SubscriptionBaseTransition data = getPreviousTransition();
             return data.getPreviousPlan();
+        } else if (getState() == EntitlementState.PENDING) {
+            final SubscriptionBaseTransition data = getPendingTransition();
+            return data.getNextPlan();
         } else {
             return getCurrentPlan();
         }
@@ -353,6 +362,9 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         if (getState() == EntitlementState.CANCELLED) {
             final SubscriptionBaseTransition data = getPreviousTransition();
             return data.getPreviousPhase();
+        } else if (getState() == EntitlementState.PENDING) {
+            final SubscriptionBaseTransition data = getPendingTransition();
+            return data.getNextPhase();
         } else {
             return getCurrentPhase();
         }
@@ -363,6 +375,9 @@ public class DefaultSubscriptionBase extends EntityBase implements SubscriptionB
         if (getState() == EntitlementState.CANCELLED) {
             final SubscriptionBaseTransition data = getPreviousTransition();
             return data.getPreviousPlan().getRecurringBillingPeriod();
+        } else if (getState() == EntitlementState.PENDING) {
+            final SubscriptionBaseTransition data = getPendingTransition();
+            return data.getNextPlan().getRecurringBillingPeriod();
         } else {
             final Plan currentPlan = getCurrentPlan();
             // currentPlan can be null when playing with the clock (subscription created in the future)