killbill-aplcache
Changes
entitlement/src/main/java/com/ning/billing/entitlement/api/repair/DefaultEntitlementRepairApi.java 5(+1 -4)
Details
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/repair/DefaultEntitlementRepairApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/repair/DefaultEntitlementRepairApi.java
index 4db5523..23e55dc 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/repair/DefaultEntitlementRepairApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/repair/DefaultEntitlementRepairApi.java
@@ -189,10 +189,7 @@ public class DefaultEntitlementRepairApi implements EntitlementRepairApi {
return createGetBundleRepair(input.getBundleId(), input.getViewId(), repairs);
} else {
dao.repair(input.getBundleId(), inRepair, context);
- bundle = dao.getSubscriptionBundleFromId(input.getBundleId());
- String newViewId = getViewId(((SubscriptionBundleData) bundle).getLastSysUpdateTime(), subscriptions);
- final List<SubscriptionRepair> repairs = createGetSubscriptionRepairList(subscriptions, Collections.<SubscriptionRepair>emptyList());
- return createGetBundleRepair(input.getBundleId(), viewId, repairs);
+ return getBundleRepair(input.getBundleId());
}
} finally {
repairDao.cleanup();
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
index d066389..85c203a 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EntitlementSqlDao.java
@@ -609,7 +609,7 @@ public class EntitlementSqlDao implements EntitlementDao {
EventSqlDao transEventDao = transactional.become(EventSqlDao.class);
for (SubscriptionDataRepair cur : inRepair) {
- transactional.updateActiveVersion(cur.getId().toString(), cur.getActiveVersion(), context);
+ transactional.updateForRepair(cur.getId().toString(), cur.getActiveVersion(), cur.getStartDate().toDate(), cur.getBundleStartDate().toDate(), context);
for (EntitlementEvent event : cur.getInitialEvents()) {
transEventDao.updateVersion(event.getId().toString(), cur.getActiveVersion(), context);
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EventSqlDao.java b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EventSqlDao.java
index 5889c95..a927be3 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EventSqlDao.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/engine/dao/EventSqlDao.java
@@ -68,7 +68,7 @@ public interface EventSqlDao extends Transactional<EventSqlDao>, CloseMe, Transm
@SqlUpdate
public void updateVersion(@Bind("event_id")String eventId,
- @Bind("current_version") Long currentVersion,
+ @Bind("current_version") Long currentVersion,
@CallContextBinder final CallContext context);
@SqlQuery
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 b61b287..92c37db 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
@@ -62,9 +62,14 @@ public interface SubscriptionSqlDao extends Transactional<SubscriptionSqlDao>, C
public void updateChargedThroughDate(@Bind("id") String id, @Bind("ctd_dt") Date ctd,
@CallContextBinder final CallContext context);
+ @SqlUpdate void updateActiveVersion(@Bind("id") String id, @Bind("active_version") long activeVersion,
+ @CallContextBinder final CallContext context);
+
@SqlUpdate
- public void updateActiveVersion(@Bind("id") String id, @Bind("active_version") long activeVersion,
- @CallContextBinder final CallContext context);
+ public void updateForRepair(@Bind("id") String id, @Bind("active_version") long activeVersion,
+ @Bind("start_dt") Date startDate,
+ @Bind("bundle_start_dt") Date bundleStartDate,
+ @CallContextBinder final CallContext context);
public static class SubscriptionBinder extends BinderBase implements Binder<Bind, SubscriptionData> {
@Override
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg
index 671be3f..804f6ae 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/engine/dao/SubscriptionSqlDao.sql.stg
@@ -79,3 +79,15 @@ updateActiveVersion() ::= <<
where id = :id
;
>>
+
+updateForRepair() ::= <<
+ update subscriptions
+ set
+ active_version = :active_version
+ , start_dt = :start_dt
+ , bundle_start_dt = :bundle_start_dt
+ , updated_by = :userName
+ , updated_date = :updatedDate
+ where id = :id
+ ;
+>>
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/api/repair/TestRepair.java b/entitlement/src/test/java/com/ning/billing/entitlement/api/repair/TestRepair.java
index 5d31076..e51d940 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/api/repair/TestRepair.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/api/repair/TestRepair.java
@@ -132,7 +132,7 @@ public class TestRepair extends TestApiBase {
String newBaseProduct = "Assault-Rifle";
DateTime startDate = clock.getUTCNow();
- int clockShift = -10;
+ int clockShift = -1;
DateTime restartDate = startDate.plusDays(clockShift).minusDays(1);
LinkedList<ExistingEvent> expected = new LinkedList<SubscriptionRepair.ExistingEvent>();
@@ -251,12 +251,38 @@ public class TestRepair extends TestApiBase {
assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
}
-
// SECOND RE-ISSUE CALL-- NON DRY RUN
dryRun = false;
BundleRepair realRunBundleRepair = repairApi.repairBundle(bRepair, dryRun, context);
+ subscriptionRepair = realRunBundleRepair.getSubscriptions();
+ assertEquals(subscriptionRepair.size(), 1);
+ cur = subscriptionRepair.get(0);
+ assertEquals(cur.getId(), baseSubscription.getId());
+
+ events = cur.getExistingEvents();
+ assertEquals(expectedEvents.size(), events.size());
+ index = 0;
+ for (ExistingEvent e : expectedEvents) {
+ validateExistingEventForAssertion(e, events.get(index++));
+ }
+ SubscriptionData realRunBaseSubscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(baseSubscription.getId());
+ assertEquals(realRunBaseSubscription.getAllTransitions().size(), 2);
+
+ assertEquals(realRunBaseSubscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION + 1);
+ assertEquals(realRunBaseSubscription.getBundleId(), bundle.getId());
+ assertEquals(realRunBaseSubscription.getStartDate(), newCreateTime);
+
+ currentPlan = realRunBaseSubscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), newBaseProduct);
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
+
+ currentPhase = realRunBaseSubscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
}
@Test(groups={"slow"})
@@ -277,7 +303,7 @@ public class TestRepair extends TestApiBase {
expected.add(createExistingEventForAssertion(SubscriptionTransitionType.PHASE, newBaseProduct, PhaseType.EVERGREEN,
ProductCategory.BASE, PriceListSet.DEFAULT_PRICELIST_NAME, BillingPeriod.MONTHLY, startDate.plusDays(30)));
- testSimpleBPRepairAddChange(true, startDate, clockShift, baseProduct, newBaseProduct, expected);
+ testSimpleBPRepairAddChange(true, startDate, clockShift, baseProduct, newBaseProduct, expected, 3);
}
@Test(groups={"slow"})
@@ -297,11 +323,11 @@ public class TestRepair extends TestApiBase {
ProductCategory.BASE, PriceListSet.DEFAULT_PRICELIST_NAME, BillingPeriod.MONTHLY, startDate.plusDays(30)));
expected.add(createExistingEventForAssertion(SubscriptionTransitionType.CHANGE, newBaseProduct, PhaseType.EVERGREEN,
ProductCategory.BASE, PriceListSet.DEFAULT_PRICELIST_NAME, BillingPeriod.MONTHLY, changeDate));
- testSimpleBPRepairAddChange(false, startDate, clockShift, baseProduct, newBaseProduct, expected);
+ testSimpleBPRepairAddChange(false, startDate, clockShift, baseProduct, newBaseProduct, expected, 3);
}
private void testSimpleBPRepairAddChange(boolean inTrial, DateTime startDate, int clockShift,
- String baseProduct, String newBaseProduct, List<ExistingEvent> expectedEvents) throws Exception {
+ String baseProduct, String newBaseProduct, List<ExistingEvent> expectedEvents, int expectedTransitions) throws Exception {
// CREATE BP
Subscription baseSubscription = createSubscription(baseProduct, BillingPeriod.MONTHLY, PriceListSet.DEFAULT_PRICELIST_NAME, startDate);
@@ -371,6 +397,39 @@ public class TestRepair extends TestApiBase {
// SECOND RE-ISSUE CALL-- NON DRY RUN
dryRun = false;
BundleRepair realRunBundleRepair = repairApi.repairBundle(bRepair, dryRun, context);
+
+ subscriptionRepair = realRunBundleRepair.getSubscriptions();
+ assertEquals(subscriptionRepair.size(), 1);
+ cur = subscriptionRepair.get(0);
+ assertEquals(cur.getId(), baseSubscription.getId());
+
+ events = cur.getExistingEvents();
+ assertEquals(expectedEvents.size(), events.size());
+ index = 0;
+ for (ExistingEvent e : expectedEvents) {
+ validateExistingEventForAssertion(e, events.get(index++));
+ }
+ SubscriptionData realRunBaseSubscription = (SubscriptionData) entitlementApi.getSubscriptionFromId(baseSubscription.getId());
+ assertEquals(realRunBaseSubscription.getAllTransitions().size(), expectedTransitions);
+
+
+ assertEquals(realRunBaseSubscription.getActiveVersion(), SubscriptionEvents.INITIAL_VERSION + 1);
+ assertEquals(realRunBaseSubscription.getBundleId(), bundle.getId());
+ assertEquals(realRunBaseSubscription.getStartDate(), baseSubscription.getStartDate());
+
+ currentPlan = realRunBaseSubscription.getCurrentPlan();
+ assertNotNull(currentPlan);
+ assertEquals(currentPlan.getProduct().getName(), newBaseProduct);
+ assertEquals(currentPlan.getProduct().getCategory(), ProductCategory.BASE);
+ assertEquals(currentPlan.getBillingPeriod(), BillingPeriod.MONTHLY);
+
+ currentPhase = realRunBaseSubscription.getCurrentPhase();
+ assertNotNull(currentPhase);
+ if (inTrial) {
+ assertEquals(currentPhase.getPhaseType(), PhaseType.TRIAL);
+ } else {
+ assertEquals(currentPhase.getPhaseType(), PhaseType.EVERGREEN);
+ }
}
@@ -444,12 +503,12 @@ public class TestRepair extends TestApiBase {
}
private void validateExistingEventForAssertion(final ExistingEvent expected, final ExistingEvent input) {
- assertEquals(expected.getPlanPhaseSpecifier().getProductName(), input.getPlanPhaseSpecifier().getProductName());
- assertEquals(expected.getPlanPhaseSpecifier().getPhaseType(), input.getPlanPhaseSpecifier().getPhaseType());
- assertEquals(expected.getPlanPhaseSpecifier().getProductCategory(), input.getPlanPhaseSpecifier().getProductCategory());
- assertEquals(expected.getPlanPhaseSpecifier().getPriceListName(), input.getPlanPhaseSpecifier().getPriceListName());
- assertEquals(expected.getPlanPhaseSpecifier().getBillingPeriod(), input.getPlanPhaseSpecifier().getBillingPeriod());
- assertEquals(expected.getEffectiveDate(), input.getEffectiveDate());
+ assertEquals(input.getPlanPhaseSpecifier().getProductName(), expected.getPlanPhaseSpecifier().getProductName());
+ assertEquals(input.getPlanPhaseSpecifier().getPhaseType(), expected.getPlanPhaseSpecifier().getPhaseType());
+ assertEquals(input.getPlanPhaseSpecifier().getProductCategory(), expected.getPlanPhaseSpecifier().getProductCategory());
+ assertEquals(input.getPlanPhaseSpecifier().getPriceListName(), expected.getPlanPhaseSpecifier().getPriceListName());
+ assertEquals(input.getPlanPhaseSpecifier().getBillingPeriod(), expected.getPlanPhaseSpecifier().getBillingPeriod());
+ assertEquals(input.getEffectiveDate(), expected.getEffectiveDate());
}
private DeletedEvent createDeletedEvent(final UUID eventId) {