From 4326caafdc916086d357289be5690be57efdeef4 Mon Sep 17 00:00:00 2001 From: Willem Jan Glerum Date: Wed, 18 Oct 2023 17:16:48 +0200 Subject: [PATCH] feat: enable global response templating --- .../devservice/WireMockServerConfig.java | 8 +++++ .../devservice/WireMockServerProcessor.java | 8 +++-- .../devservice/WireMockBasicTest.java | 6 ++++ .../devservice/WireMockTemplatingTest.java | 31 +++++++++++++++++++ .../application-templating.properties | 1 + .../src/test/resources/mappings/template.json | 10 ++++++ .../ROOT/pages/includes/quarkus-wiremock.adoc | 18 ++++++++++- docs/modules/ROOT/pages/index.adoc | 3 +- 8 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 deployment/src/test/java/io/quarkiverse/wiremock/devservice/WireMockTemplatingTest.java create mode 100644 deployment/src/test/resources/application-templating.properties create mode 100644 deployment/src/test/resources/mappings/template.json diff --git a/deployment/src/main/java/io/quarkiverse/wiremock/devservice/WireMockServerConfig.java b/deployment/src/main/java/io/quarkiverse/wiremock/devservice/WireMockServerConfig.java index 008833a..7323894 100644 --- a/deployment/src/main/java/io/quarkiverse/wiremock/devservice/WireMockServerConfig.java +++ b/deployment/src/main/java/io/quarkiverse/wiremock/devservice/WireMockServerConfig.java @@ -40,4 +40,12 @@ public interface WireMockServerConfig { */ @WithDefault("src/test/resources") String filesMapping(); + + /** + * If global response templating should be enabled for WireMock + * + * @see https://wiremock.org/3.x/docs/response-templating/ + */ + @WithDefault("false") + boolean globalResponseTemplating(); } diff --git a/deployment/src/main/java/io/quarkiverse/wiremock/devservice/WireMockServerProcessor.java b/deployment/src/main/java/io/quarkiverse/wiremock/devservice/WireMockServerProcessor.java index 0901219..c9ef5c3 100644 --- a/deployment/src/main/java/io/quarkiverse/wiremock/devservice/WireMockServerProcessor.java +++ b/deployment/src/main/java/io/quarkiverse/wiremock/devservice/WireMockServerProcessor.java @@ -10,6 +10,7 @@ import org.jboss.logging.Logger; import com.github.tomakehurst.wiremock.WireMockServer; +import com.github.tomakehurst.wiremock.core.WireMockConfiguration; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.CuratedApplicationShutdownBuildItem; @@ -54,8 +55,11 @@ DevServicesResultBuildItem setup(LaunchModeBuildItem launchMode, LiveReloadBuild private static RunningDevService startWireMockDevService(WireMockServerConfig config) { LOGGER.debugf("Starting WireMock server with port [%s] and path [%s]", config.port(), config.filesMapping()); - final WireMockServer server = new WireMockServer( - options().port(config.port()).usingFilesUnderDirectory(config.filesMapping())); + final WireMockConfiguration configuration = options() + .port(config.port()) + .usingFilesUnderDirectory(config.filesMapping()) + .globalTemplating(config.globalResponseTemplating()); + final WireMockServer server = new WireMockServer(configuration); server.start(); return new RunningDevService(config.serviceName(), null, server::shutdown, getPropertyKey(PORT), diff --git a/deployment/src/test/java/io/quarkiverse/wiremock/devservice/WireMockBasicTest.java b/deployment/src/test/java/io/quarkiverse/wiremock/devservice/WireMockBasicTest.java index 03f1bc4..ef2d8fd 100644 --- a/deployment/src/test/java/io/quarkiverse/wiremock/devservice/WireMockBasicTest.java +++ b/deployment/src/test/java/io/quarkiverse/wiremock/devservice/WireMockBasicTest.java @@ -28,4 +28,10 @@ void testWireMockMappingsFolder() { .body(is("Everything was just fine!")); } + @Test + void testTemplatingDisabled() { + final int port = ConfigProvider.getConfig().getValue(PREFIX + "." + PORT, Integer.class); + RestAssured.when().get(String.format("http://localhost:%d/template", port)).then().statusCode(Response.SC_OK) + .body(is("Everything was just fine from {{ request.port }}!")); + } } diff --git a/deployment/src/test/java/io/quarkiverse/wiremock/devservice/WireMockTemplatingTest.java b/deployment/src/test/java/io/quarkiverse/wiremock/devservice/WireMockTemplatingTest.java new file mode 100644 index 0000000..865cd9b --- /dev/null +++ b/deployment/src/test/java/io/quarkiverse/wiremock/devservice/WireMockTemplatingTest.java @@ -0,0 +1,31 @@ +package io.quarkiverse.wiremock.devservice; + +import static io.quarkiverse.wiremock.devservice.WireMockDevServiceConfig.PORT; +import static io.quarkiverse.wiremock.devservice.WireMockDevServiceConfig.PREFIX; +import static org.hamcrest.Matchers.is; + +import org.eclipse.jetty.server.Response; +import org.eclipse.microprofile.config.ConfigProvider; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusUnitTest; +import io.restassured.RestAssured; + +class WireMockTemplatingTest { + + private static final String APP_PROPERTIES = "application-templating.properties"; + + @RegisterExtension + static final QuarkusUnitTest UNIT_TEST = new QuarkusUnitTest().withConfigurationResource(APP_PROPERTIES) + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)); + + @Test + void testTemplatingEnabled() { + final int port = ConfigProvider.getConfig().getValue(PREFIX + "." + PORT, Integer.class); + RestAssured.when().get(String.format("http://localhost:%d/template", port)).then().statusCode(Response.SC_OK) + .body(is(String.format("Everything was just fine from %d!", port))); + } +} diff --git a/deployment/src/test/resources/application-templating.properties b/deployment/src/test/resources/application-templating.properties new file mode 100644 index 0000000..28331d2 --- /dev/null +++ b/deployment/src/test/resources/application-templating.properties @@ -0,0 +1 @@ +%test.quarkus.wiremock.devservices.global-response-templating=true diff --git a/deployment/src/test/resources/mappings/template.json b/deployment/src/test/resources/mappings/template.json new file mode 100644 index 0000000..ec3ca0c --- /dev/null +++ b/deployment/src/test/resources/mappings/template.json @@ -0,0 +1,10 @@ +{ + "request": { + "method": "GET", + "url": "/template" + }, + "response": { + "status": 200, + "body": "Everything was just fine from {{ request.port }}!" + } +} diff --git a/docs/modules/ROOT/pages/includes/quarkus-wiremock.adoc b/docs/modules/ROOT/pages/includes/quarkus-wiremock.adoc index 735de0d..1a5d828 100644 --- a/docs/modules/ROOT/pages/includes/quarkus-wiremock.adoc +++ b/docs/modules/ROOT/pages/includes/quarkus-wiremock.adoc @@ -86,5 +86,21 @@ endif::add-copy-button-to-env-var[] --|string |`src/test/resources` +a|icon:lock[title=Fixed at build time] [[quarkus-wiremock_quarkus.wiremock.devservices.global-response-templating]]`link:#quarkus-wiremock_quarkus.wiremock.devservices.global-response-templating[quarkus.wiremock.devservices.global-response-templating]` -|=== \ No newline at end of file +[.description] +-- +Response templating is enabled by default in WireMock 3, +with this setting response templating can be enabled globally, +see https://wiremock.org/3.x/docs/response-templating/[https://wiremock.org/3.x/docs/response-templating/] + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_WIREMOCK_DEVSERVICES_GLOBAL_RESPONSE_TEMPLATING+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_WIREMOCK_DEVSERVICES_GLOBAL_RESPONSE_TEMPLATING+++` +endif::add-copy-button-to-env-var[] +--|boolean +|`false` + +|=== diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc index 9bfbca7..da2061f 100644 --- a/docs/modules/ROOT/pages/index.adoc +++ b/docs/modules/ROOT/pages/index.adoc @@ -32,6 +32,7 @@ Example (default) configuration for testing and local development: %dev,test.quarkus.wiremock.devservices.files-mapping=src/test/resources %dev,test.quarkus.wiremock.devservices.port=8089 %dev,test.quarkus.wiremock.devservices.service-name=wiremock-server +%dev,test.quarkus.wiremock.devservices.global-response-templating=false ---- == Testing @@ -83,4 +84,4 @@ public class WireMockDevServiceResourceIT extends WireMockDevServiceResourceTest [[extension-configuration-reference]] == Extension Configuration Reference -include::includes/quarkus-wiremock.adoc[leveloffset=+1, opts=optional] \ No newline at end of file +include::includes/quarkus-wiremock.adoc[leveloffset=+1, opts=optional]