From f8ffec25a4d3d2a4e2c5ba77a08bd586b3cd4596 Mon Sep 17 00:00:00 2001 From: Tomas Bjerre Date: Mon, 29 Apr 2024 16:37:59 +0200 Subject: [PATCH] feat: enable mappings outside classpath (refs #35) --- .../test/java/app/StubsInDirectoryTests.java | 32 +++++++++++++++++++ .../user-client/mappings/get-users.json | 13 ++++++++ .../wiremock/spring/ConfigureWireMock.java | 7 ++++ .../spring/WireMockContextCustomizer.java | 8 ++++- 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 example/src/test/java/app/StubsInDirectoryTests.java create mode 100644 example/src/test/wiremock-mappings/user-client/mappings/get-users.json diff --git a/example/src/test/java/app/StubsInDirectoryTests.java b/example/src/test/java/app/StubsInDirectoryTests.java new file mode 100644 index 0000000..569bca6 --- /dev/null +++ b/example/src/test/java/app/StubsInDirectoryTests.java @@ -0,0 +1,32 @@ +package app; + +import com.github.tomakehurst.wiremock.WireMockServer; +import com.maciejwalkowiak.wiremock.spring.ConfigureWireMock; +import com.maciejwalkowiak.wiremock.spring.EnableWireMock; +import com.maciejwalkowiak.wiremock.spring.InjectWireMock; +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; + +@SpringBootTest +@EnableWireMock({ + @ConfigureWireMock(name = "user-client", property = "user-client.url", stubLocation = "src/test/wiremock-mappings/user-client", stubLocationOnClasspath = false) +}) +class StubsInDirectoryTests { + + @Autowired + private UserClient userClient; + + @InjectWireMock("user-client") + private WireMockServer wiremock; + + @Test + void usesStubFiles() { + User user = userClient.findOne(1L); + assertThat(user).isNotNull(); + } + +} diff --git a/example/src/test/wiremock-mappings/user-client/mappings/get-users.json b/example/src/test/wiremock-mappings/user-client/mappings/get-users.json new file mode 100644 index 0000000..ed2d3ab --- /dev/null +++ b/example/src/test/wiremock-mappings/user-client/mappings/get-users.json @@ -0,0 +1,13 @@ +{ + "request": { + "method": "GET", + "url": "/1" + }, + "response": { + "status": 200, + "jsonBody": { "id": 1, "name": "Jenna" }, + "headers": { + "Content-Type": "application/json" + } + } +} diff --git a/wiremock-spring-boot/src/main/java/com/maciejwalkowiak/wiremock/spring/ConfigureWireMock.java b/wiremock-spring-boot/src/main/java/com/maciejwalkowiak/wiremock/spring/ConfigureWireMock.java index 723d38b..74cd859 100644 --- a/wiremock-spring-boot/src/main/java/com/maciejwalkowiak/wiremock/spring/ConfigureWireMock.java +++ b/wiremock-spring-boot/src/main/java/com/maciejwalkowiak/wiremock/spring/ConfigureWireMock.java @@ -45,6 +45,13 @@ */ String stubLocation() default ""; + /** + * Allows user to specify if the mappings should be loaded from classpath or a directory. The location is specified with {@link #stubLocation()}. + * + * @return true if stubLocation points to classpath directory, else it is an ordinary directory + */ + boolean stubLocationOnClasspath() default true; + /** * WireMock extensions to register in {@link WireMockServer}. * diff --git a/wiremock-spring-boot/src/main/java/com/maciejwalkowiak/wiremock/spring/WireMockContextCustomizer.java b/wiremock-spring-boot/src/main/java/com/maciejwalkowiak/wiremock/spring/WireMockContextCustomizer.java index 94ddcb2..9633ef4 100644 --- a/wiremock-spring-boot/src/main/java/com/maciejwalkowiak/wiremock/spring/WireMockContextCustomizer.java +++ b/wiremock-spring-boot/src/main/java/com/maciejwalkowiak/wiremock/spring/WireMockContextCustomizer.java @@ -62,9 +62,15 @@ private void resolveOrCreateWireMockServer(ConfigurableApplicationContext contex if (wireMockServer == null) { // create & start wiremock server WireMockConfiguration serverOptions = options() - .usingFilesUnderClasspath(resolveStubLocation(options)) .port(options.port()) .notifier(new Slf4jNotifier(true)); + if (options.stubLocationOnClasspath()) { + serverOptions + .usingFilesUnderClasspath(resolveStubLocation(options)); + } else { + serverOptions + .usingFilesUnderDirectory(options.stubLocation()); + } if (options.extensions().length > 0) { serverOptions.extensions(options.extensions());