From f5f6d325bb8c91b568ae9697350203a59212ecbf Mon Sep 17 00:00:00 2001 From: Matheus Oliveira da Silva Date: Tue, 17 Jun 2025 10:32:11 -0300 Subject: [PATCH] Fix: Implement file watching for OpenAPI files in development mode --- .../generator/MoquProjectProcessor.java | 11 ++++++++++ .../generator/MoquProjectProcessorTest.java | 21 ++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquProjectProcessor.java b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquProjectProcessor.java index 94ed8ff79..981c2520b 100644 --- a/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquProjectProcessor.java +++ b/moqu/deployment/src/main/java/io/quarkiverse/openapi/generator/MoquProjectProcessor.java @@ -20,6 +20,7 @@ import io.quarkus.deployment.IsDevelopment; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem; import io.quarkus.runtime.util.ClassPathUtils; public class MoquProjectProcessor { @@ -68,6 +69,16 @@ MoquProjectBuildItem generate(MoquConfig config) { } } + @BuildStep(onlyIf = { IsDevelopment.class }) + void watchOpenApiFiles(MoquConfig config, BuildProducer watchedPaths) + throws IOException { + ClassPathUtils.consumeAsPaths(config.resourceDir(), path -> { + if (Files.exists(path)) { + watchedPaths.produce(new HotDeploymentWatchedFileBuildItem(path.toString(), Files.isDirectory(path))); + } + }); + } + @BuildStep(onlyIf = { IsDevelopment.class }) void consume(Optional moquProject, BuildProducer moquMocks) { diff --git a/moqu/deployment/src/test/java/io/quarkiverse/openapi/generator/MoquProjectProcessorTest.java b/moqu/deployment/src/test/java/io/quarkiverse/openapi/generator/MoquProjectProcessorTest.java index 76347c237..cfe43ba71 100644 --- a/moqu/deployment/src/test/java/io/quarkiverse/openapi/generator/MoquProjectProcessorTest.java +++ b/moqu/deployment/src/test/java/io/quarkiverse/openapi/generator/MoquProjectProcessorTest.java @@ -9,6 +9,8 @@ public class MoquProjectProcessorTest { + private static final String WIREMOCK_MAPPINGS_JSON_PATH = "/q/moqu/json/api/wiremock-mappings.json"; + @RegisterExtension static final QuarkusDevModeTest unitTest = new QuarkusDevModeTest() .withApplicationRoot(javaArchive -> javaArchive @@ -38,10 +40,27 @@ void testModeAsDownload() { @Test void testModeAsDownloadUsingJson() { RestAssured.given() - .when().get("/q/moqu/json/api/wiremock-mappings.json") + .when().get(WIREMOCK_MAPPINGS_JSON_PATH) .then() .statusCode(200) .body(Matchers.containsString("Alice")) .log().ifError(); } + + @Test + void testDevModeWatchOpenApiFiles() { + RestAssured.given() + .when().get(WIREMOCK_MAPPINGS_JSON_PATH) + .then() + .statusCode(200) + .body(Matchers.containsString("80")); + + unitTest.modifyResourceFile("openapi/api.json", (content) -> content.replace("80", "77")); + + RestAssured.given() + .when().get(WIREMOCK_MAPPINGS_JSON_PATH) + .then() + .statusCode(200) + .body(Matchers.containsString("77")); + } }