killbill-uncached

catalog: cleanups * Remove duplicate internal APIs * Don't

6/22/2018 12:56:56 PM

Changes

jaxrs/pom.xml 4(+0 -4)

Details

diff --git a/api/src/main/java/org/killbill/billing/catalog/api/CatalogInternalApi.java b/api/src/main/java/org/killbill/billing/catalog/api/CatalogInternalApi.java
index 4abfcae..54d5d75 100644
--- a/api/src/main/java/org/killbill/billing/catalog/api/CatalogInternalApi.java
+++ b/api/src/main/java/org/killbill/billing/catalog/api/CatalogInternalApi.java
@@ -23,6 +23,4 @@ public interface CatalogInternalApi {
 
     public Catalog getFullCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
 
-    public StaticCatalog getCurrentCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
-
 }
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/api/CatalogService.java b/catalog/src/main/java/org/killbill/billing/catalog/api/CatalogService.java
index 6f138f7..094fece 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/api/CatalogService.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/api/CatalogService.java
@@ -29,8 +29,4 @@ public interface CatalogService extends KillbillService {
     public DefaultVersionedCatalog getFullCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
 
     public DefaultVersionedCatalog getFullCatalogForInternalUse(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
-
-    public DefaultVersionedCatalog getCurrentCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
-
-    public DefaultVersionedCatalog getCurrentCatalogForInternalUse(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
 }
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/api/DefaultCatalogInternalApi.java b/catalog/src/main/java/org/killbill/billing/catalog/api/DefaultCatalogInternalApi.java
index 168d48a..4ad7536 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/api/DefaultCatalogInternalApi.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/api/DefaultCatalogInternalApi.java
@@ -20,19 +20,13 @@ package org.killbill.billing.catalog.api;
 import javax.inject.Inject;
 
 import org.killbill.billing.callcontext.InternalTenantContext;
-import org.killbill.billing.util.callcontext.InternalCallContextFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class DefaultCatalogInternalApi implements CatalogInternalApi {
 
-    private final Logger logger = LoggerFactory.getLogger(DefaultCatalogInternalApi.class);
-
     private final CatalogService catalogService;
 
     @Inject
-    public DefaultCatalogInternalApi(final CatalogService catalogService,
-                                     final InternalCallContextFactory internalCallContextFactory) {
+    public DefaultCatalogInternalApi(final CatalogService catalogService) {
         this.catalogService = catalogService;
     }
 
@@ -40,9 +34,4 @@ public class DefaultCatalogInternalApi implements CatalogInternalApi {
     public Catalog getFullCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
         return catalogService.getFullCatalogForInternalUse(useDefaultCatalog, filterTemplateCatalog, context);
     }
-
-    @Override
-    public StaticCatalog getCurrentCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
-        return catalogService.getCurrentCatalogForInternalUse(useDefaultCatalog, filterTemplateCatalog, context);
-    }
 }
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java b/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
index fc59d6c..9eb6833 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
@@ -110,7 +110,7 @@ public class DefaultCatalogUserApi implements CatalogUserApi {
         } else {
             internalTenantContext = createInternalTenantContext(tenantContext);
         }
-        return catalogService.getCurrentCatalog(true, true, internalTenantContext);
+        return catalogService.getFullCatalog(true, true, internalTenantContext);
     }
 
     @Override
@@ -232,7 +232,7 @@ public class DefaultCatalogUserApi implements CatalogUserApi {
     }
 
     private StandaloneCatalog getCurrentStandaloneCatalogForTenant(final InternalTenantContext internalTenantContext) throws CatalogApiException {
-        final DefaultVersionedCatalog versionedCatalog = catalogService.getCurrentCatalog(false, false, internalTenantContext);
+        final DefaultVersionedCatalog versionedCatalog = catalogService.getFullCatalog(false, false, internalTenantContext);
         if (versionedCatalog != null && !versionedCatalog.getVersions().isEmpty()) {
             final StandaloneCatalog standaloneCatalogWithPriceOverride = versionedCatalog.getVersions().get(versionedCatalog.getVersions().size() - 1);
             return standaloneCatalogWithPriceOverride;
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultCatalogService.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultCatalogService.java
index 0497adf..5dbd140 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultCatalogService.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultCatalogService.java
@@ -96,16 +96,6 @@ public class DefaultCatalogService implements KillbillService, CatalogService {
         return getCatalog(useDefaultCatalog, filterTemplateCatalog, true, context);
     }
 
-    @Override
-    public DefaultVersionedCatalog getCurrentCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
-        return getCatalog(useDefaultCatalog, filterTemplateCatalog, false, context);
-    }
-
-    @Override
-    public DefaultVersionedCatalog getCurrentCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
-        return getCatalog(useDefaultCatalog, filterTemplateCatalog, true, context);
-    }
-
     private DefaultVersionedCatalog getCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final boolean internalUse, final InternalTenantContext context) throws CatalogApiException {
         return catalogCache.getCatalog(useDefaultCatalog, filterTemplateCatalog, internalUse, context);
     }
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
index 25f90bc..d248450 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
@@ -59,6 +59,8 @@ import org.killbill.xmlloader.ValidatingConfig;
 import org.killbill.xmlloader.ValidationError;
 import org.killbill.xmlloader.ValidationErrors;
 
+import com.google.common.annotations.VisibleForTesting;
+
 @XmlAccessorType(XmlAccessType.NONE)
 public class DefaultPlan extends ValidatingConfig<StandaloneCatalog> implements Plan, Externalizable {
 
@@ -99,7 +101,8 @@ public class DefaultPlan extends ValidatingConfig<StandaloneCatalog> implements 
     private String priceListName;
 
     // Not exposed in XML
-    private StandaloneCatalog staticCatalog;
+    @VisibleForTesting
+    StandaloneCatalog staticCatalog;
 
     // For deserialization
     public DefaultPlan() {
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogModule.java b/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogModule.java
index c755d8e..fbd72fa 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogModule.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogModule.java
@@ -22,6 +22,7 @@ import org.killbill.billing.callcontext.InternalCallContext;
 import org.killbill.billing.catalog.api.CatalogApiException;
 import org.killbill.billing.catalog.api.CatalogInternalApi;
 import org.killbill.billing.catalog.api.CatalogService;
+import org.killbill.billing.catalog.api.VersionedCatalog;
 import org.killbill.billing.platform.api.KillbillConfigSource;
 import org.killbill.billing.util.glue.KillBillModule;
 import org.mockito.Mockito;
@@ -34,20 +35,17 @@ public class MockCatalogModule extends KillBillModule {
 
     @Override
     protected void configure() {
-        final DefaultVersionedCatalog catalog = Mockito.mock(DefaultVersionedCatalog.class);
-
         final CatalogService catalogService = Mockito.mock(CatalogService.class);
         final CatalogInternalApi catalogInternalApi = Mockito.mock(CatalogInternalApi.class);
         try {
             final DefaultVersionedCatalog mockVersionedCatalog = new DefaultVersionedCatalog();
-            mockVersionedCatalog.add(new MockCatalog());
-            Mockito.when(catalogService.getCurrentCatalogForInternalUse(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(mockVersionedCatalog);
-            Mockito.when(catalogService.getFullCatalogForInternalUse(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(catalog);
-            Mockito.when(catalogService.getCurrentCatalog(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(mockVersionedCatalog);
-            Mockito.when(catalogService.getFullCatalog(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(catalog);
+            final MockCatalog mockCatalog = new MockCatalog();
+            mockVersionedCatalog.add(mockCatalog);
+            Mockito.when(catalogService.getFullCatalogForInternalUse(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(mockVersionedCatalog);
+            Mockito.when(catalogService.getFullCatalog(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(mockVersionedCatalog);
             bind(CatalogService.class).toInstance(catalogService);
             bind(CatalogInternalApi.class).toInstance(catalogInternalApi);
-        } catch (CatalogApiException e) {
+        } catch (final CatalogApiException e) {
             throw new RuntimeException(e);
         }
     }
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogService.java b/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogService.java
index ca5799e..1092f06 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogService.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogService.java
@@ -45,17 +45,7 @@ public class MockCatalogService extends DefaultCatalogService {
     }
 
     @Override
-    public DefaultVersionedCatalog getCurrentCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
-        return catalog;
-    }
-
-    @Override
     public DefaultVersionedCatalog getFullCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
         return catalog;
     }
-
-    @Override
-    public DefaultVersionedCatalog getCurrentCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
-        return catalog;
-    }
 }
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/MockPlan.java b/catalog/src/test/java/org/killbill/billing/catalog/MockPlan.java
index e4ed959..cd4d0cc 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/MockPlan.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/MockPlan.java
@@ -17,7 +17,9 @@
 package org.killbill.billing.catalog;
 
 import java.util.Collection;
+import java.util.Date;
 
+import org.joda.time.DateTime;
 import org.killbill.billing.catalog.api.BillingMode;
 import org.killbill.billing.catalog.api.Plan;
 
@@ -90,6 +92,7 @@ public class MockPlan extends DefaultPlan {
     }
 
     public MockPlan(final String name, final DefaultProduct product, final DefaultPlanPhase[] planPhases, final DefaultPlanPhase finalPhase, final int plansAllowedInBundle) {
+        this.staticCatalog = new StandaloneCatalog(new Date());
         setName(name);
         setProduct(product);
         setFinalPhase(finalPhase);

jaxrs/pom.xml 4(+0 -4)

diff --git a/jaxrs/pom.xml b/jaxrs/pom.xml
index d16c5bd..aaadb1f 100644
--- a/jaxrs/pom.xml
+++ b/jaxrs/pom.xml
@@ -93,10 +93,6 @@
         </dependency>
         <dependency>
             <groupId>org.kill-bill.billing</groupId>
-            <artifactId>killbill-catalog</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.kill-bill.billing</groupId>
             <artifactId>killbill-internal-api</artifactId>
         </dependency>
         <dependency>
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PhasePriceJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PhasePriceJson.java
index 4c2647e..bb99060 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PhasePriceJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PhasePriceJson.java
@@ -1,6 +1,6 @@
 /*
- * Copyright 2014-2015 Groupon, Inc
- * Copyright 2014-2015 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
  *
  * The Billing Project licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
@@ -23,35 +23,19 @@ import java.util.List;
 
 import javax.annotation.Nullable;
 
-import com.google.common.base.Preconditions;
-import org.killbill.billing.catalog.DefaultPlanPhasePriceOverride;
-import org.killbill.billing.catalog.DefaultTierPriceOverride;
-import org.killbill.billing.catalog.DefaultTieredBlockPriceOverride;
-import org.killbill.billing.catalog.DefaultUsagePriceOverride;
 import org.killbill.billing.catalog.api.CatalogApiException;
 import org.killbill.billing.catalog.api.Currency;
-import org.killbill.billing.catalog.api.PhaseType;
-import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
-import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
-import org.killbill.billing.catalog.api.PlanSpecifier;
 import org.killbill.billing.catalog.api.Tier;
-import org.killbill.billing.catalog.api.TierPriceOverride;
 import org.killbill.billing.catalog.api.TieredBlock;
-import org.killbill.billing.catalog.api.TieredBlockPriceOverride;
 import org.killbill.billing.catalog.api.Usage;
-import org.killbill.billing.catalog.api.UsagePriceOverride;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
 import io.swagger.annotations.ApiModel;
 
-@ApiModel(value="PhasePrice")
+@ApiModel(value = "PhasePrice")
 public class PhasePriceJson {
 
-
     private final String planName;
     private final String phaseName;
     private final String phaseType;
@@ -89,19 +73,17 @@ public class PhasePriceJson {
         this.usagePrices = new LinkedList<UsagePriceJson>();
 
         for (final Usage usage : usagePrices) {
-            List <TierPriceJson> usageTierPrices = new LinkedList<TierPriceJson>();
-             for(final Tier tier :usage.getTiers())
-             {
-                 List <BlockPriceJson> blockPrices = new LinkedList<BlockPriceJson>();
-
-                 for(final TieredBlock block : tier.getTieredBlocks())
-                 {
-                     BlockPriceJson blockPriceJson = new BlockPriceJson(block.getUnit().getName(), block.getSize(), block.getPrice().getPrice(currency), block.getMax());
-                     blockPrices.add(blockPriceJson);
-                 }
-                     TierPriceJson tierPriceJson = new TierPriceJson(blockPrices);
-                     usageTierPrices.add(tierPriceJson);
-             }
+            List<TierPriceJson> usageTierPrices = new LinkedList<TierPriceJson>();
+            for (final Tier tier : usage.getTiers()) {
+                List<BlockPriceJson> blockPrices = new LinkedList<BlockPriceJson>();
+
+                for (final TieredBlock block : tier.getTieredBlocks()) {
+                    BlockPriceJson blockPriceJson = new BlockPriceJson(block.getUnit().getName(), block.getSize(), block.getPrice().getPrice(currency), block.getMax());
+                    blockPrices.add(blockPriceJson);
+                }
+                TierPriceJson tierPriceJson = new TierPriceJson(blockPrices);
+                usageTierPrices.add(tierPriceJson);
+            }
             final UsagePriceJson usagePriceJson = new UsagePriceJson(usage.getName(), usage.getUsageType(), usage.getBillingMode(), usage.getTierBlockPolicy(), usageTierPrices);
             this.usagePrices.add(usagePriceJson);
         }
@@ -132,7 +114,6 @@ public class PhasePriceJson {
         return usagePrices;
     }
 
-
     @Override
     public String toString() {
         return "PhasePriceJson{" +
@@ -156,7 +137,6 @@ public class PhasePriceJson {
 
         final PhasePriceJson that = (PhasePriceJson) o;
 
-
         if (fixedPrice != null ? fixedPrice.compareTo(that.fixedPrice) != 0 : that.fixedPrice != null) {
             return false;
         }
@@ -188,48 +168,4 @@ public class PhasePriceJson {
         result = 31 * result + (usagePrices != null ? usagePrices.hashCode() : 0);
         return result;
     }
-
-    public static List<PlanPhasePriceOverride> toPlanPhasePriceOverrides(final List<PhasePriceJson> priceOverrides, final PlanSpecifier spec, final Currency currency) {
-        if (priceOverrides == null || priceOverrides.isEmpty()) {
-            return ImmutableList.<PlanPhasePriceOverride>of();
-        }
-        return ImmutableList.copyOf(Iterables.transform(priceOverrides, new Function<PhasePriceJson, PlanPhasePriceOverride>() {
-            @Nullable
-            @Override
-            public PlanPhasePriceOverride apply(@Nullable final PhasePriceJson input) {
-
-                List <UsagePriceOverride> usagePrices = new LinkedList<UsagePriceOverride>();
-                Preconditions.checkNotNull(input);
-                if(input.getUsagePrices() != null) {
-                    for (final UsagePriceJson usageOverrideJson : input.getUsagePrices()) {
-                        List<TierPriceOverride> tierPriceOverrides = new LinkedList<TierPriceOverride>();
-                        for (final TierPriceJson tierPriceJson : usageOverrideJson.getTierPrices()) {
-                            List<TieredBlockPriceOverride> blockPriceOverrides = new LinkedList<TieredBlockPriceOverride>();
-                            for (final BlockPriceJson block : tierPriceJson.getBlockPrices()) {
-                                DefaultTieredBlockPriceOverride tieredBlockPriceOverride = new DefaultTieredBlockPriceOverride( block.getUnitName(), block.getSize(), block.getPrice(),currency, block.getMax());
-                                blockPriceOverrides.add(tieredBlockPriceOverride);
-                            }
-                            DefaultTierPriceOverride tierPriceOverride = new DefaultTierPriceOverride(blockPriceOverrides);
-                            tierPriceOverrides.add(tierPriceOverride);
-                        }
-                        final DefaultUsagePriceOverride usageOverride = new DefaultUsagePriceOverride(usageOverrideJson.getUsageName(), usageOverrideJson.getUsageType(), tierPriceOverrides);
-                        usagePrices.add(usageOverride);
-                    }
-                }
-
-                if (input.getPhaseName() != null) {
-                    return new DefaultPlanPhasePriceOverride(input.getPhaseName(), currency, input.getFixedPrice(), input.getRecurringPrice(), usagePrices);
-                } else {
-                    final PhaseType phaseType = input.getPhaseType() != null ? PhaseType.valueOf(input.getPhaseType()) : null;
-
-                    final PlanPhaseSpecifier planPhaseSpecifier = spec.getPlanName() != null ?
-                                                                  new PlanPhaseSpecifier(spec.getPlanName(), phaseType) :
-                                                                  new PlanPhaseSpecifier(spec.getProductName(), spec.getBillingPeriod(), spec.getPriceListName(), phaseType);
-                    final Currency resolvedCurrency = input.getFixedPrice() != null || input.getRecurringPrice() != null ? currency : null;
-                    return new DefaultPlanPhasePriceOverride(planPhaseSpecifier, resolvedCurrency, input.getFixedPrice(), input.getRecurringPrice(), usagePrices);
-                }
-            }
-        }));
-
-    }
 }
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
index 8dbdfa3..95bea49 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
@@ -18,6 +18,7 @@
 
 package org.killbill.billing.jaxrs.resources;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
@@ -40,18 +41,21 @@ import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.joda.time.LocalDate;
 import org.killbill.billing.account.api.AccountUserApi;
+import org.killbill.billing.catalog.api.BillingPeriod;
 import org.killbill.billing.catalog.api.CatalogApiException;
 import org.killbill.billing.catalog.api.CatalogUserApi;
+import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.catalog.api.CurrencyValueNull;
 import org.killbill.billing.catalog.api.Listing;
 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;
+import org.killbill.billing.catalog.api.ProductCategory;
 import org.killbill.billing.catalog.api.SimplePlanDescriptor;
 import org.killbill.billing.catalog.api.StaticCatalog;
+import org.killbill.billing.catalog.api.TimeUnit;
 import org.killbill.billing.catalog.api.VersionedCatalog;
-import org.killbill.billing.catalog.api.user.DefaultSimplePlanDescriptor;
 import org.killbill.billing.entitlement.api.Subscription;
 import org.killbill.billing.entitlement.api.SubscriptionApi;
 import org.killbill.billing.entitlement.api.SubscriptionApiException;
@@ -443,15 +447,53 @@ public class CatalogResource extends JaxRsResourceBase {
                                   @javax.ws.rs.core.Context final UriInfo uriInfo) throws Exception {
         final CallContext callContext = context.createCallContextNoAccountId(createdBy, reason, comment, request);
 
-        final SimplePlanDescriptor desc = new DefaultSimplePlanDescriptor(simplePlan.getPlanId(),
-                                                                          simplePlan.getProductName(),
-                                                                          simplePlan.getProductCategory(),
-                                                                          simplePlan.getCurrency(),
-                                                                          simplePlan.getAmount(),
-                                                                          simplePlan.getBillingPeriod(),
-                                                                          simplePlan.getTrialLength(),
-                                                                          simplePlan.getTrialTimeUnit(),
-                                                                          simplePlan.getAvailableBaseProducts());
+        final SimplePlanDescriptor desc = new SimplePlanDescriptor() {
+            @Override
+            public String getPlanId() {
+                return simplePlan.getPlanId();
+            }
+
+            @Override
+            public String getProductName() {
+                return simplePlan.getProductName();
+            }
+
+            @Override
+            public ProductCategory getProductCategory() {
+                return simplePlan.getProductCategory();
+            }
+
+            @Override
+            public List<String> getAvailableBaseProducts() {
+                return simplePlan.getAvailableBaseProducts();
+            }
+
+            @Override
+            public Currency getCurrency() {
+                return simplePlan.getCurrency();
+            }
+
+            @Override
+            public BigDecimal getAmount() {
+                return simplePlan.getAmount();
+            }
+
+            @Override
+            public BillingPeriod getBillingPeriod() {
+                return simplePlan.getBillingPeriod();
+            }
+
+            @Override
+            public Integer getTrialLength() {
+                return simplePlan.getTrialLength();
+            }
+
+            @Override
+            public TimeUnit getTrialTimeUnit() {
+                return simplePlan.getTrialTimeUnit();
+            }
+        };
+
         catalogUserApi.addSimplePlan(desc, null, callContext);
         return uriBuilder.buildResponse(uriInfo, CatalogResource.class, null, null, request);
     }
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
index d086be5..128a0e0 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/InvoiceResource.java
@@ -56,7 +56,6 @@ import org.killbill.billing.ObjectType;
 import org.killbill.billing.account.api.Account;
 import org.killbill.billing.account.api.AccountApiException;
 import org.killbill.billing.account.api.AccountUserApi;
-import org.killbill.billing.catalog.DefaultPlanPhasePriceOverride;
 import org.killbill.billing.catalog.api.BillingActionPolicy;
 import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
@@ -77,7 +76,6 @@ import org.killbill.billing.jaxrs.json.InvoiceDryRunJson;
 import org.killbill.billing.jaxrs.json.InvoiceItemJson;
 import org.killbill.billing.jaxrs.json.InvoiceJson;
 import org.killbill.billing.jaxrs.json.InvoicePaymentJson;
-import org.killbill.billing.jaxrs.json.PhasePriceJson;
 import org.killbill.billing.jaxrs.json.TagJson;
 import org.killbill.billing.jaxrs.util.Context;
 import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
@@ -124,6 +122,7 @@ import io.swagger.annotations.ApiResponses;
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 import static javax.ws.rs.core.MediaType.TEXT_HTML;
 import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
+import static org.killbill.billing.jaxrs.resources.SubscriptionResourceHelpers.buildPlanPhasePriceOverrides;
 
 @Path(JaxrsResource.INVOICES_PATH)
 @Api(value = JaxrsResource.INVOICES_PATH, description = "Operations on invoices", tags="Invoice")
@@ -1121,19 +1120,10 @@ public class InvoiceResource extends JaxRsResourceBase {
                                                                                      input.getPriceListName(),
                                                                                      input.getPhaseType() != null ? input.getPhaseType() : null) :
                                                               null;
-                final List<PlanPhasePriceOverride> overrides = input.getPriceOverrides() != null ?
-                                 ImmutableList.copyOf(Iterables.transform(input.getPriceOverrides(), new Function<PhasePriceJson, PlanPhasePriceOverride>() {
-                                     @Nullable
-                                     @Override
-                                     public PlanPhasePriceOverride apply(@Nullable final PhasePriceJson input) {
-                                         if (input.getPhaseName() != null) {
-
-                                             return new DefaultPlanPhasePriceOverride(input.getPhaseName(), account.getCurrency(), input.getFixedPrice(), input.getRecurringPrice(), null);
-                                         } else {
-                                             return new DefaultPlanPhasePriceOverride(planPhaseSpecifier, account.getCurrency(), input.getFixedPrice(), input.getRecurringPrice(), null);
-                                         }
-                                     }
-                                 })) : ImmutableList.<PlanPhasePriceOverride>of();
+                final List<PlanPhasePriceOverride> overrides = buildPlanPhasePriceOverrides(input.getPriceOverrides(),
+                                                                                            account.getCurrency(),
+                                                                                            planPhaseSpecifier);
+
                 this.specifier = new EntitlementSpecifier() {
                     @Override
                     public PlanPhaseSpecifier getPlanPhaseSpecifier() {
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
index b17197c..48f0cf3 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResource.java
@@ -28,7 +28,6 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.TimeoutException;
 
-import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -52,7 +51,6 @@ import org.killbill.billing.account.api.AccountApiException;
 import org.killbill.billing.account.api.AccountUserApi;
 import org.killbill.billing.catalog.api.BillingActionPolicy;
 import org.killbill.billing.catalog.api.CatalogApiException;
-import org.killbill.billing.catalog.api.Currency;
 import org.killbill.billing.catalog.api.PhaseType;
 import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
 import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
@@ -81,7 +79,6 @@ import org.killbill.billing.jaxrs.json.BlockingStateJson;
 import org.killbill.billing.jaxrs.json.BulkSubscriptionsBundleJson;
 import org.killbill.billing.jaxrs.json.BundleJson;
 import org.killbill.billing.jaxrs.json.CustomFieldJson;
-import org.killbill.billing.jaxrs.json.PhasePriceJson;
 import org.killbill.billing.jaxrs.json.SubscriptionJson;
 import org.killbill.billing.jaxrs.json.TagJson;
 import org.killbill.billing.jaxrs.util.Context;
@@ -116,6 +113,9 @@ import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+import static org.killbill.billing.jaxrs.resources.SubscriptionResourceHelpers.buildBaseEntitlementWithAddOnsSpecifier;
+import static org.killbill.billing.jaxrs.resources.SubscriptionResourceHelpers.buildEntitlementSpecifier;
+import static org.killbill.billing.jaxrs.resources.SubscriptionResourceHelpers.buildPlanPhasePriceOverrides;
 
 @Path(JaxrsResource.SUBSCRIPTIONS_PATH)
 @Api(value = JaxrsResource.SUBSCRIPTIONS_PATH, description = "Operations on subscriptions", tags = "Subscription")
@@ -353,85 +353,6 @@ public class SubscriptionResource extends JaxRsResourceBase {
         return callCompletionCreation.withSynchronization(callback, timeoutSec, callCompletion, callContext);
     }
 
-    private void buildEntitlementSpecifier(final SubscriptionJson subscriptionJson,
-                                           final Currency currency,
-                                           final Collection<EntitlementSpecifier> entitlementSpecifierList) {
-        if (subscriptionJson.getPlanName() == null &&
-            (subscriptionJson.getProductName() == null ||
-             subscriptionJson.getProductCategory() == null ||
-             subscriptionJson.getBillingPeriod() == null ||
-             subscriptionJson.getPriceList() == null)) {
-            return;
-        }
-
-        final PlanPhaseSpecifier planPhaseSpecifier = subscriptionJson.getPlanName() != null ?
-                                                      new PlanPhaseSpecifier(subscriptionJson.getPlanName(), null) :
-                                                      new PlanPhaseSpecifier(subscriptionJson.getProductName(),
-                                                                             subscriptionJson.getBillingPeriod(),
-                                                                             subscriptionJson.getPriceList(),
-                                                                             subscriptionJson.getPhaseType());
-        final List<PlanPhasePriceOverride> overrides = PhasePriceJson.toPlanPhasePriceOverrides(subscriptionJson.getPriceOverrides(),
-                                                                                                planPhaseSpecifier,
-                                                                                                currency);
-
-        final EntitlementSpecifier specifier = new EntitlementSpecifier() {
-            @Override
-            public PlanPhaseSpecifier getPlanPhaseSpecifier() {
-                return planPhaseSpecifier;
-            }
-
-            @Override
-            public Integer getBillCycleDay() {
-                return null;
-            }
-
-            @Override
-            public List<PlanPhasePriceOverride> getOverrides() {
-                return overrides;
-            }
-        };
-        entitlementSpecifierList.add(specifier);
-    }
-
-    private BaseEntitlementWithAddOnsSpecifier buildBaseEntitlementWithAddOnsSpecifier(final Iterable<EntitlementSpecifier> entitlementSpecifierList,
-                                                                                       final LocalDate resolvedEntitlementDate,
-                                                                                       final LocalDate resolvedBillingDate,
-                                                                                       @Nullable final UUID bundleId,
-                                                                                       @Nullable final String bundleExternalKey,
-                                                                                       final Boolean isMigrated) {
-        return new BaseEntitlementWithAddOnsSpecifier() {
-            @Override
-            public UUID getBundleId() {
-                return bundleId;
-            }
-
-            @Override
-            public String getExternalKey() {
-                return bundleExternalKey;
-            }
-
-            @Override
-            public Iterable<EntitlementSpecifier> getEntitlementSpecifier() {
-                return entitlementSpecifierList;
-            }
-
-            @Override
-            public LocalDate getEntitlementEffectiveDate() {
-                return resolvedEntitlementDate;
-            }
-
-            @Override
-            public LocalDate getBillingEffectiveDate() {
-                return resolvedBillingDate;
-            }
-
-            @Override
-            public boolean isMigrated() {
-                return isMigrated;
-            }
-        };
-    }
-
     private Map<String, String> buildQueryParams(final Iterable<String> bundleIdList) {
         Map<String, String> queryParams = new HashMap<String, String>();
         String value = "";
@@ -534,7 +455,7 @@ public class SubscriptionResource extends JaxRsResourceBase {
                                                     new PlanPhaseSpecifier(entitlement.getPlanName(), phaseType) :
                                                     new PlanPhaseSpecifier(entitlement.getProductName(),
                                                                            entitlement.getBillingPeriod(), entitlement.getPriceList(), phaseType);
-                final List<PlanPhasePriceOverride> overrides = PhasePriceJson.toPlanPhasePriceOverrides(entitlement.getPriceOverrides(), planSpec, account.getCurrency());
+                final List<PlanPhasePriceOverride> overrides = buildPlanPhasePriceOverrides(entitlement.getPriceOverrides(), account.getCurrency(), planSpec);
 
                 if (requestedDate == null && billingPolicy == null) {
                     newEntitlement = current.changePlan(new DefaultEntitlementSpecifier(planSpec, null, overrides), pluginProperties, ctx);
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResourceHelpers.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResourceHelpers.java
new file mode 100644
index 0000000..c958959
--- /dev/null
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/SubscriptionResourceHelpers.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
+ *
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at:
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.killbill.billing.jaxrs.resources;
+
+import java.math.BigDecimal;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.UUID;
+
+import javax.annotation.Nullable;
+
+import org.joda.time.LocalDate;
+import org.killbill.billing.catalog.api.Currency;
+import org.killbill.billing.catalog.api.PhaseType;
+import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
+import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
+import org.killbill.billing.catalog.api.PlanSpecifier;
+import org.killbill.billing.catalog.api.TierPriceOverride;
+import org.killbill.billing.catalog.api.TieredBlockPriceOverride;
+import org.killbill.billing.catalog.api.UsagePriceOverride;
+import org.killbill.billing.catalog.api.UsageType;
+import org.killbill.billing.entitlement.api.BaseEntitlementWithAddOnsSpecifier;
+import org.killbill.billing.entitlement.api.EntitlementSpecifier;
+import org.killbill.billing.jaxrs.json.BlockPriceJson;
+import org.killbill.billing.jaxrs.json.PhasePriceJson;
+import org.killbill.billing.jaxrs.json.SubscriptionJson;
+import org.killbill.billing.jaxrs.json.TierPriceJson;
+import org.killbill.billing.jaxrs.json.UsagePriceJson;
+
+import com.google.common.base.Preconditions;
+
+public class SubscriptionResourceHelpers {
+
+    public static void buildEntitlementSpecifier(final SubscriptionJson subscriptionJson,
+                                                 final Currency currency,
+                                                 final Collection<EntitlementSpecifier> entitlementSpecifierList) {
+        if (subscriptionJson.getPlanName() == null &&
+            (subscriptionJson.getProductName() == null ||
+             subscriptionJson.getProductCategory() == null ||
+             subscriptionJson.getBillingPeriod() == null ||
+             subscriptionJson.getPriceList() == null)) {
+            return;
+        }
+
+        final PlanPhaseSpecifier planPhaseSpecifier = subscriptionJson.getPlanName() != null ?
+                                                      new PlanPhaseSpecifier(subscriptionJson.getPlanName(), null) :
+                                                      new PlanPhaseSpecifier(subscriptionJson.getProductName(),
+                                                                             subscriptionJson.getBillingPeriod(),
+                                                                             subscriptionJson.getPriceList(),
+                                                                             subscriptionJson.getPhaseType());
+
+        final List<PlanPhasePriceOverride> overrides = buildPlanPhasePriceOverrides(subscriptionJson.getPriceOverrides(), currency, planPhaseSpecifier);
+
+        final EntitlementSpecifier specifier = new EntitlementSpecifier() {
+            @Override
+            public PlanPhaseSpecifier getPlanPhaseSpecifier() {
+                return planPhaseSpecifier;
+            }
+
+            @Override
+            public Integer getBillCycleDay() {
+                return null;
+            }
+
+            @Override
+            public List<PlanPhasePriceOverride> getOverrides() {
+                return overrides;
+            }
+        };
+        entitlementSpecifierList.add(specifier);
+    }
+
+    public static List<PlanPhasePriceOverride> buildPlanPhasePriceOverrides(final Iterable<PhasePriceJson> priceOverrides,
+                                                                            final Currency currency,
+                                                                            final PlanPhaseSpecifier planPhaseSpecifier) {
+        final List<PlanPhasePriceOverride> overrides = new LinkedList<PlanPhasePriceOverride>();
+        if (priceOverrides != null) {
+            for (final PhasePriceJson input : priceOverrides) {
+                Preconditions.checkNotNull(input);
+
+                final List<UsagePriceOverride> usagePrices = new LinkedList<UsagePriceOverride>();
+                if (input.getUsagePrices() != null) {
+                    buildUsagePrices(currency, input, usagePrices);
+                }
+
+                overrides.add(buildPlanPhasePriceOverride(planPhaseSpecifier, currency, input, usagePrices));
+            }
+        }
+        return overrides;
+    }
+
+    private static void buildUsagePrices(final Currency currency,
+                                         final PhasePriceJson input,
+                                         final Collection<UsagePriceOverride> usagePrices) {
+        for (final UsagePriceJson usageOverrideJson : input.getUsagePrices()) {
+            final List<TierPriceOverride> tierPriceOverrides = new LinkedList<TierPriceOverride>();
+            for (final TierPriceJson tierPriceJson : usageOverrideJson.getTierPrices()) {
+                final List<TieredBlockPriceOverride> blockPriceOverrides = new LinkedList<TieredBlockPriceOverride>();
+                for (final BlockPriceJson block : tierPriceJson.getBlockPrices()) {
+                    blockPriceOverrides.add(new TieredBlockPriceOverride() {
+
+                        @Override
+                        public String getUnitName() {
+                            return block.getUnitName();
+                        }
+
+                        @Override
+                        public Double getSize() {
+                            return block.getSize();
+                        }
+
+                        @Override
+                        public BigDecimal getPrice() {
+                            return block.getPrice();
+                        }
+
+                        @Override
+                        public Currency getCurrency() {
+                            return currency;
+                        }
+
+                        @Override
+                        public Double getMax() {
+                            return block.getMax();
+                        }
+                    });
+                }
+
+                tierPriceOverrides.add(new TierPriceOverride() {
+
+                    @Override
+                    public List<TieredBlockPriceOverride> getTieredBlockPriceOverrides() {
+                        return blockPriceOverrides;
+                    }
+                });
+            }
+            usagePrices.add(new UsagePriceOverride() {
+                @Override
+                public String getName() {
+                    return usageOverrideJson.getUsageName();
+                }
+
+                @Override
+                public UsageType getUsageType() {
+                    return usageOverrideJson.getUsageType();
+                }
+
+                @Override
+                public List<TierPriceOverride> getTierPriceOverrides() {
+                    return tierPriceOverrides;
+                }
+            });
+        }
+    }
+
+    private static PlanPhasePriceOverride buildPlanPhasePriceOverride(final PlanSpecifier spec,
+                                                                      final Currency currency,
+                                                                      final PhasePriceJson input,
+                                                                      final List<UsagePriceOverride> usagePrices) {
+        if (input.getPhaseName() != null) {
+            return new PlanPhasePriceOverride() {
+                @Override
+                public String getPhaseName() {
+                    return input.getPhaseName();
+                }
+
+                @Override
+                public PlanPhaseSpecifier getPlanPhaseSpecifier() {
+                    return null;
+                }
+
+                @Override
+                public Currency getCurrency() {
+                    return currency;
+                }
+
+                @Override
+                public BigDecimal getFixedPrice() {
+                    return input.getFixedPrice();
+                }
+
+                @Override
+                public BigDecimal getRecurringPrice() {
+                    return input.getRecurringPrice();
+                }
+
+                @Override
+                public List<UsagePriceOverride> getUsagePriceOverrides() {
+                    return usagePrices;
+                }
+            };
+        }
+
+        final PhaseType phaseType = input.getPhaseType() != null ? PhaseType.valueOf(input.getPhaseType()) : null;
+
+        final PlanPhaseSpecifier planPhaseSpecifier = spec.getPlanName() != null ?
+                                                      new PlanPhaseSpecifier(spec.getPlanName(), phaseType) :
+                                                      new PlanPhaseSpecifier(spec.getProductName(), spec.getBillingPeriod(), spec.getPriceListName(), phaseType);
+        final Currency resolvedCurrency = input.getFixedPrice() != null || input.getRecurringPrice() != null ? currency : null;
+
+        return new PlanPhasePriceOverride() {
+
+            @Override
+            public String getPhaseName() {
+                return null;
+            }
+
+            @Override
+            public PlanPhaseSpecifier getPlanPhaseSpecifier() {
+                return planPhaseSpecifier;
+            }
+
+            @Override
+            public Currency getCurrency() {
+                return resolvedCurrency;
+            }
+
+            @Override
+            public BigDecimal getFixedPrice() {
+                return input.getFixedPrice();
+            }
+
+            @Override
+            public BigDecimal getRecurringPrice() {
+                return input.getRecurringPrice();
+            }
+
+            @Override
+            public List<UsagePriceOverride> getUsagePriceOverrides() {
+                return usagePrices;
+            }
+        };
+    }
+
+    public static BaseEntitlementWithAddOnsSpecifier buildBaseEntitlementWithAddOnsSpecifier(final Iterable<EntitlementSpecifier> entitlementSpecifierList,
+                                                                                             final LocalDate resolvedEntitlementDate,
+                                                                                             final LocalDate resolvedBillingDate,
+                                                                                             @Nullable final UUID bundleId,
+                                                                                             @Nullable final String bundleExternalKey,
+                                                                                             final Boolean isMigrated) {
+        return new BaseEntitlementWithAddOnsSpecifier() {
+            @Override
+            public UUID getBundleId() {
+                return bundleId;
+            }
+
+            @Override
+            public String getExternalKey() {
+                return bundleExternalKey;
+            }
+
+            @Override
+            public Iterable<EntitlementSpecifier> getEntitlementSpecifier() {
+                return entitlementSpecifierList;
+            }
+
+            @Override
+            public LocalDate getEntitlementEffectiveDate() {
+                return resolvedEntitlementDate;
+            }
+
+            @Override
+            public LocalDate getBillingEffectiveDate() {
+                return resolvedBillingDate;
+            }
+
+            @Override
+            public boolean isMigrated() {
+                return isMigrated;
+            }
+        };
+    }
+}
diff --git a/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestPlanDetailJson.java b/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestPlanDetailJson.java
index 243d97f..7c34cc0 100644
--- a/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestPlanDetailJson.java
+++ b/jaxrs/src/test/java/org/killbill/billing/jaxrs/json/TestPlanDetailJson.java
@@ -18,17 +18,16 @@ package org.killbill.billing.jaxrs.json;
 
 import java.util.UUID;
 
-import org.killbill.billing.catalog.DefaultPrice;
 import org.killbill.billing.catalog.api.BillingPeriod;
 import org.killbill.billing.catalog.api.InternationalPrice;
 import org.killbill.billing.catalog.api.Listing;
 import org.killbill.billing.catalog.api.Plan;
 import org.killbill.billing.catalog.api.PlanPhase;
+import org.killbill.billing.catalog.api.Price;
 import org.killbill.billing.catalog.api.PriceList;
 import org.killbill.billing.catalog.api.Product;
 import org.killbill.billing.catalog.api.Recurring;
 import org.killbill.billing.jaxrs.JaxrsTestSuiteNoDB;
-import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -65,7 +64,8 @@ public class TestPlanDetailJson extends JaxrsTestSuiteNoDB {
         Mockito.when(product.getName()).thenReturn(UUID.randomUUID().toString());
 
         final InternationalPrice price = Mockito.mock(InternationalPrice.class);
-        Mockito.when(price.getPrices()).thenReturn(new DefaultPrice[0]);
+        final Price[] mock = {};
+        Mockito.when(price.getPrices()).thenReturn(mock);
         final PlanPhase planPhase = Mockito.mock(PlanPhase.class);
         final Recurring recurring = Mockito.mock(Recurring.class);
         Mockito.when(recurring.getRecurringPrice()).thenReturn(price);
diff --git a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBillingApi.java b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBillingApi.java
index 58734ed..481343e 100644
--- a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBillingApi.java
+++ b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBillingApi.java
@@ -111,12 +111,11 @@ public class TestBillingApi extends JunctionTestSuiteNoDB {
         Mockito.when(subscriptionInternalApi.getBillingTransitions(Mockito.<SubscriptionBase>any(),  Mockito.<InternalTenantContext>any())).thenReturn(effectiveSubscriptionTransitions);
         Mockito.when(subscriptionInternalApi.getAllTransitions(Mockito.<SubscriptionBase>any(), Mockito.<InternalTenantContext>any())).thenReturn(effectiveSubscriptionTransitions);
 
-        final DefaultVersionedCatalog versionedCatalog = catalogService.getCurrentCatalog(true, true, internalCallContext);
+        final DefaultVersionedCatalog versionedCatalog = catalogService.getFullCatalog(true, true, internalCallContext);
         catalog = (MockCatalog) Iterables.getLast(versionedCatalog.getVersions());
         Mockito.when(catalogService.getFullCatalog(true, true, internalCallContext)).thenReturn(versionedCatalog);
 
         Mockito.when(catalogInternalApi.getFullCatalog(true, true, internalCallContext)).thenReturn(catalog);
-        Mockito.when(catalogInternalApi.getCurrentCatalog(true, true, internalCallContext)).thenReturn(catalog);
         // Set a default alignment
         catalog.setBillingAlignment(BillingAlignment.ACCOUNT);
 
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java b/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
index 289d27f..f874505 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
@@ -45,7 +45,6 @@ import org.killbill.billing.subscription.events.SubscriptionBaseEvent;
 import org.killbill.billing.subscription.events.SubscriptionBaseEvent.EventType;
 import org.killbill.billing.subscription.events.user.ApiEventTransfer;
 import org.killbill.billing.subscription.events.user.ApiEventType;
-import org.killbill.billing.util.dao.NonEntityDao;
 import org.mockito.Mockito;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
@@ -67,7 +66,7 @@ public class TestDefaultSubscriptionTransferApi extends SubscriptionTestSuiteNoD
         final MockCatalog mockCatalog = new MockCatalog();
         versionedCatalog.add(mockCatalog);
         final CatalogService catalogService = new MockCatalogService(versionedCatalog, cacheControllerDispatcher);
-        final CatalogInternalApi catalogInternalApiWithMockCatalogService = new DefaultCatalogInternalApi(catalogService, internalCallContextFactory);
+        final CatalogInternalApi catalogInternalApiWithMockCatalogService = new DefaultCatalogInternalApi(catalogService);
         final SubscriptionBaseApiService apiService = Mockito.mock(SubscriptionBaseApiService.class);
         final SubscriptionBaseTimelineApi timelineApi = Mockito.mock(SubscriptionBaseTimelineApi.class);
         transferApi = new DefaultSubscriptionBaseTransferApi(clock, dao, timelineApi, catalogInternalApiWithMockCatalogService, subscriptionInternalApi, apiService, internalCallContextFactory);