diff --git a/spring-cloud-contract-dependencies/pom.xml b/spring-cloud-contract-dependencies/pom.xml
index 7c1b3107b2..f652fda653 100644
--- a/spring-cloud-contract-dependencies/pom.xml
+++ b/spring-cloud-contract-dependencies/pom.xml
@@ -14,7 +14,7 @@
BasicMappingBuilder withPostServeAction(String extensionName, + P parameters) { + Parameters params = parameters instanceof Parameters ? + (Parameters) parameters : + Parameters.of(parameters); + this.postServeActions.put(extensionName, params); + return this; + } + + @Override public StubMapping build() { + if (this.scenarioName == null && (this.requiredScenarioState != null + || this.newScenarioState != null)) { + throw new IllegalStateException( + "Scenario name must be specified to require or set a new scenario state"); + } + RequestPattern requestPattern = this.requestPatternBuilder.build(); + ResponseDefinition response = (this.responseDefBuilder != null ? + this.responseDefBuilder : + aResponse()).build(); + StubMapping mapping = new StubMapping(requestPattern, response); + mapping.setPriority(this.priority); + mapping.setScenarioName(this.scenarioName); + mapping.setRequiredScenarioState(this.requiredScenarioState); + mapping.setNewScenarioState(this.newScenarioState); + mapping.setUuid(this.id); + mapping.setName(this.name); + mapping.setPersistent(this.isPersistent); + mapping.setPostServeActions( + this.postServeActions.isEmpty() ? null : this.postServeActions); + return mapping; + } + +} diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractRequestHandler.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractRequestHandler.java index e2c88734f5..c6f312eb71 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractRequestHandler.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractRequestHandler.java @@ -32,7 +32,7 @@ import org.springframework.util.ObjectUtils; import org.springframework.util.StreamUtils; import org.springframework.util.StringUtils; -import com.github.tomakehurst.wiremock.client.RemoteMappingBuilder; +import com.github.tomakehurst.wiremock.client.MappingBuilder; import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; import com.github.tomakehurst.wiremock.matching.MatchResult; import com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter; @@ -49,7 +49,7 @@ public class ContractRequestHandler implements ResultHandler { private MediaType contentType; private String name; - private RemoteMappingBuilder, ?> builder; + private MappingBuilder builder; public ContractRequestHandler() { } @@ -117,7 +117,7 @@ public class ContractRequestHandler implements ResultHandler { return map; } - public ContractRequestHandler wiremock(RemoteMappingBuilder, ?> builder) { + public ContractRequestHandler wiremock(MappingBuilder builder) { this.builder = builder; return this; } diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java index f509eb7830..b3369abdac 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java @@ -32,7 +32,7 @@ import org.springframework.restdocs.RestDocumentationContext; import org.springframework.restdocs.operation.Operation; import org.springframework.restdocs.snippet.Snippet; -import com.github.tomakehurst.wiremock.client.RemoteMappingBuilder; +import com.github.tomakehurst.wiremock.client.MappingBuilder; import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder; import com.github.tomakehurst.wiremock.common.Json; import com.github.tomakehurst.wiremock.http.HttpHeader; @@ -112,11 +112,11 @@ public class WireMockSnippet implements Snippet { .withStatus(operation.getResponse().getStatus().value()); } - private RemoteMappingBuilder, ?> request(Operation operation) { + private MappingBuilder request(Operation operation) { return requestHeaders(requestBuilder(operation), operation); } - private RemoteMappingBuilder, ?> requestHeaders(RemoteMappingBuilder, ?> request, + private MappingBuilder requestHeaders(MappingBuilder request, Operation operation) { org.springframework.http.HttpHeaders headers = operation.getRequest() .getHeaders(); @@ -136,7 +136,7 @@ public class WireMockSnippet implements Snippet { return request; } - private RemoteMappingBuilder, ?> requestBuilder(Operation operation) { + private MappingBuilder requestBuilder(Operation operation) { switch (operation.getRequest().getMethod()) { case DELETE: return delete(requestPattern(operation)); @@ -151,7 +151,7 @@ public class WireMockSnippet implements Snippet { } } - private RemoteMappingBuilder, ?> bodyPattern(RemoteMappingBuilder, ?> builder, + private MappingBuilder bodyPattern(MappingBuilder builder, String content) { if (this.jsonPaths != null) { for (String jsonPath : this.jsonPaths) { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WireMockStubMappingTest.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WireMockStubMappingTest.java new file mode 100644 index 0000000000..03f9cb4b1b --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WireMockStubMappingTest.java @@ -0,0 +1,24 @@ +package org.springframework.cloud.contract.wiremock; + +import org.json.JSONException; +import org.junit.Test; + +/** + * @author Marcin Grzejszczak + */ +public class WireMockStubMappingTest { + private static final String stub_2_1_7 = "{\"request\" : { \"method\" : \"GET\" }, \"response\" : { \"status\" : 200 }}"; + private static final String stub_2_5_1 = "{\"id\" : \"77514bd4-a102-4478-a3c0-0fda8b905591\", \"request\" : { \"method\" : \"GET\" }, \"response\" : { \"status\" : 200 }, \"uuid\" : \"77514bd4-a102-4478-a3c0-0fda8b905591\"}"; + + @Test + public void should_successfully_parse_a_WireMock_2_1_7_stub() throws JSONException { + // when: + WireMockStubMapping.buildFrom(stub_2_1_7); + } + + @Test + public void should_successfully_parse_a_WireMock_2_5_1_stub() throws JSONException { + // when: + WireMockStubMapping.buildFrom(stub_2_5_1); + } +} \ No newline at end of file diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java index 2174ead066..47e1822c0c 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippetTests.java @@ -15,6 +15,7 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.cloud.contract.wiremock.WireMockStubMapping; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -48,12 +49,6 @@ public class WireMockSnippetTests { @Before public void setup() throws IOException { this.outputFolder = this.tmp.newFolder(); - } - - @Test - public void should_maintain_the_response_status_when_generating_stub() - throws Exception { - WireMockSnippet snippet = new WireMockSnippet(); RestDocumentationContext context = new RestDocumentationContext(this.getClass(), "method", this.outputFolder); given(this.operation.getName()).willReturn("foo"); @@ -62,12 +57,18 @@ public class WireMockSnippetTests { .get(RestDocumentationContext.class.getName())).willReturn(context); given(this.operation.getRequest()).willReturn(request()); given(this.operation.getResponse()).willReturn(response()); + } + + @Test + public void should_maintain_the_response_status_when_generating_stub() + throws Exception { + WireMockSnippet snippet = new WireMockSnippet(); snippet.document(this.operation); File stub = new File(this.outputFolder, "stubs/foo.json"); assertThat(stub).exists(); - StubMapping stubMapping = StubMapping + StubMapping stubMapping = WireMockStubMapping .buildFrom(new String(Files.readAllBytes(stub.toPath()))); assertThat(stubMapping.getResponse().getStatus()) .isEqualTo(HttpStatus.ACCEPTED.value()); @@ -77,20 +78,13 @@ public class WireMockSnippetTests { public void should_use_equal_to_json_pattern_for_body_when_request_content_type_is_json_when_generating_stub() throws Exception { WireMockSnippet snippet = new WireMockSnippet(); - RestDocumentationContext context = new RestDocumentationContext(this.getClass(), - "method", this.outputFolder); - given(this.operation.getName()).willReturn("foo"); - given(this.operation.getAttributes().get(anyString())).willReturn(null); - given(this.operation.getAttributes() - .get(RestDocumentationContext.class.getName())).willReturn(context); given(this.operation.getRequest()).willReturn(requestPostWithJsonContentType()); - given(this.operation.getResponse()).willReturn(response()); snippet.document(this.operation); File stub = new File(this.outputFolder, "stubs/foo.json"); assertThat(stub).exists(); - StubMapping stubMapping = StubMapping + StubMapping stubMapping = WireMockStubMapping .buildFrom(new String(Files.readAllBytes(stub.toPath()))); assertThat(stubMapping.getRequest().getBodyPatterns().get(0)) .isInstanceOf(EqualToJsonPattern.class);