killbill-memoizeit

entitlement: prevent transfers in the future The entitlement

10/22/2012 7:52:29 PM

Details

diff --git a/api/src/main/java/com/ning/billing/ErrorCode.java b/api/src/main/java/com/ning/billing/ErrorCode.java
index 1489181..c081e57 100644
--- a/api/src/main/java/com/ning/billing/ErrorCode.java
+++ b/api/src/main/java/com/ning/billing/ErrorCode.java
@@ -82,6 +82,9 @@ public enum ErrorCode {
     ENT_BUNDLE_IS_OVERDUE_BLOCKED(1090, "Changes to this bundle are blocked by overdue enforcement (%s :  %s)"),
     ENT_ACCOUNT_IS_OVERDUE_BLOCKED(1091, "Changes to this account are blocked by overdue enforcement (%s)"),
 
+    /* Transfer */
+    ENT_TRANSFER_INVALID_EFF_DATE(1106, "Invalid effective date for transfer: %s"),
+
     /*
     *
     * Range 2000 : CATALOG
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 a2da70a..4a6a2b1 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
@@ -187,6 +187,11 @@ public class DefaultEntitlementTransferApi implements EntitlementTransferApi {
 
         try {
             final DateTime effectiveTransferDate = transferDate == null ? clock.getUTCNow() : transferDate;
+            if (effectiveTransferDate.isAfter(clock.getUTCNow())) {
+                // The transfer event for the migrated bundle will be the first one, which cannot be in the future
+                // (entitlement always expects the first event to be in the past)
+                throw new EntitlementTransferApiException(ErrorCode.ENT_TRANSFER_INVALID_EFF_DATE, effectiveTransferDate);
+            }
 
             final SubscriptionBundle bundle = dao.getSubscriptionBundleFromAccountAndKey(sourceAccountId, bundleKey, internalCallContext);
             if (bundle == null) {