@Test public void shouldAllowToSkipBeforeAndAfterScenarioStepsIfGivenStory() throws Throwable { // Given Scenario scenario1 = new Scenario("scenario 1", asList("successfulStep")); GivenStories givenStories = new GivenStories("/path/to/given/story1"); Scenario scenario2 = new Scenario( "scenario 2", Meta.EMPTY, givenStories, ExamplesTable.EMPTY, asList("anotherSuccessfulStep")); Story story1 = new Story(new Description("story 1"), Narrative.EMPTY, asList(scenario1)); Story story2 = new Story(new Description("story 2"), Narrative.EMPTY, asList(scenario2)); Step step = mock(Step.class); StepResult result = mock(StepResult.class); when(step.perform(null)).thenReturn(result); StoryParser storyParser = mock(StoryParser.class); StoryLoader storyLoader = mock(StoryLoader.class); StoryReporter reporter = mock(ConcurrentStoryReporter.class); StepCollector collector = mock(StepCollector.class); CandidateSteps mySteps = new Steps(); Step successfulStep = mockSuccessfulStep("successfulStep"); Step anotherSuccessfulStep = mockSuccessfulStep("anotherSuccessfulStep"); givenStoryWithNoBeforeOrAfterSteps(story1, false, collector, mySteps); when(collector.collectScenarioSteps(asList(mySteps), scenario1, parameters)) .thenReturn(asList(successfulStep)); givenStoryWithNoBeforeOrAfterSteps(story2, true, collector, mySteps); when(collector.collectScenarioSteps(asList(mySteps), scenario2, parameters)) .thenReturn(asList(anotherSuccessfulStep)); when(storyLoader.loadStoryAsText("/path/to/given/story1")).thenReturn("storyContent"); when(storyParser.parseStory("storyContent", "/path/to/given/story1")).thenReturn(story1); FailureStrategy failureStrategy = mock(FailureStrategy.class); Step beforeStep = mockSuccessfulStep("SuccessfulBeforeScenarioStep"); Step afterStep = mockSuccessfulStep("SuccessfulAfterScenarioStep"); when(collector.collectBeforeOrAfterScenarioSteps( eq(asList(mySteps)), Matchers.<Meta>any(), eq(Stage.BEFORE), eq(ScenarioType.NORMAL))) .thenReturn(asList(beforeStep)); when(collector.collectBeforeOrAfterScenarioSteps( eq(asList(mySteps)), Matchers.<Meta>any(), eq(Stage.AFTER), eq(ScenarioType.NORMAL))) .thenReturn(asList(afterStep)); // When StoryRunner runner = new StoryRunner(); Configuration configuration = configurationWith(storyParser, storyLoader, reporter, collector, failureStrategy); configuration.storyControls().doSkipBeforeAndAfterScenarioStepsIfGivenStory(true); runner.run(configuration, asList(mySteps), story2); // Then verify(collector).collectScenarioSteps(asList(mySteps), scenario1, parameters); verify(collector).collectScenarioSteps(asList(mySteps), scenario2, parameters); InOrder inOrder = inOrder(beforeStep, successfulStep, anotherSuccessfulStep, afterStep); inOrder.verify(beforeStep).perform(null); inOrder.verify(successfulStep).perform(null); inOrder.verify(anotherSuccessfulStep).perform(null); inOrder.verify(afterStep).perform(null); }
@Test public void shouldRunGivenStoriesAtStoryAndScenarioLevel() throws Throwable { // Given GivenStories storyGivenStories = new GivenStories("/path/to/given/story1"); GivenStories scenarioGivenStories = new GivenStories("/path/to/given/story1"); Scenario scenario1 = new Scenario("scenario 1", asList("successfulStep")); Scenario scenario2 = new Scenario( "scenario 2", Meta.EMPTY, scenarioGivenStories, ExamplesTable.EMPTY, asList("anotherSuccessfulStep")); Story story1 = new Story(new Description("story 1"), Narrative.EMPTY, asList(scenario1)); Story story2 = new Story( "", new Description("story 2"), Meta.EMPTY, Narrative.EMPTY, storyGivenStories, asList(scenario2)); Step step = mock(Step.class); StepResult result = mock(StepResult.class); when(step.perform(null)).thenReturn(result); StoryParser storyParser = mock(StoryParser.class); StoryLoader storyLoader = mock(StoryLoader.class); StoryReporter reporter = mock(ConcurrentStoryReporter.class); StepCollector collector = mock(StepCollector.class); CandidateSteps mySteps = new Steps(); Step successfulStep = mockSuccessfulStep("successfulStep"); Step anotherSuccessfulStep = mockSuccessfulStep("anotherSuccessfulStep"); boolean givenStory = false; givenStoryWithNoBeforeOrAfterSteps(story1, givenStory, collector, mySteps); when(collector.collectScenarioSteps(asList(mySteps), scenario1, parameters)) .thenReturn(asList(successfulStep)); givenStoryWithNoBeforeOrAfterSteps(story2, givenStory, collector, mySteps); when(collector.collectScenarioSteps(asList(mySteps), scenario2, parameters)) .thenReturn(asList(anotherSuccessfulStep)); when(storyLoader.loadStoryAsText("/path/to/given/story1")).thenReturn("storyContent"); when(storyParser.parseStory("storyContent", "/path/to/given/story1")).thenReturn(story1); givenStoryWithNoBeforeOrAfterSteps(story1, givenStory, collector, mySteps); givenStoryWithNoBeforeOrAfterSteps(story2, givenStory, collector, mySteps); FailureStrategy failureStrategy = mock(FailureStrategy.class); // When StoryRunner runner = new StoryRunner(); Configuration configuration = configurationWith(storyParser, storyLoader, reporter, collector, failureStrategy); runner.run(configuration, asList(mySteps), story2); // Then InOrder inOrder = inOrder(reporter); inOrder.verify(reporter).beforeStory(story2, givenStory); inOrder.verify(reporter).givenStories(storyGivenStories); inOrder.verify(reporter).givenStories(scenarioGivenStories); inOrder.verify(reporter).successful("successfulStep"); inOrder.verify(reporter).successful("anotherSuccessfulStep"); inOrder.verify(reporter).afterStory(givenStory); verify(reporter, never()).beforeStory(story1, givenStory); }