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 30a725f70e0..247a57c0390 100644 --- a/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt +++ b/modules/openapi-generator-gradle-plugin/src/test/kotlin/GenerateTaskDslTest.kt @@ -401,7 +401,7 @@ class GenerateTaskDslTest : TestBase() { fun `openApiValidate should fail on invalid spec`() { // Arrange val projectFiles = mapOf( - "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid.yaml") + "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid-due-to-missing-info-attribute.yaml") ) withProject(defaultBuildGradle, projectFiles) @@ -423,7 +423,7 @@ class GenerateTaskDslTest : TestBase() { fun `openApiValidate should ok skip spec validation`() { // Arrange val projectFiles = mapOf( - "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid.yaml") + "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid-due-to-missing-info-attribute.yaml") ) withProject(""" diff --git a/modules/openapi-generator-gradle-plugin/src/test/kotlin/ValidateTaskDslTest.kt b/modules/openapi-generator-gradle-plugin/src/test/kotlin/ValidateTaskDslTest.kt index ff05a5784ca..aa80ed587f8 100644 --- a/modules/openapi-generator-gradle-plugin/src/test/kotlin/ValidateTaskDslTest.kt +++ b/modules/openapi-generator-gradle-plugin/src/test/kotlin/ValidateTaskDslTest.kt @@ -113,7 +113,7 @@ class ValidateTaskDslTest : TestBase() { fun `openApiValidate should fail on invalid spec`(gradleVersion: String?) { // Arrange val projectFiles = mapOf( - "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid.yaml") + "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid-due-to-missing-info-attribute.yaml") ) withProject( """ @@ -139,6 +139,50 @@ class ValidateTaskDslTest : TestBase() { result.output.contains("Spec is invalid."), "Unexpected/no message presented to the user for an invalid spec." ) + assertTrue( + result.output.contains("attribute info is missing"), + "Spec validation detail" + ) + assertEquals( + FAILED, result.task(":openApiValidate")?.outcome, + "Expected a failed run, but found ${result.task(":openApiValidate")?.outcome}" + ) + } + + @Test(dataProvider = "gradle_version_provider") + fun `openApiValidate should fail on invalid spec with duplicate 200 status code`(gradleVersion: String?) { + // Arrange + val projectFiles = mapOf( + "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid-due-to-duplicate-200-status-code.yaml") + ) + withProject( + """ + | plugins { + | id 'org.openapi.generator' + | } + | + | openApiValidate { + | inputSpec = file('spec.yaml').absolutePath + | } + """.trimMargin(), projectFiles + ) + + // Act + val result = getGradleRunner(gradleVersion) + .withProjectDir(temp) + .withArguments("openApiValidate") + .withPluginClasspath() + .buildAndFail() + + // Assert + assertTrue( + result.output.contains("Spec is invalid."), + "Unexpected/no message presented to the user for an invalid spec." + ) + assertTrue( + result.output.contains("Duplicate field 200"), + "Spec validation detail" + ) assertEquals( FAILED, result.task(":openApiValidate")?.outcome, "Expected a failed run, but found ${result.task(":openApiValidate")?.outcome}" @@ -186,7 +230,7 @@ class ValidateTaskDslTest : TestBase() { fun `validateBadSpec as defined task should fail on invalid spec`(gradleVersion: String?) { // Arrange val projectFiles = mapOf( - "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid.yaml") + "spec.yaml" to javaClass.classLoader.getResourceAsStream("specs/petstore-v3.0-invalid-due-to-missing-info-attribute.yaml") ) withProject( """ @@ -212,6 +256,10 @@ class ValidateTaskDslTest : TestBase() { result.output.contains("Spec is invalid."), "Unexpected/no message presented to the user for an invalid spec." ) + assertTrue( + result.output.contains("attribute info is missing"), + "Unexpected/no message presented to the user for an invalid spec." + ) assertEquals( FAILED, result.task(":validateBadSpec")?.outcome, "Expected a failed run, but found ${result.task(":validateBadSpec")?.outcome}" diff --git a/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0-invalid-due-to-duplicate-200-status-code.yaml b/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0-invalid-due-to-duplicate-200-status-code.yaml new file mode 100644 index 00000000000..2943eea98f5 --- /dev/null +++ b/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0-invalid-due-to-duplicate-200-status-code.yaml @@ -0,0 +1,111 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets: + get: + summary: List all pets + operationId: listPets + tags: + - pets + parameters: + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false + schema: + type: integer + format: int32 + responses: + '200': + description: A paged array of pets + headers: + x-next: + description: A link to the next page of responses + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Pets" + '200': + description: duplicate 200 + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + summary: Create a pet + operationId: createPets + tags: + - pets + responses: + '201': + description: Null response + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + '200': + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/schemas/Pets" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + schemas: + Pet: + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + Pets: + type: array + items: + $ref: "#/components/schemas/Pet" + Error: + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string diff --git a/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0-invalid.yaml b/modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0-invalid-due-to-missing-info-attribute.yaml similarity index 100% rename from modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0-invalid.yaml rename to modules/openapi-generator-gradle-plugin/src/test/resources/specs/petstore-v3.0-invalid-due-to-missing-info-attribute.yaml