[gradle-plugin] enhance unit test cases (#18285)

This commit is contained in:
sullis 2024-04-03 17:13:18 -07:00 committed by GitHub
parent 2a39b29684
commit f357be480e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 163 additions and 4 deletions

View File

@ -401,7 +401,7 @@ class GenerateTaskDslTest : TestBase() {
fun `openApiValidate should fail on invalid spec`() { fun `openApiValidate should fail on invalid spec`() {
// Arrange // Arrange
val projectFiles = mapOf( 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) withProject(defaultBuildGradle, projectFiles)
@ -423,7 +423,7 @@ class GenerateTaskDslTest : TestBase() {
fun `openApiValidate should ok skip spec validation`() { fun `openApiValidate should ok skip spec validation`() {
// Arrange // Arrange
val projectFiles = mapOf( 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(""" withProject("""

View File

@ -113,7 +113,7 @@ class ValidateTaskDslTest : TestBase() {
fun `openApiValidate should fail on invalid spec`(gradleVersion: String?) { fun `openApiValidate should fail on invalid spec`(gradleVersion: String?) {
// Arrange // Arrange
val projectFiles = mapOf( 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( withProject(
""" """
@ -139,6 +139,50 @@ class ValidateTaskDslTest : TestBase() {
result.output.contains("Spec is invalid."), result.output.contains("Spec is invalid."),
"Unexpected/no message presented to the user for an invalid spec." "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( assertEquals(
FAILED, result.task(":openApiValidate")?.outcome, FAILED, result.task(":openApiValidate")?.outcome,
"Expected a failed run, but found ${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?) { fun `validateBadSpec as defined task should fail on invalid spec`(gradleVersion: String?) {
// Arrange // Arrange
val projectFiles = mapOf( 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( withProject(
""" """
@ -212,6 +256,10 @@ class ValidateTaskDslTest : TestBase() {
result.output.contains("Spec is invalid."), result.output.contains("Spec is invalid."),
"Unexpected/no message presented to the user for an invalid spec." "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( assertEquals(
FAILED, result.task(":validateBadSpec")?.outcome, FAILED, result.task(":validateBadSpec")?.outcome,
"Expected a failed run, but found ${result.task(":validateBadSpec")?.outcome}" "Expected a failed run, but found ${result.task(":validateBadSpec")?.outcome}"

View File

@ -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