From 76550de49d3eec9f8857bb0d193eb4e7b40229eb Mon Sep 17 00:00:00 2001 From: Daniel Hoffmann <hoffmann.daniel.1993@gmail.com> Date: Tue, 18 Oct 2022 12:07:42 +0200 Subject: [PATCH 1/2] #13726 Introduce new remoteInputSpec parameter --- .../gradle/plugin/OpenApiGeneratorPlugin.kt | 1 + .../OpenApiGeneratorGenerateExtension.kt | 2 + .../gradle/plugin/tasks/GenerateTask.kt | 9 +++ .../src/test/kotlin/GenerateTaskDslTest.kt | 60 +++++++++++++++++++ 4 files changed, 72 insertions(+) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt index 03cff61a002..19c9a7c4b91 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt @@ -97,6 +97,7 @@ class OpenApiGeneratorPlugin : Plugin<Project> { generatorName.set(generate.generatorName) outputDir.set(generate.outputDir) inputSpec.set(generate.inputSpec) + remoteInputSpec.set(generate.remoteInputSpec) templateDir.set(generate.templateDir) auth.set(generate.auth) globalProperties.set(generate.globalProperties) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt index 6fbb11d45d2..62b0762d611 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt @@ -52,6 +52,8 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { */ val inputSpec = project.objects.property<String>() + val remoteInputSpec = project.objects.property<String>() + /** * The template directory holding a custom template. */ diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt index 82fe7e761e8..55f9ac973a0 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt @@ -90,10 +90,15 @@ open class GenerateTask : DefaultTask() { /** * The Open API 2.0/3.x specification location. */ + @Optional @get:InputFile @PathSensitive(PathSensitivity.RELATIVE) val inputSpec = project.objects.property<String>() + @Input + @Optional + val remoteInputSpec = project.objects.property<String>() + /** * The template directory holding a custom template. */ @@ -569,6 +574,10 @@ open class GenerateTask : DefaultTask() { configurator.setInputSpec(value) } + remoteInputSpec.ifNotEmpty {value -> + configurator.setInputSpec(value) + } + generatorName.ifNotEmpty { value -> configurator.setGeneratorName(value) } diff --git a/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt b/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt index 4d5a96fd95c..b3d4b95a98d 100644 --- a/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt +++ b/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt @@ -29,6 +29,66 @@ class GenerateTaskDslTest : TestBase() { } """.trimIndent() + @Test + fun `openApiGenerate should create an expected file structure from URL config`() { + val specUrl = "https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master" + + "/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0.yaml" + // Arrange + val buildContents = """ + plugins { + id 'org.openapi.generator' + } + openApiGenerate { + generatorName = "kotlin" + remoteInputSpec = "$specUrl" + outputDir = file("build/kotlin").absolutePath + apiPackage = "org.openapitools.example.api" + invokerPackage = "org.openapitools.example.invoker" + modelPackage = "org.openapitools.example.model" + configOptions = [ + dateLibrary: "java8" + ] + } + """.trimIndent() + File(temp, "build.gradle").writeText(buildContents) + + // Act + val result = GradleRunner.create() + .withProjectDir(temp) + .withArguments("openApiGenerate") + .withPluginClasspath() + .build() + + // Assert + assertTrue( + result.output.contains("Successfully generated code to"), + "User friendly generate notice is missing." + ) + + listOf( + "build/kotlin/.openapi-generator-ignore", + "build/kotlin/docs/PetsApi.md", + "build/kotlin/docs/Error.md", + "build/kotlin/docs/Pet.md", + "build/kotlin/README.md", + "build/kotlin/build.gradle", + "build/kotlin/.openapi-generator/VERSION", + "build/kotlin/settings.gradle", + "build/kotlin/src/main/kotlin/org/openapitools/example/model/Pet.kt", + "build/kotlin/src/main/kotlin/org/openapitools/example/model/Error.kt", + "build/kotlin/src/main/kotlin/org/openapitools/example/api/PetsApi.kt", + "build/kotlin/src/main/kotlin/org/openapitools/client/infrastructure/ApiClient.kt" + ).map { + val f = File(temp, it) + assertTrue(f.exists() && f.isFile, "An expected file was not generated when invoking the generation: $f") + } + + assertEquals( + TaskOutcome.SUCCESS, result.task(":openApiGenerate")?.outcome, + "Expected a successful run, but found ${result.task(":openApiGenerate")?.outcome}" + ) + } + @Test fun `openApiGenerate should create an expected file structure from DSL config`() { // Arrange -- GitLab From 7d7cd75768c8e1441d3b33d7762ac7d78104d28e Mon Sep 17 00:00:00 2001 From: Daniel Hoffmann <hoffmann.daniel.1993@gmail.com> Date: Wed, 2 Nov 2022 16:41:52 +0100 Subject: [PATCH 2/2] #13726 Add documentation and new warning log --- modules/openapi-generator-gradle-plugin/README.adoc | 5 +++++ .../extensions/OpenApiGeneratorGenerateExtension.kt | 3 +++ .../generator/gradle/plugin/tasks/GenerateTask.kt | 9 ++++++++- .../src/test/kotlin/GenerateTaskDslTest.kt | 3 +-- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/modules/openapi-generator-gradle-plugin/README.adoc b/modules/openapi-generator-gradle-plugin/README.adoc index 9982ec5e12f..b3a16a2e474 100644 --- a/modules/openapi-generator-gradle-plugin/README.adoc +++ b/modules/openapi-generator-gradle-plugin/README.adoc @@ -154,6 +154,11 @@ apply plugin: 'org.openapi.generator' |None |The Open API 2.0/3.x specification location. +|remoteInputSpec +|String +|None +|The remote Open API 2.0/3.x specification URL location. + |templateDir |String |None diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt index 62b0762d611..6e88fa79642 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt @@ -52,6 +52,9 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { */ val inputSpec = project.objects.property<String>() + /** + * The remote Open API 2.0/3.x specification URL location. + */ val remoteInputSpec = project.objects.property<String>() /** diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt index 55f9ac973a0..47e467d15d6 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt @@ -95,6 +95,9 @@ open class GenerateTask : DefaultTask() { @PathSensitive(PathSensitivity.RELATIVE) val inputSpec = project.objects.property<String>() + /** + * The remote Open API 2.0/3.x specification URL location. + */ @Input @Optional val remoteInputSpec = project.objects.property<String>() @@ -557,6 +560,10 @@ open class GenerateTask : DefaultTask() { GlobalSettings.setProperty(CodegenConstants.WITH_XML, withXml.get().toString()) } + if (inputSpec.isPresent && remoteInputSpec.isPresent) { + logger.warn("Both inputSpec and remoteInputSpec is specified. The remoteInputSpec will take priority over inputSpec.") + } + // now override with any specified parameters verbose.ifNotEmpty { value -> configurator.setVerbose(value) @@ -574,7 +581,7 @@ open class GenerateTask : DefaultTask() { configurator.setInputSpec(value) } - remoteInputSpec.ifNotEmpty {value -> + remoteInputSpec.ifNotEmpty { value -> configurator.setInputSpec(value) } diff --git a/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt b/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt index b3d4b95a98d..660f0845bdf 100644 --- a/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt +++ b/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt @@ -31,8 +31,7 @@ class GenerateTaskDslTest : TestBase() { @Test fun `openApiGenerate should create an expected file structure from URL config`() { - val specUrl = "https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master" + - "/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0.yaml" + val specUrl = "https://raw.githubusercontent.com/OpenAPITools/openapi-generator/b6b8c0db872fb4a418ae496e89c7e656e14be165/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0.yaml" // Arrange val buildContents = """ plugins { -- GitLab