private SubscriptionEvent toSubscriptionEvent(final SubscriptionBaseTransition in, final SubscriptionEventType eventType, final DateTimeZone accountTimeZone) { return new DefaultSubscriptionEvent(in.getId(), in.getSubscriptionId(), in.getEffectiveTransitionTime(), in.getRequestedTransitionTime(), eventType, false, false, getServiceName(eventType), eventType.toString(), (in.getPreviousPlan() != null ? in.getPreviousPlan().getProduct() : null), in.getPreviousPlan(), in.getPreviousPhase(), in.getPreviousPriceList(), (in.getPreviousPlan() != null ? in.getPreviousPlan().getBillingPeriod() : null), (in.getNextPlan() != null ? in.getNextPlan().getProduct() : null), in.getNextPlan(), in.getNextPhase(), in.getNextPriceList(), (in.getNextPlan() != null ? in.getNextPlan().getBillingPeriod() : null), in.getCreatedDate(), accountTimeZone); }
@Override public boolean apply(final SubscriptionBaseTransition input) { // Make sure we return the event for equality return !input.getEffectiveTransitionTime().isBefore(effectiveDatetime) && typeList.contains(input.getTransitionType()); } });
private Collection<BlockingState> computeAddonsBlockingStatesForNextSubscriptionBaseEvent(final DateTime effectiveDate, final boolean useBillingEffectiveDate) { SubscriptionBaseTransition subscriptionBaseTransitionTrigger = null; if (!isEntitlementFutureCancelled()) { // Compute the transition trigger (either subscription cancel or change) final Iterable<SubscriptionBaseTransition> pendingSubscriptionBaseTransitions = getPendingSubscriptionEvents(effectiveDate, SubscriptionBaseTransitionType.CHANGE, SubscriptionBaseTransitionType.CANCEL); if (!pendingSubscriptionBaseTransitions.iterator().hasNext()) { return ImmutableList.<BlockingState>of(); } subscriptionBaseTransitionTrigger = pendingSubscriptionBaseTransitions.iterator().next(); } final Product baseTransitionTriggerNextProduct; final DateTime blockingStateEffectiveDate; if (subscriptionBaseTransitionTrigger == null) { baseTransitionTriggerNextProduct = null; blockingStateEffectiveDate = effectiveDate; } else { baseTransitionTriggerNextProduct = (EntitlementState.CANCELLED.equals(subscriptionBaseTransitionTrigger.getNextState()) ? null : subscriptionBaseTransitionTrigger.getNextPlan().getProduct()); blockingStateEffectiveDate = useBillingEffectiveDate ? subscriptionBaseTransitionTrigger.getEffectiveTransitionTime() : effectiveDate; } return computeAddonsBlockingStatesForSubscriptionBaseEvent(baseTransitionTriggerNextProduct, blockingStateEffectiveDate); }
final DateTime evergreenPhaseDate = ((DefaultSubscriptionBase) baseSubscription).getPendingTransition().getEffectiveTransitionTime();
private void changeSubscription(final DateTime effectiveChangeDate, final DefaultSubscriptionBase defaultSubscriptionBase, final String previousProductName, final String newProductName, final PhaseType commonPhaseType) { final SubscriptionBaseEvent previousEvent = createSubscriptionEvent(defaultSubscriptionBase.getStartDate(), previousProductName, commonPhaseType, ApiEventType.CREATE, defaultSubscriptionBase.getActiveVersion()); final SubscriptionBaseEvent event = createSubscriptionEvent(effectiveChangeDate, newProductName, commonPhaseType, ApiEventType.CHANGE, defaultSubscriptionBase.getActiveVersion()); defaultSubscriptionBase.rebuildTransitions(ImmutableList.<SubscriptionBaseEvent>of(previousEvent, event), catalogService.getFullCatalog()); final List<SubscriptionBaseTransition> newTransitions = defaultSubscriptionBase.getAllTransitions(); Assert.assertEquals(newTransitions.size(), 2); Assert.assertNull(newTransitions.get(0).getPreviousPhase()); Assert.assertEquals(newTransitions.get(0).getNextPhase(), newTransitions.get(1).getPreviousPhase()); Assert.assertNotNull(newTransitions.get(1).getNextPhase()); }
assertEquals(transition.getPreviousEventId(), trialEvent.getId()); assertEquals(transition.getNextEventId(), phaseEvent.getId()); assertEquals(transition.getPreviousEventCreatedDate().compareTo(trialEvent.getCreatedDate()), 0); assertEquals(transition.getNextEventCreatedDate().compareTo(phaseEvent.getCreatedDate()), 0);
private LinkedList<SubscriptionEvent> computeSubscriptionBaseEvents(final Collection<Entitlement> entitlements, final DateTimeZone accountTimeZone) { final LinkedList<SubscriptionEvent> result = new LinkedList<SubscriptionEvent>(); for (final Entitlement cur : entitlements) { final SubscriptionBase base = ((DefaultEntitlement) cur).getSubscriptionBase(); final List<SubscriptionBaseTransition> baseTransitions = base.getAllTransitions(); for (final SubscriptionBaseTransition tr : baseTransitions) { final List<SubscriptionEventType> eventTypes = toEventTypes(tr.getTransitionType()); for (final SubscriptionEventType eventType : eventTypes) { final SubscriptionEvent event = toSubscriptionEvent(tr, eventType, accountTimeZone); insertSubscriptionEvent(event, result); } } } return result; }
final DateTime evergreenPhaseDate = ((DefaultSubscriptionBase) baseSubscription).getPendingTransition().getEffectiveTransitionTime();
private DefaultSubscriptionBase createSubscriptionStartedInThePast(final String productName, final PhaseType phaseType) { final SubscriptionBuilder builder = new SubscriptionBuilder(); builder.setBundleStartDate(clock.getUTCNow().minusHours(10)); // Make sure to set the dates apart builder.setAlignStartDate(new DateTime(builder.getBundleStartDate().plusHours(5))); // Create the transitions final DefaultSubscriptionBase defaultSubscriptionBase = new DefaultSubscriptionBase(builder, null, clock); final SubscriptionBaseEvent event = createSubscriptionEvent(builder.getAlignStartDate(), productName, phaseType, ApiEventType.CREATE, defaultSubscriptionBase.getActiveVersion()); defaultSubscriptionBase.rebuildTransitions(ImmutableList.<SubscriptionBaseEvent>of(event), catalogService.getFullCatalog()); Assert.assertEquals(defaultSubscriptionBase.getAllTransitions().size(), 1); Assert.assertNull(defaultSubscriptionBase.getAllTransitions().get(0).getPreviousPhase()); Assert.assertNotNull(defaultSubscriptionBase.getAllTransitions().get(0).getNextPhase()); return defaultSubscriptionBase; }
List<SubscriptionBaseTransition> aoTransitions = aoSubscription.getAllTransitions(); assertEquals(aoTransitions.size(), 3); assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE); assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE); assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL); assertTrue(aoSubscription.getFutureEndDate().compareTo(newAOChargedThroughDate) == 0); aoTransitions = aoSubscription.getAllTransitions(); assertEquals(aoTransitions.size(), 3); assertEquals(aoTransitions.get(0).getTransitionType(), SubscriptionBaseTransitionType.CREATE); assertEquals(aoTransitions.get(1).getTransitionType(), SubscriptionBaseTransitionType.PHASE); assertEquals(aoTransitions.get(2).getTransitionType(), SubscriptionBaseTransitionType.CANCEL); assertTrue(aoSubscription.getFutureEndDate().compareTo(newBPChargedThroughDate) == 0);
assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), baseSubscription.getStartDate().plusMonths(1)); } else { assertEquals(aoPendingTranstion.getEffectiveTransitionTime(), aoSubscription.getStartDate().plusMonths(1));
final SubscriptionBaseTransition nextPhase = subscription.getPendingTransition(); final DateTime nextPhaseEffectiveDate = nextPhase.getEffectiveTransitionTime(); assertEquals(nextPhaseEffectiveDate, expectedNextPhaseDate);
assertEquals(newBaseSubscriptionWithCtd.getPendingTransition().getEffectiveTransitionTime(), newCtd);