Пример #1
0
 /* (non-Javadoc)
  * @see com.ning.billing.junction.api.blocking.BlockingState#compareTo(com.ning.billing.junction.api.blocking.DefaultBlockingState)
  */
 public int compareTo(BlockingState arg0) {
   if (timestamp.compareTo(arg0.getTimestamp()) != 0) {
     return timestamp.compareTo(arg0.getTimestamp());
   } else {
     return hashCode() - arg0.hashCode();
   }
 }
  @Test(groups = "fast")
  public void testWithMultipleEntitlements() throws CatalogApiException {

    clock.setDay(new LocalDate(2013, 1, 1));

    final DateTimeZone accountTimeZone = DateTimeZone.UTC;
    final UUID accountId = UUID.randomUUID();
    final UUID bundleId = UUID.randomUUID();
    final String externalKey = "foo";

    final UUID entitlementId1 = UUID.fromString("cf5a597a-cf15-45d3-8f02-95371be7f927");
    final UUID entitlementId2 = UUID.fromString("e37cc97a-7b98-4ab6-a29a-7259e45c3366");

    final List<SubscriptionBaseTransition> allTransitions1 =
        new ArrayList<SubscriptionBaseTransition>();
    final List<SubscriptionBaseTransition> allTransitions2 =
        new ArrayList<SubscriptionBaseTransition>();
    final List<BlockingState> blockingStates = new ArrayList<BlockingState>();

    final DateTime requestedDate = new DateTime();
    DateTime effectiveDate = new DateTime(2013, 1, 1, 15, 43, 25, 0, DateTimeZone.UTC);
    final SubscriptionBaseTransition ent1Tr1 =
        createTransition(
            entitlementId1,
            EventType.API_USER,
            ApiEventType.CREATE,
            requestedDate,
            effectiveDate,
            clock.getUTCNow(),
            null,
            "trial1");
    allTransitions1.add(ent1Tr1);

    effectiveDate = effectiveDate.plusDays(15);
    clock.addDays(15);
    final SubscriptionBaseTransition ent2Tr1 =
        createTransition(
            entitlementId2,
            EventType.API_USER,
            ApiEventType.TRANSFER,
            requestedDate,
            effectiveDate,
            clock.getUTCNow(),
            null,
            "phase2");
    allTransitions2.add(ent2Tr1);

    effectiveDate = effectiveDate.plusDays(15);
    clock.addDays(15);
    final SubscriptionBaseTransition ent1Tr2 =
        createTransition(
            entitlementId1,
            EventType.PHASE,
            null,
            requestedDate,
            effectiveDate,
            clock.getUTCNow(),
            "trial1",
            "phase1");
    allTransitions1.add(ent1Tr2);

    effectiveDate = effectiveDate.plusDays(5);
    clock.addDays(5);
    final BlockingState bs1 =
        new DefaultBlockingState(
            UUID.randomUUID(),
            bundleId,
            BlockingStateType.SUBSCRIPTION_BUNDLE,
            DefaultEntitlementApi.ENT_STATE_BLOCKED,
            DefaultEntitlementService.ENTITLEMENT_SERVICE_NAME,
            true,
            true,
            false,
            effectiveDate,
            clock.getUTCNow(),
            clock.getUTCNow());
    blockingStates.add(bs1);

    effectiveDate = effectiveDate.plusDays(15);
    clock.addDays(15);
    final SubscriptionBaseTransition ent1Tr3 =
        createTransition(
            entitlementId1,
            EventType.API_USER,
            ApiEventType.CANCEL,
            requestedDate,
            effectiveDate,
            clock.getUTCNow(),
            "phase1",
            null);
    allTransitions1.add(ent1Tr3);
    final BlockingState bs2 =
        new DefaultBlockingState(
            UUID.randomUUID(),
            entitlementId1,
            BlockingStateType.SUBSCRIPTION,
            DefaultEntitlementApi.ENT_STATE_CANCELLED,
            DefaultEntitlementService.ENTITLEMENT_SERVICE_NAME,
            true,
            true,
            false,
            effectiveDate,
            clock.getUTCNow(),
            clock.getUTCNow());

    blockingStates.add(bs2);

    final List<Entitlement> entitlements = new ArrayList<Entitlement>();
    final Entitlement entitlement1 = createEntitlement(entitlementId1, allTransitions1);
    entitlements.add(entitlement1);

    final Entitlement entitlement2 = createEntitlement(entitlementId2, allTransitions2);
    entitlements.add(entitlement2);

    final DefaultSubscriptionBundleTimeline timeline =
        new DefaultSubscriptionBundleTimeline(
            accountTimeZone, accountId, bundleId, externalKey, entitlements, blockingStates);

    List<SubscriptionEvent> events = timeline.getSubscriptionEvents();
    assertEquals(events.size(), 9);

    assertEquals(
        events
            .get(0)
            .getEffectiveDate()
            .compareTo(new LocalDate(ent1Tr1.getEffectiveTransitionTime(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(1)
            .getEffectiveDate()
            .compareTo(new LocalDate(ent1Tr1.getEffectiveTransitionTime(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(2)
            .getEffectiveDate()
            .compareTo(new LocalDate(ent2Tr1.getEffectiveTransitionTime(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(3)
            .getEffectiveDate()
            .compareTo(new LocalDate(ent2Tr1.getEffectiveTransitionTime(), accountTimeZone)),
        0);

    assertEquals(
        events
            .get(4)
            .getEffectiveDate()
            .compareTo(new LocalDate(ent1Tr2.getEffectiveTransitionTime(), accountTimeZone)),
        0);

    assertEquals(
        events
            .get(5)
            .getEffectiveDate()
            .compareTo(new LocalDate(bs1.getEffectiveDate(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(6)
            .getEffectiveDate()
            .compareTo(new LocalDate(bs1.getEffectiveDate(), accountTimeZone)),
        0);

    assertEquals(
        events
            .get(7)
            .getEffectiveDate()
            .compareTo(new LocalDate(ent1Tr3.getEffectiveTransitionTime(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(8)
            .getEffectiveDate()
            .compareTo(new LocalDate(bs2.getEffectiveDate(), accountTimeZone)),
        0);

    assertEquals(events.get(0).getSubscriptionEventType(), SubscriptionEventType.START_ENTITLEMENT);
    assertEquals(events.get(1).getSubscriptionEventType(), SubscriptionEventType.START_BILLING);
    assertEquals(events.get(2).getSubscriptionEventType(), SubscriptionEventType.START_ENTITLEMENT);
    assertEquals(events.get(3).getSubscriptionEventType(), SubscriptionEventType.START_BILLING);

    assertEquals(events.get(4).getSubscriptionEventType(), SubscriptionEventType.PHASE);

    assertEquals(events.get(5).getSubscriptionEventType(), SubscriptionEventType.PAUSE_ENTITLEMENT);
    assertEquals(events.get(6).getSubscriptionEventType(), SubscriptionEventType.PAUSE_ENTITLEMENT);

    assertEquals(events.get(7).getSubscriptionEventType(), SubscriptionEventType.STOP_ENTITLEMENT);
    assertEquals(events.get(8).getSubscriptionEventType(), SubscriptionEventType.STOP_BILLING);

    assertEquals(events.get(0).getPrevPhase(), null);
    assertEquals(events.get(0).getNextPhase().getName(), "trial1");
    assertEquals(events.get(1).getPrevPhase(), null);
    assertEquals(events.get(1).getNextPhase().getName(), "trial1");
    assertEquals(events.get(2).getPrevPhase(), null);
    assertEquals(events.get(2).getNextPhase().getName(), "phase2");
    assertEquals(events.get(3).getPrevPhase(), null);
    assertEquals(events.get(3).getNextPhase().getName(), "phase2");

    assertEquals(events.get(4).getPrevPhase().getName(), "trial1");
    assertEquals(events.get(4).getNextPhase().getName(), "phase1");

    assertEquals(events.get(5).getPrevPhase().getName(), "phase1");
    assertEquals(events.get(5).getNextPhase().getName(), "phase1");

    assertEquals(events.get(6).getPrevPhase().getName(), "phase2");
    assertEquals(events.get(6).getNextPhase(), null);

    assertEquals(events.get(7).getPrevPhase().getName(), "phase1");
    assertEquals(events.get(7).getNextPhase(), null);

    assertEquals(events.get(8).getPrevPhase().getName(), "phase1");
    assertEquals(events.get(8).getNextPhase(), null);
  }
  @Test(groups = "fast")
  public void testOneEntitlementWithBlockingStatesSubscription() throws CatalogApiException {

    clock.setDay(new LocalDate(2013, 1, 1));

    final DateTimeZone accountTimeZone = DateTimeZone.UTC;
    final UUID accountId = UUID.randomUUID();
    final UUID bundleId = UUID.randomUUID();
    final String externalKey = "foo";

    final UUID entitlementId = UUID.randomUUID();

    final List<SubscriptionBaseTransition> allTransitions =
        new ArrayList<SubscriptionBaseTransition>();
    final List<BlockingState> blockingStates = new ArrayList<BlockingState>();

    final DateTime requestedDate = new DateTime();
    DateTime effectiveDate = new DateTime(2013, 1, 1, 15, 43, 25, 0, DateTimeZone.UTC);
    final SubscriptionBaseTransition tr1 =
        createTransition(
            entitlementId,
            EventType.API_USER,
            ApiEventType.CREATE,
            requestedDate,
            effectiveDate,
            clock.getUTCNow(),
            null,
            "trial");
    allTransitions.add(tr1);

    effectiveDate = effectiveDate.plusDays(30);
    clock.addDays(30);
    final SubscriptionBaseTransition tr2 =
        createTransition(
            entitlementId,
            EventType.PHASE,
            null,
            requestedDate,
            effectiveDate,
            clock.getUTCNow(),
            "trial",
            "phase");
    allTransitions.add(tr2);

    effectiveDate = effectiveDate.plusDays(5);
    clock.addDays(5);
    final BlockingState bs1 =
        new DefaultBlockingState(
            UUID.randomUUID(),
            entitlementId,
            BlockingStateType.SUBSCRIPTION,
            DefaultEntitlementApi.ENT_STATE_BLOCKED,
            DefaultEntitlementService.ENTITLEMENT_SERVICE_NAME,
            true,
            true,
            false,
            effectiveDate,
            clock.getUTCNow(),
            clock.getUTCNow());
    blockingStates.add(bs1);

    effectiveDate = effectiveDate.plusDays(15);
    clock.addDays(15);
    final SubscriptionBaseTransition tr3 =
        createTransition(
            entitlementId,
            EventType.API_USER,
            ApiEventType.CANCEL,
            requestedDate,
            effectiveDate,
            clock.getUTCNow(),
            "phase",
            null);
    allTransitions.add(tr3);
    final BlockingState bs2 =
        new DefaultBlockingState(
            UUID.randomUUID(),
            entitlementId,
            BlockingStateType.SUBSCRIPTION,
            DefaultEntitlementApi.ENT_STATE_CANCELLED,
            DefaultEntitlementService.ENTITLEMENT_SERVICE_NAME,
            true,
            true,
            false,
            effectiveDate,
            clock.getUTCNow(),
            clock.getUTCNow());

    blockingStates.add(bs2);

    final List<Entitlement> entitlements = new ArrayList<Entitlement>();
    final Entitlement entitlement = createEntitlement(entitlementId, allTransitions);
    entitlements.add(entitlement);

    final DefaultSubscriptionBundleTimeline timeline =
        new DefaultSubscriptionBundleTimeline(
            accountTimeZone, accountId, bundleId, externalKey, entitlements, blockingStates);

    List<SubscriptionEvent> events = timeline.getSubscriptionEvents();
    assertEquals(events.size(), 6);

    assertEquals(
        events
            .get(0)
            .getEffectiveDate()
            .compareTo(new LocalDate(tr1.getEffectiveTransitionTime(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(1)
            .getEffectiveDate()
            .compareTo(new LocalDate(tr1.getEffectiveTransitionTime(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(2)
            .getEffectiveDate()
            .compareTo(new LocalDate(tr2.getEffectiveTransitionTime(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(3)
            .getEffectiveDate()
            .compareTo(new LocalDate(bs1.getEffectiveDate(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(4)
            .getEffectiveDate()
            .compareTo(new LocalDate(tr3.getEffectiveTransitionTime(), accountTimeZone)),
        0);
    assertEquals(
        events
            .get(5)
            .getEffectiveDate()
            .compareTo(new LocalDate(bs2.getEffectiveDate(), accountTimeZone)),
        0);

    assertEquals(events.get(0).getSubscriptionEventType(), SubscriptionEventType.START_ENTITLEMENT);
    assertEquals(events.get(1).getSubscriptionEventType(), SubscriptionEventType.START_BILLING);
    assertEquals(events.get(2).getSubscriptionEventType(), SubscriptionEventType.PHASE);
    assertEquals(events.get(3).getSubscriptionEventType(), SubscriptionEventType.PAUSE_ENTITLEMENT);
    assertEquals(events.get(4).getSubscriptionEventType(), SubscriptionEventType.STOP_ENTITLEMENT);
    assertEquals(events.get(5).getSubscriptionEventType(), SubscriptionEventType.STOP_BILLING);

    assertEquals(events.get(0).getPrevPhase(), null);
    assertEquals(events.get(0).getNextPhase().getName(), "trial");
    assertEquals(events.get(1).getPrevPhase(), null);
    assertEquals(events.get(1).getNextPhase().getName(), "trial");
    assertEquals(events.get(2).getPrevPhase().getName(), "trial");
    assertEquals(events.get(2).getNextPhase().getName(), "phase");
    assertEquals(events.get(3).getPrevPhase().getName(), "phase");
    assertEquals(events.get(3).getNextPhase().getName(), "phase");
    assertEquals(events.get(4).getPrevPhase().getName(), "phase");
    assertEquals(events.get(4).getNextPhase(), null);
    assertEquals(events.get(5).getPrevPhase().getName(), "phase");
    assertEquals(events.get(5).getNextPhase(), null);
  }