diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/SubscriptionJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/SubscriptionJson.java
index fd64e0a..5629546 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/SubscriptionJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/SubscriptionJson.java
@@ -30,7 +30,6 @@ import org.killbill.billing.ObjectType;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.Currency;
-import org.killbill.billing.catalog.api.Plan;
import org.killbill.billing.catalog.api.PlanPhase;
import org.killbill.billing.catalog.api.PriceList;
import org.killbill.billing.catalog.api.Product;
@@ -377,21 +376,23 @@ public class SubscriptionJson extends JsonBase {
this.subscriptionId = subscription.getId().toString();
this.externalKey = subscription.getExternalKey();
this.events = new LinkedList<EventSubscriptionJson>();
+ // We fill the catalog info every time we get the currency from the account (even if this is not overridden Plan)
+ this.priceOverrides = new ArrayList<PhasePriceOverrideJson>();
+ String currentPhaseName = null;
for (final SubscriptionEvent subscriptionEvent : subscription.getSubscriptionEvents()) {
this.events.add(new EventSubscriptionJson(subscriptionEvent, accountAuditLogs));
- }
- // We fill the catalog info every time we get the currency from the account (even if this is not overridden Plan)
- this.priceOverrides = new ArrayList<PhasePriceOverrideJson>();
- if (currency != null) {
- final Plan plan = subscription.getLastActivePlan();
- if (plan != null) {
- for (final PlanPhase cur : plan.getAllPhases()) {
- final BigDecimal fixedPrice = cur.getFixed() != null ? cur.getFixed().getPrice().getPrice(currency) : null;
- final BigDecimal recurringPrice = cur.getRecurring() != null ? cur.getRecurring().getRecurringPrice().getPrice(currency) : null;
- final PhasePriceOverrideJson phase = new PhasePriceOverrideJson(cur.getName(), cur.getPhaseType().toString(), fixedPrice, recurringPrice);
- priceOverrides.add(phase);
+ if (currency != null) {
+ final PlanPhase cur = subscriptionEvent.getNextPhase();
+ if (cur == null || cur.getName().equals(currentPhaseName)) {
+ continue;
}
+ currentPhaseName = cur.getName();
+
+ final BigDecimal fixedPrice = cur.getFixed() != null ? cur.getFixed().getPrice().getPrice(currency) : null;
+ final BigDecimal recurringPrice = cur.getRecurring() != null ? cur.getRecurring().getRecurringPrice().getPrice(currency) : null;
+ final PhasePriceOverrideJson phase = new PhasePriceOverrideJson(cur.getName(), cur.getPhaseType().toString(), fixedPrice, recurringPrice);
+ priceOverrides.add(phase);
}
}
}
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
index fe19bb1..1927323 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestEntitlement.java
@@ -125,7 +125,15 @@ public class TestEntitlement extends TestJaxrsBase {
ProductCategory.BASE, term, true);
// Retrieves with GET
- Subscription objFromJson = killBillClient.getSubscription(entitlementJson.getSubscriptionId());
+ Subscription objFromJson = killBillClient.getSubscription(entitlementJson.getSubscriptionId(), requestOptions);
+ Assert.assertEquals(objFromJson.getPriceOverrides().size(), 2);
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(0).getPhaseName(), "shotgun-monthly-trial");
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(0).getFixedPrice(), BigDecimal.ZERO);
+ Assert.assertNull(objFromJson.getPriceOverrides().get(0).getRecurringPrice());
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(1).getPhaseName(), "shotgun-monthly-evergreen");
+ Assert.assertNull(objFromJson.getPriceOverrides().get(1).getFixedPrice());
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(1).getRecurringPrice(), new BigDecimal("249.95"));
+
// Equality in java client is not correctly implemented so manually check PriceOverrides section and then reset before equality
objFromJson.setPriceOverrides(null);
entitlementJson.setPriceOverrides(null);
@@ -140,17 +148,31 @@ public class TestEntitlement extends TestJaxrsBase {
// Cancel EOT
killBillClient.cancelSubscription(entitlementJson.getSubscriptionId(), EntitlementActionPolicy.END_OF_TERM,
- BillingActionPolicy.END_OF_TERM, CALL_COMPLETION_TIMEOUT_SEC, createdBy, reason, comment);
+ BillingActionPolicy.END_OF_TERM, CALL_COMPLETION_TIMEOUT_SEC, requestOptions);
// Retrieves to check EndDate
- objFromJson = killBillClient.getSubscription(entitlementJson.getSubscriptionId());
+ objFromJson = killBillClient.getSubscription(entitlementJson.getSubscriptionId(), requestOptions);
assertNotNull(objFromJson.getCancelledDate());
+ Assert.assertEquals(objFromJson.getPriceOverrides().size(), 2);
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(0).getPhaseName(), "shotgun-monthly-trial");
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(0).getFixedPrice(), BigDecimal.ZERO);
+ Assert.assertNull(objFromJson.getPriceOverrides().get(0).getRecurringPrice());
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(1).getPhaseName(), "shotgun-monthly-evergreen");
+ Assert.assertNull(objFromJson.getPriceOverrides().get(1).getFixedPrice());
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(1).getRecurringPrice(), new BigDecimal("249.95"));
// Uncancel
- killBillClient.uncancelSubscription(entitlementJson.getSubscriptionId(), createdBy, reason, comment);
+ killBillClient.uncancelSubscription(entitlementJson.getSubscriptionId(), requestOptions);
objFromJson = killBillClient.getSubscription(entitlementJson.getSubscriptionId());
assertNull(objFromJson.getCancelledDate());
+ Assert.assertEquals(objFromJson.getPriceOverrides().size(), 2);
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(0).getPhaseName(), "shotgun-monthly-trial");
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(0).getFixedPrice(), BigDecimal.ZERO);
+ Assert.assertNull(objFromJson.getPriceOverrides().get(0).getRecurringPrice());
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(1).getPhaseName(), "shotgun-monthly-evergreen");
+ Assert.assertNull(objFromJson.getPriceOverrides().get(1).getFixedPrice());
+ Assert.assertEquals(objFromJson.getPriceOverrides().get(1).getRecurringPrice(), new BigDecimal("249.95"));
}
@Test(groups = "slow", description = "Can handle non existent subscription")
@@ -227,9 +249,16 @@ public class TestEntitlement extends TestJaxrsBase {
overrides.add(new PhasePriceOverride(null, PhaseType.TRIAL.toString(), BigDecimal.TEN, null));
input.setPriceOverrides(overrides);
- final Subscription subscription = killBillClient.createSubscription(input, null, DEFAULT_WAIT_COMPLETION_TIMEOUT_SEC, basicRequestOptions());
+ final Subscription subscription = killBillClient.createSubscription(input, null, DEFAULT_WAIT_COMPLETION_TIMEOUT_SEC, requestOptions);
+ Assert.assertEquals(subscription.getPriceOverrides().size(), 2);
+ Assert.assertEquals(subscription.getPriceOverrides().get(0).getPhaseName(), "shotgun-monthly-1-trial");
+ Assert.assertEquals(subscription.getPriceOverrides().get(0).getFixedPrice().compareTo(BigDecimal.TEN), 0);
+ Assert.assertNull(subscription.getPriceOverrides().get(0).getRecurringPrice());
+ Assert.assertEquals(subscription.getPriceOverrides().get(1).getPhaseName(), "shotgun-monthly-1-evergreen");
+ Assert.assertNull(subscription.getPriceOverrides().get(1).getFixedPrice());
+ Assert.assertEquals(subscription.getPriceOverrides().get(1).getRecurringPrice(), new BigDecimal("249.95"));
- final List<Invoice> invoices = killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, false, false, AuditLevel.FULL);
+ final List<Invoice> invoices = killBillClient.getInvoicesForAccount(accountJson.getAccountId(), true, false, false, AuditLevel.FULL, requestOptions);
assertEquals(invoices.size(), 1);
assertEquals(invoices.get(0).getAmount().compareTo(BigDecimal.TEN), 0);
}
@@ -363,7 +392,7 @@ public class TestEntitlement extends TestJaxrsBase {
input.setProductCategory(ProductCategory.BASE);
input.setBillingPeriod(BillingPeriod.MONTHLY);
input.setPriceList(PriceListSet.DEFAULT_PRICELIST_NAME);
- final Subscription entitlementJson = killBillClient.createSubscription(input, initialDate.toLocalDate().plusMonths(1), -1, createdBy, reason, comment);
+ final Subscription entitlementJson = killBillClient.createSubscription(input, initialDate.toLocalDate().plusMonths(1), -1, requestOptions);
Assert.assertEquals(entitlementJson.getProductName(), input.getProductName());
Assert.assertEquals(entitlementJson.getProductCategory(), input.getProductCategory());
@@ -371,8 +400,15 @@ public class TestEntitlement extends TestJaxrsBase {
Assert.assertEquals(entitlementJson.getPriceList(), input.getPriceList());
// Retrieves with GET
- final Subscription objFromJson = killBillClient.getSubscription(entitlementJson.getSubscriptionId());
- Assert.assertTrue(objFromJson.equals(entitlementJson));
+ final Subscription subscription = killBillClient.getSubscription(entitlementJson.getSubscriptionId(), requestOptions);
+ Assert.assertTrue(subscription.equals(entitlementJson));
+ Assert.assertEquals(subscription.getPriceOverrides().size(), 2);
+ Assert.assertEquals(subscription.getPriceOverrides().get(0).getPhaseName(), "shotgun-monthly-trial");
+ Assert.assertEquals(subscription.getPriceOverrides().get(0).getFixedPrice(), BigDecimal.ZERO);
+ Assert.assertNull(subscription.getPriceOverrides().get(0).getRecurringPrice());
+ Assert.assertEquals(subscription.getPriceOverrides().get(1).getPhaseName(), "shotgun-monthly-evergreen");
+ Assert.assertNull(subscription.getPriceOverrides().get(1).getFixedPrice());
+ Assert.assertEquals(subscription.getPriceOverrides().get(1).getRecurringPrice(), new BigDecimal("249.95"));
}
@Test(groups = "slow", description = "Can create an entitlement with an account with autoPayOff")