diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java index 0f2e64ca..225c9fa9 100755 --- a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java @@ -46,16 +46,20 @@ private Path getInputBaseDir(final Path sourceDir, final Config config) { @Override public boolean shouldRun(Path sourceDir, Config config) { - if (config.getOptionalValue(CodegenConfig.getSpecPropertyName(), String.class).isEmpty()) { - return false; + boolean specIsPresent = config.getOptionalValue(CodegenConfig.getSpecPropertyName(), String.class).isPresent(); + if (!specIsPresent) { + log.warn("The {} property is not present, the code generation will be ignored", + CodegenConfig.getSpecPropertyName()); } - Path path = getInputBaseDir(sourceDir, config); - return Files.isDirectory(path); + return specIsPresent; } @Override public boolean trigger(CodeGenContext context) throws CodeGenException { final Path openApiDir = getInputBaseDir(context.inputDir(), context.config()); + + validateOpenApiDir(context, openApiDir); + final Path outDir = context.outDir(); final ApicurioCodegenWrapper apicurioCodegenWrapper = new ApicurioCodegenWrapper( context.config(), outDir.toFile()); @@ -92,6 +96,19 @@ public boolean trigger(CodeGenContext context) throws CodeGenException { return true; } + private static void validateOpenApiDir(CodeGenContext context, Path openApiDir) throws CodeGenException { + if (!Files.exists(openApiDir)) { + throw new CodeGenException( + "The OpenAPI input base directory does not exist, please, create the directory on " + context.inputDir()); + } + + if (!Files.isDirectory(openApiDir)) { + throw new CodeGenException( + "The OpenAPI input base directory is not a directory, please, create the directory on " + + context.inputDir()); + } + } + private File convertToJSON(Path yamlPath) throws CodeGenException { try { ObjectMapper yamlReader = new ObjectMapper(new YAMLFactory()); diff --git a/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java b/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java index b642475d..25101698 100755 --- a/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java +++ b/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java @@ -9,6 +9,7 @@ import org.apache.commons.io.FileUtils; import org.eclipse.microprofile.config.Config; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -60,4 +61,14 @@ public void testInputDir() throws CodeGenException { Path.of("target/generated-test-sources/inputDir/io/petstore/PetResource.java"))); } + @Test + public void shouldGenerateAnErrorWhenInputDirIsNotExist() throws CodeGenException { + Config config = MockConfigUtils.getTestConfig("doesNotExistDir.application.properties"); + CodeGenContext codeGenContext = new CodeGenContext(null, Path.of(OUT_DIR, "inputDir"), WORK_DIR, + INPUT_DIR, false, config, true); + ApicurioOpenApiServerCodegen apicurioOpenApiServerCodegen = new ApicurioOpenApiServerCodegen(); + + Assertions.assertThrows(CodeGenException.class, () -> apicurioOpenApiServerCodegen.trigger(codeGenContext)); + } + } diff --git a/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties b/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties new file mode 100755 index 00000000..a0c722e6 --- /dev/null +++ b/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties @@ -0,0 +1,2 @@ +quarkus.openapi.generator.spec=petstore-openapi-2.json +quarkus.openapi.generator.base-package=io.petstore \ No newline at end of file