@Override public boolean isRunnerAtRightPositionFor(FlowStep step, ModelRunner modelRunner) { Step latestStepRun = modelRunner.getLatestStep().orElse(null); boolean stepWasRunLast = Objects.equals(step, latestStepRun); return stepWasRunLast; } }
/** * Returns the flow the latest step that has been run is contained in. * * @return the latest flow run */ public Optional<Flow> getLatestFlow() { return getLatestStep().filter(step -> step instanceof FlowStep).map(step -> ((FlowStep)step).getFlow()); }
/** * Call this method to provide several event objects to the runner. For each * event object, {@link #reactTo(Object)} is called. * * @param events * the events to react to * @return the latest step that has been run */ public Optional<Step> reactTo(Object... events) { Objects.requireNonNull(events); for (Object event : events) { reactTo(event); } return getLatestStep(); }
private boolean isAtEndOfIncludedFlow() { Optional<FlowStep> lastStepOfRunningFlow = getLatestStep().map(ls -> getLastStepOf(((FlowStep)ls).getFlow())); boolean result = getLatestStep() .map(ls -> ls.getUseCase().equals(includedUseCase) && ls.equals(lastStepOfRunningFlow.get())) .orElse(false); return result; }
protected String latestStepName() { String latestStepName = modelRunner.getLatestStep().map(step -> step.getName()).orElse(null); return latestStepName; }
@Test public void twoFlowlessStepsReactWhenConditionIsTrueInSecondStepWithoutEvent() { Model model = modelBuilder.useCase(USE_CASE) .on(EntersText.class).system(displaysEnteredText()) .condition(() -> modelRunner.getLatestStep().isPresent() && modelRunner.getLatestStep().get().getEventClass().equals(EntersText.class)).system(displaysConstantText()) .build(); modelRunner.run(model).reactTo(entersText()); assertEquals(ModelRunner.class, modelRunner.getLatestStep().get().getEventClass()); }
@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()); }