killbill-uncached

Add special internal alignStartDate to subscription in addition

7/29/2012 2:30:30 AM

Details

diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
index 3529300..534160a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/alignment/PlanAligner.java
@@ -79,7 +79,7 @@ public class PlanAligner {
                                                             final String priceList,
                                                             final DateTime requestedDate,
                                                             final DateTime effectiveDate) throws CatalogApiException, EntitlementUserApiException {
-        final List<TimedPhase> timedPhases = getTimedPhaseOnCreate(subscription.getStartDate(),
+        final List<TimedPhase> timedPhases = getTimedPhaseOnCreate(subscription.getAlignStartDate(),
                                                                    subscription.getBundleStartDate(),
                                                                    plan,
                                                                    initialPhase,
@@ -155,7 +155,7 @@ public class PlanAligner {
                 case CREATE:
                 case RE_CREATE:
                 case TRANSFER:
-                    final List<TimedPhase> timedPhases = getTimedPhaseOnCreate(subscription.getStartDate(),
+                    final List<TimedPhase> timedPhases = getTimedPhaseOnCreate(subscription.getAlignStartDate(),
                                                                                subscription.getBundleStartDate(),
                                                                                lastPlanTransition.getNextPlan(),
                                                                                lastPlanTransition.getNextPhase().getPhaseType(),
@@ -164,7 +164,7 @@ public class PlanAligner {
                     return getTimedPhase(timedPhases, effectiveDate, WhichPhase.NEXT);
                 // If we went through Plan changes, borrow the logic for changePlan alignment
                 case CHANGE:
-                    return getTimedPhaseOnChange(subscription.getStartDate(),
+                    return getTimedPhaseOnChange(subscription.getAlignStartDate(),
                                                  subscription.getBundleStartDate(),
                                                  lastPlanTransition.getPreviousPhase(),
                                                  lastPlanTransition.getPreviousPlan(),
@@ -219,7 +219,7 @@ public class PlanAligner {
                                              final DateTime requestedDate,
                                              final DateTime effectiveDate,
                                              final WhichPhase which) throws CatalogApiException, EntitlementUserApiException {
-        return getTimedPhaseOnChange(subscription.getStartDate(),
+        return getTimedPhaseOnChange(subscription.getAlignStartDate(),
                                      subscription.getBundleStartDate(),
                                      subscription.getCurrentPhase(),
                                      subscription.getCurrentPlan(),
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java
index fa79bda..21f7e7a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/migration/DefaultEntitlementMigrationApi.java
@@ -140,7 +140,7 @@ public class DefaultEntitlementMigrationApi implements EntitlementMigrationApi {
                                                                                      .setBundleId(bundleId)
                                                                                      .setCategory(productCategory)
                                                                                      .setBundleStartDate(migrationStartDate)
-                                                                                     .setStartDate(migrationStartDate),
+                                                                                     .setAlignStartDate(migrationStartDate),
                                                                              emptyEvents);
         return new SubscriptionMigrationData(subscriptionData, toEvents(subscriptionData, now, ctd, events, context));
     }
@@ -156,7 +156,7 @@ public class DefaultEntitlementMigrationApi implements EntitlementMigrationApi {
                                                                                      .setBundleId(bundleId)
                                                                                      .setCategory(productCategory)
                                                                                      .setBundleStartDate(bundleStartDate)
-                                                                                     .setStartDate(migrationStartDate),
+                                                                                     .setAlignStartDate(migrationStartDate),
                                                                              emptyEvents);
         return new SubscriptionMigrationData(subscriptionData, toEvents(subscriptionData, now, ctd, events, context));
     }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
index 5c25bef..5e8cb20 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/timeline/DefaultEntitlementTimelineApi.java
@@ -176,7 +176,7 @@ public class DefaultEntitlementTimelineApi implements EntitlementTimelineApi {
                     inRepair.add(curOutputRepair);
                     if (curOutputRepair.getCategory() == ProductCategory.ADD_ON) {
                         // Check if ADD_ON RE_CREATE is before BP start
-                        if (isPlanRecreate && subscriptions.get(0).getStartDate().isAfter(curRepair.getNewEvents().get(0).getRequestedDate())) {
+                        if (isPlanRecreate && (subscriptions.get(0)).getStartDate().isAfter(curRepair.getNewEvents().get(0).getRequestedDate())) {
                             throw new EntitlementRepairException(ErrorCode.ENT_REPAIR_AO_CREATE_BEFORE_BP_START, cur.getId(), cur.getBundleId());
                         }
                         addOnSubscriptionInRepair.add(curOutputRepair);
@@ -202,7 +202,7 @@ public class DefaultEntitlementTimelineApi implements EntitlementTimelineApi {
             case ADD_ON_REPAIR:
                 // We need to set the baseSubscription as it is useful to calculate addon validity
                 final SubscriptionDataRepair baseSubscription = (SubscriptionDataRepair) subscriptions.get(0);
-                baseSubscriptionRepair = createSubscriptionDataRepair(baseSubscription, baseSubscription.getBundleStartDate(), baseSubscription.getStartDate(), baseSubscription.getEvents());
+                baseSubscriptionRepair = createSubscriptionDataRepair(baseSubscription, baseSubscription.getBundleStartDate(), baseSubscription.getAlignStartDate(), baseSubscription.getEvents());
                 break;
             case STANDALONE_REPAIR:
             default:
@@ -440,7 +440,7 @@ public class DefaultEntitlementTimelineApi implements EntitlementTimelineApi {
             builder.setBundleStartDate(newBundleStartDate);
         }
         if (newSubscriptionStartDate != null) {
-            builder.setStartDate(newSubscriptionStartDate);
+            builder.setAlignStartDate(newSubscriptionStartDate);
         }
         if (initialEvents.size() > 0) {
             for (final EntitlementEvent cur : initialEvents) {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/transfer/DefaultEntitlementTransferApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/transfer/DefaultEntitlementTransferApi.java
index 099fdf8..6e3a0a9 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/transfer/DefaultEntitlementTransferApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/transfer/DefaultEntitlementTransferApi.java
@@ -104,7 +104,7 @@ public class DefaultEntitlementTransferApi implements EntitlementTransferApi {
         */
 
         final PlanPhaseSpecifier spec = existingEvent.getPlanPhaseSpecifier();
-        final PlanPhase currentPhase = catalog.findPhase(existingEvent.getPlanPhaseName(), effectiveDate, subscription.getStartDate());
+        final PlanPhase currentPhase = catalog.findPhase(existingEvent.getPlanPhaseName(), effectiveDate, subscription.getAlignStartDate());
 
 
         final ApiEventBuilder apiBuilder = new ApiEventBuilder()
@@ -252,7 +252,7 @@ public class DefaultEntitlementTransferApi implements EntitlementTransferApi {
                 }
 
                 // We Align with the original subscription
-                final DateTime subscriptionStartDate = oldSubscription.getStartDate();
+                final DateTime subscriptionAlignStartDate = oldSubscription.getAlignStartDate();
                 if (bundleStartdate == null) {
                     bundleStartdate = oldSubscription.getStartDate();
                 }
@@ -263,7 +263,7 @@ public class DefaultEntitlementTransferApi implements EntitlementTransferApi {
                 .setBundleId(subscriptionBundleData.getId())
                 .setCategory(productCategory)
                 .setBundleStartDate(transferDate)
-                .setStartDate(subscriptionStartDate),
+                .setAlignStartDate(subscriptionAlignStartDate),
                 ImmutableList.<EntitlementEvent>of());
 
                 final List<EntitlementEvent> events = toEvents(existingEvents, subscriptionData, transferDate, context);
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 e8ea3f7..11f6bef 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
@@ -196,7 +196,7 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
                                                  .setBundleId(bundleId)
                                                  .setCategory(plan.getProduct().getCategory())
                                                  .setBundleStartDate(bundleStartDate)
-                                                 .setStartDate(effectiveDate),
+                                                 .setAlignStartDate(effectiveDate),
                                          plan, spec.getPhaseType(), realPriceList, requestedDate, effectiveDate, now, context);
         } catch (CatalogApiException e) {
             throw new EntitlementUserApiException(e);
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionFactory.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionFactory.java
index 8bd7471..1e1ebeb 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionFactory.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultSubscriptionFactory.java
@@ -43,6 +43,7 @@ public class DefaultSubscriptionFactory implements SubscriptionFactory {
         this.catalogService = catalogService;
     }
 
+    @Override
     public SubscriptionData createSubscription(final SubscriptionBuilder builder, final List<EntitlementEvent> events) {
         final SubscriptionData subscription = new SubscriptionData(builder, apiService, clock);
         if (events.size() > 0) {
@@ -54,7 +55,7 @@ public class DefaultSubscriptionFactory implements SubscriptionFactory {
     public static class SubscriptionBuilder {
         private UUID id;
         private UUID bundleId;
-        private DateTime startDate;
+        private DateTime alignStartDate;
         private DateTime bundleStartDate;
         private Long activeVersion;
         private ProductCategory category;
@@ -68,7 +69,7 @@ public class DefaultSubscriptionFactory implements SubscriptionFactory {
         public SubscriptionBuilder(final SubscriptionData original) {
             this.id = original.getId();
             this.bundleId = original.getBundleId();
-            this.startDate = original.getStartDate();
+            this.alignStartDate = original.getAlignStartDate();
             this.bundleStartDate = original.getBundleStartDate();
             this.category = original.getCategory();
             this.activeVersion = original.getActiveVersion();
@@ -86,8 +87,8 @@ public class DefaultSubscriptionFactory implements SubscriptionFactory {
             return this;
         }
 
-        public SubscriptionBuilder setStartDate(final DateTime startDate) {
-            this.startDate = startDate;
+        public SubscriptionBuilder setAlignStartDate(final DateTime alignStartDate) {
+            this.alignStartDate = alignStartDate;
             return this;
         }
 
@@ -124,8 +125,8 @@ public class DefaultSubscriptionFactory implements SubscriptionFactory {
             return bundleId;
         }
 
-        public DateTime getStartDate() {
-            return startDate;
+        public DateTime getAlignStartDate() {
+            return alignStartDate;
         }
 
         public DateTime getBundleStartDate() {
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
index 7c10fba..fe7d666 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/SubscriptionData.java
@@ -63,7 +63,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
     // Final subscription fields
     //
     private final UUID bundleId;
-    private final DateTime startDate;
+    private final DateTime alignStartDate;
     private final DateTime bundleStartDate;
     private final ProductCategory category;
 
@@ -93,7 +93,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
         this.apiService = apiService;
         this.clock = clock;
         this.bundleId = builder.getBundleId();
-        this.startDate = builder.getStartDate();
+        this.alignStartDate = builder.getAlignStartDate();
         this.bundleStartDate = builder.getBundleStartDate();
         this.category = builder.getCategory();
         this.activeVersion = builder.getActiveVersion();
@@ -108,7 +108,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
 
     @Override
     public DateTime getStartDate() {
-        return startDate;
+        return transitions.get(0).getEffectiveTransitionTime();
     }
 
     @Override
@@ -216,7 +216,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
         if (data == null) {
             return null;
         }
-        return new DefaultEffectiveSubscriptionEvent(data, startDate);
+        return new DefaultEffectiveSubscriptionEvent(data, alignStartDate);
     }
 
     @Override
@@ -240,7 +240,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
         if (data == null) {
             return null;
         }
-        return new DefaultEffectiveSubscriptionEvent(data, startDate);
+        return new DefaultEffectiveSubscriptionEvent(data, alignStartDate);
     }
 
     protected SubscriptionTransitionData getPreviousTransitionData() {
@@ -314,7 +314,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
                 clock, transitions, Order.ASC_FROM_PAST, Kind.BILLING,
                 Visibility.ALL, TimeLimit.ALL);
         while (it.hasNext()) {
-            result.add(new DefaultEffectiveSubscriptionEvent(it.next(), startDate));
+            result.add(new DefaultEffectiveSubscriptionEvent(it.next(), alignStartDate));
         }
         return result;
     }
@@ -326,12 +326,17 @@ public class SubscriptionData extends EntityBase implements Subscription {
         for (final SubscriptionTransitionData cur : transitions) {
             if (cur.getId().equals(event.getId())) {
                 final SubscriptionTransitionData withSeq = new SubscriptionTransitionData(cur, seqId);
-                return new DefaultEffectiveSubscriptionEvent(withSeq, startDate);
+                return new DefaultEffectiveSubscriptionEvent(withSeq, alignStartDate);
             }
         }
         return null;
     }
 
+    public DateTime getAlignStartDate() {
+        return alignStartDate;
+    }
+
+
     public long getLastEventOrderedId() {
         final SubscriptionTransitionDataIterator it = new SubscriptionTransitionDataIterator(
                 clock, transitions, Order.DESC_FROM_FUTURE, Kind.ENTITLEMENT,
@@ -352,7 +357,7 @@ public class SubscriptionData extends EntityBase implements Subscription {
         final List<EffectiveSubscriptionEvent> result = new ArrayList<EffectiveSubscriptionEvent>();
         final SubscriptionTransitionDataIterator it = new SubscriptionTransitionDataIterator(clock, transitions, Order.ASC_FROM_PAST, Kind.ALL, Visibility.ALL, TimeLimit.ALL);
         while (it.hasNext()) {
-            result.add(new DefaultEffectiveSubscriptionEvent(it.next(), startDate));
+            result.add(new DefaultEffectiveSubscriptionEvent(it.next(), alignStartDate));
         }
 
         return result;
@@ -519,8 +524,8 @@ public class SubscriptionData extends EntityBase implements Subscription {
             PriceList nextPriceList = null;
 
             try {
-                nextPlan = (nextPlanName != null) ? catalog.findPlan(nextPlanName, cur.getRequestedDate(), getStartDate()) : null;
-                nextPhase = (nextPhaseName != null) ? catalog.findPhase(nextPhaseName, cur.getRequestedDate(), getStartDate()) : null;
+                nextPlan = (nextPlanName != null) ? catalog.findPlan(nextPlanName, cur.getRequestedDate(), getAlignStartDate()) : null;
+                nextPhase = (nextPhaseName != null) ? catalog.findPhase(nextPhaseName, cur.getRequestedDate(), getAlignStartDate()) : null;
                 nextPriceList = (nextPriceListName != null) ? catalog.findPriceList(nextPriceListName, cur.getRequestedDate()) : null;
             } catch (CatalogApiException e) {
                 log.error(String.format("Failed to build transition for subscription %s", id), e);
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
index 03ebd04..b2816ce 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/AuditedEntitlementDao.java
@@ -539,7 +539,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
                 } else if (o2.getCategory() == ProductCategory.BASE) {
                     return 1;
                 } else {
-                    return o1.getStartDate().compareTo(o2.getStartDate());
+                    return ((SubscriptionData) o1).getAlignStartDate().compareTo(((SubscriptionData) o2).getAlignStartDate());
                 }
             }
         });
@@ -619,7 +619,7 @@ public class AuditedEntitlementDao implements EntitlementDao {
             public Void inTransaction(final SubscriptionSqlDao transactional, final TransactionStatus status) throws Exception {
                 final EntitlementEventSqlDao transEventDao = transactional.become(EntitlementEventSqlDao.class);
                 for (final SubscriptionDataRepair cur : inRepair) {
-                    transactional.updateForRepair(cur.getId().toString(), cur.getActiveVersion(), cur.getStartDate().toDate(), cur.getBundleStartDate().toDate(), context);
+                    transactional.updateForRepair(cur.getId().toString(), cur.getActiveVersion(), cur.getAlignStartDate().toDate(), cur.getBundleStartDate().toDate(), context);
                     for (final EntitlementEvent event : cur.getInitialEvents()) {
                         transEventDao.updateVersion(event.getId().toString(), event.getActiveVersion(), context);
                     }
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
index 861973c..5debc59 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.java
@@ -80,7 +80,7 @@ public interface SubscriptionSqlDao extends Transactional<SubscriptionSqlDao>, A
             stmt.bind("id", sub.getId().toString());
             stmt.bind("bundleId", sub.getBundleId().toString());
             stmt.bind("category", sub.getCategory().toString());
-            stmt.bind("startDate", getDate(sub.getStartDate()));
+            stmt.bind("startDate", getDate(sub.getAlignStartDate()));
             stmt.bind("bundleStartDate", getDate(sub.getBundleStartDate()));
             stmt.bind("activeVersion", sub.getActiveVersion());
             stmt.bind("chargedThroughDate", getDate(sub.getChargedThroughDate()));
@@ -107,7 +107,7 @@ public interface SubscriptionSqlDao extends Transactional<SubscriptionSqlDao>, A
                                                 .setBundleId(bundleId)
                                                 .setCategory(category)
                                                 .setBundleStartDate(bundleStartDate)
-                                                .setStartDate(startDate)
+                                                .setAlignStartDate(startDate)
                                                 .setActiveVersion(activeVersion)
                                                 .setChargedThroughDate(ctd)
                                                 .setPaidThroughDate(ptd));
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java b/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
index 65df594..aafeb08 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/alignment/TestPlanAligner.java
@@ -166,11 +166,11 @@ public class TestPlanAligner extends KillbillTestSuite {
         final DefaultSubscriptionFactory.SubscriptionBuilder builder = new DefaultSubscriptionFactory.SubscriptionBuilder();
         builder.setBundleStartDate(clock.getUTCNow().minusHours(10));
         // Make sure to set the dates apart
-        builder.setStartDate(new DateTime(builder.getBundleStartDate().plusHours(5)));
+        builder.setAlignStartDate(new DateTime(builder.getBundleStartDate().plusHours(5)));
 
         // Create the transitions
         final SubscriptionData subscriptionData = new SubscriptionData(builder, null, clock);
-        final EntitlementEvent event = createEntitlementEvent(builder.getStartDate(),
+        final EntitlementEvent event = createEntitlementEvent(builder.getAlignStartDate(),
                                                               productName,
                                                               phaseType,
                                                               ApiEventType.CREATE,
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
index c4e7177..be36ccb 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/transfer/TestTransfer.java
@@ -94,7 +94,7 @@ public class TestTransfer extends TestApiBase {
         assertEquals(subscriptions.size(), 1);
 
         final Subscription newBaseSubscription = subscriptions.get(0);
-        assertTrue(newBaseSubscription.getStartDate().compareTo(oldBaseSubscription.getStartDate()) == 0);
+        assertTrue(((SubscriptionData) newBaseSubscription).getAlignStartDate().compareTo(((SubscriptionData) oldBaseSubscription).getAlignStartDate()) == 0);
 
         // CHECK NEXT PENDING PHASE IS ALIGNED WITH OLD SUBSCRIPTION START DATE
         assertEquals(newBaseSubscription.getAllTransitions().size(), 2);
@@ -143,7 +143,7 @@ public class TestTransfer extends TestApiBase {
         assertEquals(subscriptions.size(), 1);
 
         final Subscription newBaseSubscription = subscriptions.get(0);
-        assertTrue(newBaseSubscription.getStartDate().compareTo(oldBaseSubscription.getStartDate()) == 0);
+        assertTrue(((SubscriptionData) newBaseSubscription).getAlignStartDate().compareTo(((SubscriptionData) oldBaseSubscription).getAlignStartDate()) == 0);
 
         // CHECK NEXT PENDING PHASE IS ALIGNED WITH OLD SUBSCRIPTION START DATE
         assertEquals(newBaseSubscription.getAllTransitions().size(), 2);
@@ -193,7 +193,7 @@ public class TestTransfer extends TestApiBase {
         assertEquals(subscriptions.size(), 1);
 
         final Subscription newBaseSubscription = subscriptions.get(0);
-        assertTrue(newBaseSubscription.getStartDate().compareTo(baseSubscription.getStartDate()) == 0);
+        assertTrue(((SubscriptionData) newBaseSubscription).getAlignStartDate().compareTo(((SubscriptionData) baseSubscription).getAlignStartDate()) == 0);
 
         // CHECK ONLY ONE PHASE EXISTS
         assertEquals(newBaseSubscription.getAllTransitions().size(), 1);
@@ -242,7 +242,7 @@ public class TestTransfer extends TestApiBase {
         assertEquals(subscriptions.size(), 1);
 
         final Subscription newBaseSubscription = subscriptions.get(0);
-        assertTrue(newBaseSubscription.getStartDate().compareTo(baseSubscription.getStartDate()) == 0);
+        assertTrue(((SubscriptionData) newBaseSubscription).getAlignStartDate().compareTo(((SubscriptionData) baseSubscription).getAlignStartDate()) == 0);
 
         // CHECK ONLY ONE PHASE EXISTS
         assertEquals(newBaseSubscription.getAllTransitions().size(), 1);
@@ -337,15 +337,15 @@ public class TestTransfer extends TestApiBase {
             Product curProduct = curPlan.getProduct();
             if (curProduct.getName().equals(baseProduct)) {
                 foundBP = true;
-                assertTrue(cur.getStartDate().compareTo(baseSubscription.getStartDate()) == 0);
+                assertTrue(((SubscriptionData) cur).getAlignStartDate().compareTo(((SubscriptionData) baseSubscription).getAlignStartDate()) == 0);
                 assertNull(cur.getPendingTransition());
             } else if (curProduct.getName().equals(aoProduct1)) {
                 foundAO1 = true;
-                assertTrue(cur.getStartDate().compareTo(aoSubscription1.getStartDate()) == 0);
+                assertTrue(((SubscriptionData) cur).getAlignStartDate().compareTo((aoSubscription1).getAlignStartDate()) == 0);
                 assertNull(cur.getPendingTransition());
             } else if (curProduct.getName().equals(aoProduct2)) {
                 foundAO2 = true;
-                assertTrue(cur.getStartDate().compareTo(aoSubscription2.getStartDate()) == 0);
+                assertTrue(((SubscriptionData) cur).getAlignStartDate().compareTo((aoSubscription2).getAlignStartDate()) == 0);
                 assertNotNull(cur.getPendingTransition());
             } else {
                 Assert.fail("Unexpected product " + curProduct.getName());
@@ -363,5 +363,4 @@ public class TestTransfer extends TestApiBase {
         clock.addMonths(1);
         assertTrue(testListener.isCompleted(3000));
     }
-
 }