public <T> FlowlessUserPart<T> on(Class<T> eventOrExceptionClass) { ConditionPart conditionPart = condition(null); FlowlessUserPart<T> flowlessUserPart = conditionPart.on(eventOrExceptionClass); return flowlessUserPart; }
/** * Only if the specified condition is true, the event is handled. * * @param condition * the condition that constrains when the event is handled * @return a part of the builder used to define the event's class */ public ConditionPart condition(Condition condition) { return useCase(HANDLES_EVENTS).condition(condition); }
@Test public void twoFlowlessStepsReactWhenConditionIsTrueInFirstStepWithoutEventButWithModelRunnerArgument() { Model model = modelBuilder.useCase(USE_CASE) .condition(() -> !modelRunner.getLatestStep().isPresent()).system(modelRunner -> displaysConstantText()) .on(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); Optional<Step> latestStepRun = modelRunner.reactTo(entersNumber()); assertEquals(EntersNumber.class, latestStepRun.get().getEventClass()); }
@Test public void twoFlowlessStepsReactWhenConditionIsTrueInFirstStepWithoutEvent() { Model model = modelBuilder.useCase(USE_CASE) .condition(() -> !modelRunner.getLatestStep().isPresent()).system(displaysConstantText()) .on(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); Optional<Step> latestStepRun = modelRunner.reactTo(entersNumber()); assertEquals(EntersNumber.class, latestStepRun.get().getEventClass()); }
@Test public void recordsStepWithEvent() { ReactionAsConsumer reactionAsConsumer = new ReactionAsConsumer(); Model model = modelBuilder.useCase(USE_CASE).condition(new AlwaysTrue()).on(EntersText.class) .system(reactionAsConsumer).build(); modelRunner.handleWith(recordStepDetails()); modelRunner.run(model); modelRunner.reactTo(entersText()); Object condition = optionalCondition.get(); assertTrue(condition instanceof AlwaysTrue); Object event = optionalEvent.get(); assertTrue(event instanceof EntersText); assertEquals(reactionAsConsumer, systemReaction); }
@Test public void twoFlowlessStepsReactWhenConditionIsTrueInFirstStepWithEvent() { Model model = modelBuilder.useCase(USE_CASE) .condition(() -> true).on(EntersText.class).system(displaysEnteredText()) .on(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); Optional<Step> latestStepRun = modelRunner.reactTo(entersText()); assertEquals(EntersText.class, latestStepRun.get().getEventClass()); latestStepRun = modelRunner.reactTo(entersNumber()); assertEquals(EntersNumber.class, latestStepRun.get().getEventClass()); }
@Test public void twoFlowlessStepsDontReactWhenConditionIsFalseInFirstStep() { Model model = modelBuilder.useCase(USE_CASE) .condition(() -> false).on(EntersText.class).system(displaysEnteredText()) .on(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); Optional<Step> latestStepRun = modelRunner.reactTo(entersNumber()); assertEquals(EntersNumber.class, latestStepRun.get().getEventClass()); latestStepRun = modelRunner.reactTo(entersText()); assertEquals(EntersNumber.class, latestStepRun.get().getEventClass()); }