package uk.co.acuminous.julez.scenario; import static org.jbehave.core.io.CodeLocations.codeLocationFromClass; import static org.junit.Assert.assertEquals; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import uk.co.acuminous.julez.event.Event; import uk.co.acuminous.julez.test.TestEventRepository; public class JBehaveEmbedderScenarioTest { private List<String> stepRecorder; private URL scenarioLocation; private TestEventRepository repository; @Before public void init() { stepRecorder = new ArrayList<String>(); repository = new TestEventRepository(); scenarioLocation = codeLocationFromClass(this.getClass()); } @Test public void runsJBehaveScenario() { getEmbedderScenario("jbehave-scenario-performs-steps.txt").run(); assertEquals(3, stepRecorder.size()); assertEquals("given", stepRecorder.get(0)); assertEquals("when", stepRecorder.get(1)); assertEquals("then", stepRecorder.get(2)); } @Test public void raisesPassEventOnSuccess() { getEmbedderScenario("jbehave-scenario-performs-steps.txt").register(repository).run(); assertEquals(3, repository.count()); assertEquals(ScenarioEvent.BEGIN, repository.get(0).getType()); assertEquals(ScenarioEvent.PASS, repository.get(1).getType()); assertEquals(ScenarioEvent.END, repository.get(2).getType()); } @Test public void raisesErrorEventOnStoryNotFound() { getEmbedderScenario("does-not-exist.txt").register(repository).run(); assertEquals(3, repository.count()); assertEquals(ScenarioEvent.BEGIN, repository.first().getType()); Event event = repository.get(1); assertEquals(ScenarioEvent.ERROR, event.getType()); assertEquals("Cannot find story for does-not-exist.txt", event.getData().get("message")); assertEquals(ScenarioEvent.END, repository.last().getType()); } @Test public void raisesErrorEventOnStepNotFound() { getEmbedderScenario("jbehave-scenario-handles-missing-steps.txt").register(repository).run(); assertEquals(3, repository.count()); assertEquals(ScenarioEvent.BEGIN, repository.first().getType()); Event event = repository.get(1); assertEquals(ScenarioEvent.ERROR, event.getType()); assertEquals("Given the step does not exist", event.getData().get("message")); assertEquals(ScenarioEvent.END, repository.last().getType()); } @Test public void raisesFailureEventWhenStepFails() { getEmbedderScenario("jbehave-scenario-handles-failures.txt").register(repository).run(); assertEquals(3, repository.count()); assertEquals(ScenarioEvent.BEGIN, repository.first().getType()); Event event = repository.get(1); assertEquals(ScenarioEvent.FAIL, event.getType()); assertEquals("Assertion Failed", event.getData().get("message")); assertEquals(ScenarioEvent.END, repository.last().getType()); } @Test public void raisesErrorEventWhenStepThrowsAnException() { getEmbedderScenario("jbehave-scenario-handles-errors.txt").register(repository).run(); assertEquals(3, repository.count()); assertEquals(ScenarioEvent.BEGIN, repository.first().getType()); Event event = repository.get(1); assertEquals(ScenarioEvent.ERROR, event.getType()); assertEquals("Test Exception", event.getData().get("message")); assertEquals(ScenarioEvent.END, repository.last().getType()); } private JBehaveEmbedderScenario getEmbedderScenario(String story) { return new JBehaveEmbedderScenario(scenarioLocation, story, new ScenarioSteps(stepRecorder)); } }