package org.mule.modules.jbehave; import de.codecentric.jbehave.junit.monitoring.JUnitReportingRunner; import org.jbehave.core.configuration.Configuration; import org.jbehave.core.configuration.MostUsefulConfiguration; import org.jbehave.core.embedder.EmbedderControls; import org.jbehave.core.io.CodeLocations; import org.jbehave.core.io.LoadFromClasspath; import org.jbehave.core.io.StoryFinder; import org.jbehave.core.junit.JUnitStories; import org.jbehave.core.reporters.Format; import org.jbehave.core.reporters.StoryReporterBuilder; import org.jbehave.core.steps.InjectableStepsFactory; import org.jbehave.core.steps.InstanceStepsFactory; import org.junit.runner.RunWith; import org.mule.modules.stubs.FakeCustomer; import java.util.List; /** * Configures the JBehave ecosystem to run stories */ @RunWith(JUnitReportingRunner.class) public class JBehaveStories extends JUnitStories { private static final String STORIES = "**/*.story"; private static final Integer TEN_MINUTES_AS_SECONDS = 600; public JBehaveStories() { super(); // TODO: review how this works internally - sporcina (Oct.13,2013) EmbedderControls embedderControls = configuredEmbedder().embedderControls(); embedderControls.useStoryTimeoutInSecs(TEN_MINUTES_AS_SECONDS); } @Override public InjectableStepsFactory stepsFactory() { FakeCustomer fakeCustomer = new FakeCustomer(); return new InstanceStepsFactory( configuration(), new TableSteps(), new DocumentSteps(fakeCustomer), new BeforeAndAfterScenarios(fakeCustomer) ); } @Override public Configuration configuration() { return new MostUsefulConfiguration() .useStoryLoader(new LoadFromClasspath(this.getClass())) .useStoryReporterBuilder(new StoryReporterBuilder() .withFormats(Format.XML, Format.IDE_CONSOLE, Format.CONSOLE, Format.HTML, Format.TXT)); } @Override protected List<String> storyPaths() { return new StoryFinder().findPaths(CodeLocations.codeLocationFromClass(this.getClass()), STORIES, ""); } }