From 997a17f923a9e4c5059cc644ba6c27d19bb7050b Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 26 Jul 2016 14:10:09 +0100 Subject: [PATCH] Move restdocs stuff into its own package --- .../main/asciidoc/spring-cloud-wiremock.adoc | 26 +++++++++++++++++++ .../com/example/fraud/StubGeneratorTests.java | 2 +- .../wiremock/WireMockApplicationListener.java | 16 ++++++++---- .../ContractRequestHandler.java | 2 +- .../{ => restdocs}/RestDocsContracts.java | 2 +- .../WireMockRestDocsConfiguration.java | 2 +- .../{ => restdocs}/WireMockSnippet.java | 2 +- .../main/resources/META-INF/spring.factories | 2 +- 8 files changed, 43 insertions(+), 11 deletions(-) rename spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/{ => restdocs}/ContractRequestHandler.java (98%) rename spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/{ => restdocs}/RestDocsContracts.java (92%) rename spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/{ => restdocs}/WireMockRestDocsConfiguration.java (94%) rename spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/{ => restdocs}/WireMockSnippet.java (98%) diff --git a/docs/src/main/asciidoc/spring-cloud-wiremock.adoc b/docs/src/main/asciidoc/spring-cloud-wiremock.adoc index 3fb76a03b6..0d67c801ee 100644 --- a/docs/src/main/asciidoc/spring-cloud-wiremock.adoc +++ b/docs/src/main/asciidoc/spring-cloud-wiremock.adoc @@ -23,6 +23,32 @@ include::{doc_samples}/src/test/java/com/example/WiremockForDocsTests.java[tags= To start the stub server on a different port use `@AutoConfigureWireMock(port=9999)` (for example), and for a random port use the value 0. The stub server port will be bindable in the test application context as "wiremock.server.port". Using `@AutoConfigureWireMock` adds a bean of type `WiremockConfiguration` to your test application context, where it will be cached in between methods and classes having the same context, just like for normal Spring integration tests. +=== Registering Stubs Automatically + +If you add a `stubs` attribute to your `@AutoConfigureWireMock` then +it will register WireMock JSON stubs from the file system or +classpath. The stubs attribute can be a resource pattern (ant-style) +or a directory, in which case `**/*.json` is appended. Example: + +---- +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureWireMock(stubs="classpath:/stubs") +public class WiremockImportApplicationTests { + + @Autowired + private Service service; + + @Test + public void contextLoads() throws Exception { + assertThat(this.service.go()).isEqualTo("Hello World!"); + } + +} +---- + +=== Alternative: Using JUnit Rules + For a more conventional WireMock experience, using JUnit `@Rules` to start and stop the server, just use the `WireMockSpring` convenience class to obtain an `Options` instance: diff --git a/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java b/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java index e4b92cca5a..a7fab3ff87 100644 --- a/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java +++ b/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java @@ -1,6 +1,6 @@ package com.example.fraud; -import static org.springframework.cloud.contract.wiremock.RestDocsContracts.verify; +import static org.springframework.cloud.contract.wiremock.restdocs.RestDocsContracts.verify; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import java.math.BigDecimal; diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockApplicationListener.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockApplicationListener.java index 43bff5ef69..565ff0b0d4 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockApplicationListener.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockApplicationListener.java @@ -29,11 +29,15 @@ import org.springframework.core.env.MutablePropertySources; import org.springframework.util.SocketUtils; /** + * Listener that prepares the environment so that WireMock will work when it is + * initialized. For example, by finding free ports for the server to listen on. + * * @author Dave Syer * */ @Order(Ordered.LOWEST_PRECEDENCE) -public class WireMockApplicationListener implements ApplicationListener { +public class WireMockApplicationListener + implements ApplicationListener { @Override public void onApplicationEvent(ApplicationPreparedEvent event) { @@ -49,9 +53,11 @@ public class WireMockApplicationListener implements ApplicationListener source = ((MapPropertySource) propertySources .get("wiremock")).getSource(); - source.put("wiremock.server.port", SocketUtils.findAvailableTcpPort(10000, 12500)); + source.put("wiremock.server.port", + SocketUtils.findAvailableTcpPort(10000, 12500)); } - if (environment.getProperty("wiremock.server.https-port", Integer.class, 0) == 0) { + if (environment.getProperty("wiremock.server.https-port", Integer.class, + 0) == 0) { MutablePropertySources propertySources = environment.getPropertySources(); if (!propertySources.contains("wiremock")) { propertySources.addFirst( @@ -59,9 +65,9 @@ public class WireMockApplicationListener implements ApplicationListener source = ((MapPropertySource) propertySources .get("wiremock")).getSource(); - source.put("wiremock.server.https-port", SocketUtils.findAvailableTcpPort(12500, 15000)); + source.put("wiremock.server.https-port", + SocketUtils.findAvailableTcpPort(12500, 15000)); } } - } diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/ContractRequestHandler.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractRequestHandler.java similarity index 98% rename from spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/ContractRequestHandler.java rename to spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractRequestHandler.java index 0b3cdc221d..fe63572c4c 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/ContractRequestHandler.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractRequestHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.contract.wiremock; +package org.springframework.cloud.contract.wiremock.restdocs; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/RestDocsContracts.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/RestDocsContracts.java similarity index 92% rename from spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/RestDocsContracts.java rename to spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/RestDocsContracts.java index 017d71a8ab..68d744a58c 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/RestDocsContracts.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/RestDocsContracts.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.contract.wiremock; +package org.springframework.cloud.contract.wiremock.restdocs; /** * @author Dave Syer diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestDocsConfiguration.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestDocsConfiguration.java similarity index 94% rename from spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestDocsConfiguration.java rename to spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestDocsConfiguration.java index b21bbcca83..51b419295b 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestDocsConfiguration.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockRestDocsConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.contract.wiremock; +package org.springframework.cloud.contract.wiremock.restdocs; import org.springframework.boot.test.autoconfigure.restdocs.RestDocsMockMvcConfigurationCustomizer; import org.springframework.context.annotation.Configuration; diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockSnippet.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java similarity index 98% rename from spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockSnippet.java rename to spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java index eede0fbd91..cde6896f40 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockSnippet.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/WireMockSnippet.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.contract.wiremock; +package org.springframework.cloud.contract.wiremock.restdocs; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.delete; diff --git a/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories index 331ad00862..6c450975aa 100644 --- a/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories @@ -4,4 +4,4 @@ org.springframework.cloud.contract.wiremock.WireMockApplicationListener # RestDocs Auto Configuration org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs=\ -org.springframework.cloud.contract.wiremock.WireMockRestDocsConfiguration \ No newline at end of file +org.springframework.cloud.contract.wiremock.restdocs.WireMockRestDocsConfiguration \ No newline at end of file