@Test public void oneStepInFlowReacts() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT).user(EntersText.class).system(displaysEnteredText()) .build(); modelRunner.run(model); reactToAndAssertEvents(entersText()); }
@Test public void twoSequentialStepsReactToEventsOfDifferentType() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT).user(EntersText.class).system(displaysEnteredText()) .step(CUSTOMER_ENTERS_NUMBER).user(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); reactToAndAssertEvents(entersText(), entersNumber()); }
@Test public void twoSequentialStepsReactToEventsOfSameType() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT).user(EntersText.class).system(displaysEnteredText()) .step(CUSTOMER_ENTERS_TEXT_AGAIN).user(EntersText.class).system(displaysEnteredText()) .build(); modelRunner.run(model); reactToAndAssertEvents(entersText(), entersText()); }
@Test public void startsOneOfTwoParallelUseCasesByDifferentEvent() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT).user(EntersText.class).system(displaysEnteredText()) .useCase(USE_CASE_2) .basicFlow() .step(CUSTOMER_ENTERS_NUMBER).user(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); reactToAndAssertEvents(entersNumber()); }
@Test public void reactToStepOnce() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT) .user(EntersText.class).system(displaysEnteredText()) .reactWhile(() -> true) .step(CUSTOMER_ENTERS_NUMBER) .user(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); reactToAndAssertEvents(entersText(), entersNumber()); }
@Test public void startsTwoUseCasesSequentially() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT).user(EntersText.class).system(displaysEnteredText()) .useCase(USE_CASE_2) .basicFlow().condition(this::textIsAvailable) .step(CUSTOMER_ENTERS_NUMBER).user(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); reactToAndAssertEvents(entersText(), entersNumber()); }
@Test public void reactToStepTwice() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT) .user(EntersText.class).system(displaysEnteredText()) .reactWhile(() -> true) .step(CUSTOMER_ENTERS_NUMBER) .user(EntersNumber.class).system(displaysEnteredNumber()) .build(); modelRunner.run(model); reactToAndAssertEvents(entersText(), entersText(), entersNumber()); }
@Test public void twoSequentialStepsReactWhenSeveralActorsContainRightActorAtFirstPosition() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT) .as(customer).user(EntersText.class).system(displaysEnteredText()) .step(CUSTOMER_ENTERS_TEXT_AGAIN) .as(customer, secondActor).user(EntersText.class).system(displaysEnteredText()) .build(); modelRunner.as(customer).run(model); reactToAndAssertEvents(entersText(), entersText()); }
@Test public void twoSequentialStepsReactWhenSeveralActorsContainRightActorAtSecondPosition() { Model model = modelBuilder .useCase(USE_CASE) .basicFlow() .step(CUSTOMER_ENTERS_TEXT) .as(customer).user(EntersText.class).system(displaysEnteredText()) .step(CUSTOMER_ENTERS_TEXT_AGAIN) .as(secondActor, customer).user(EntersText.class).system(displaysEnteredText()) .build(); modelRunner.as(customer).run(model); reactToAndAssertEvents(entersText(), entersText()); }