package org.jbehave.examples.core.rest.steps; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; import java.util.Map; import org.jbehave.core.annotations.Given; import org.jbehave.core.annotations.Then; import org.jbehave.core.annotations.When; import org.jbehave.core.io.ResourceLoader; import org.jbehave.core.io.rest.RESTClient.Type; import org.jbehave.core.io.rest.Resource; import org.jbehave.core.io.rest.ResourceExporter; import org.jbehave.core.io.rest.ResourceIndexer; import org.jbehave.core.io.rest.ResourceUploader; import org.jbehave.core.io.rest.filesystem.ExportFromFilesystem; import org.jbehave.core.io.rest.redmine.IndexFromRedmine; import org.jbehave.core.io.rest.redmine.LoadFromRedmine; import org.jbehave.core.io.rest.redmine.UploadToRedmine; import org.jbehave.core.io.rest.xwiki.IndexFromXWiki; import org.jbehave.core.io.rest.xwiki.LoadFromXWiki; import org.jbehave.core.io.rest.xwiki.UploadToXWiki; public class RESTSteps { private String providerName; private Map<String, Resource> index; @Given("REST provider is $name") public void givenRESTProvider(String name) { this.providerName = name; } @When("index is retrieved from $uri") public void indexIsRetrieved(String uri) { ResourceIndexer indexer = resourceIndexer(); index = indexer.indexResources(uri); } @Then("the index is not empty") public void indexIsNotEmpty() { assertThat(index.isEmpty(), is(false)); } @When("story $name text contains '$text'") public void storyIsLoaded(String name, String text) { ResourceLoader loader = resourceLoader(); Resource resource = index.get(name); String asText = loader.loadResourceAsText(resource.getURI()); assertThat(asText, containsString(text)); } @When("stories in $sourcePath are exported to $rootURI") public void whenStoriesAreExported(String sourcePath, String rootURI) { ResourceExporter exporter = new ExportFromFilesystem(resourceIndexer(), resourceupLoader(), sourcePath, ".story", "", "**/*.story"); exporter.exportResources(rootURI); } @When("story $name is uploaded appending '$text'") public void storyIsUploaded(String name, String text) { ResourceUploader uploader = resourceupLoader(); Resource resource = index.get(name); resource.setContent(resource.getContent()+" "+text); uploader.uploadResource(resource); } private ResourceIndexer resourceIndexer() { if (providerName.equals("Redmine")) { return new IndexFromRedmine(); } else if (providerName.equals("XWiki")) { return new IndexFromXWiki(); } throw new RuntimeException("Provider not supported: " + providerName); } private ResourceLoader resourceLoader() { if (providerName.equals("Redmine")) { return new LoadFromRedmine(Type.JSON); } else if (providerName.equals("XWiki")) { return new LoadFromXWiki(Type.JSON); } throw new RuntimeException("Provider not supported: " + providerName); } private ResourceUploader resourceupLoader() { if (providerName.equals("Redmine")) { return new UploadToRedmine(Type.JSON, "jbehave", "jbehave"); } else if (providerName.equals("XWiki")) { return new UploadToXWiki(Type.XML, "jbehave", "jbehave"); } throw new RuntimeException("Provider not supported: " + providerName); } }