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