From cbf27af0a3e0907d6566f2346d4fa79766299209 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Wed, 15 May 2024 11:44:33 +0100 Subject: [PATCH 1/2] test for request body in operations that do not support request body --- .../airlines/resources/ZepplinResource.java | 29 ++++++++++++++++++- .../openapi/tck/AirlinesAppTest.java | 11 +++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/tck/src/main/java/org/eclipse/microprofile/openapi/apps/airlines/resources/ZepplinResource.java b/tck/src/main/java/org/eclipse/microprofile/openapi/apps/airlines/resources/ZepplinResource.java index d52e1fee..7601a550 100644 --- a/tck/src/main/java/org/eclipse/microprofile/openapi/apps/airlines/resources/ZepplinResource.java +++ b/tck/src/main/java/org/eclipse/microprofile/openapi/apps/airlines/resources/ZepplinResource.java @@ -15,11 +15,15 @@ import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.enums.SecuritySchemeType; +import org.eclipse.microprofile.openapi.annotations.media.Content; +import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; import org.eclipse.microprofile.openapi.annotations.security.SecurityRequirement; import org.eclipse.microprofile.openapi.annotations.security.SecurityScheme; import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HEAD; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.Response; @@ -36,7 +40,30 @@ public class ZepplinResource { @Operation(summary = "Deprecate outdated airship technology", operationId = "deprecateZepplin") @Produces("text/plain") @SecurityRequirement(name = "mutualTLSScheme", scopes = "zepplinScope") - public Response deprecateZepplin() { + public Response deprecateZepplin(@RequestBody(description = "Something about a zepplin.", + content = @Content(mediaType = "application/json")) String string) { + return Response.ok().build(); + } + + @HEAD + @Path("{id}") + @APIResponse(responseCode = "200", description = "Review deleted") + @APIResponse(responseCode = "404", description = "Review not found") + @Operation(summary = "Deprecate outdated airship technology", operationId = "deprecateZepplin") + @Produces("text/plain") + @SecurityRequirement(name = "mutualTLSScheme", scopes = "zepplinScope") + public Response headZepplin(@RequestBody(ref = "#/paths/~1zepplins~1{id}/delete/requestBody") String string) { + return Response.ok().build(); + } + + @GET + @Path("{id}") + @APIResponse(responseCode = "200", description = "Review deleted") + @APIResponse(responseCode = "404", description = "Review not found") + @Operation(summary = "Deprecate outdated airship technology", operationId = "deprecateZepplin") + @Produces("text/plain") + @SecurityRequirement(name = "mutualTLSScheme", scopes = "zepplinScope") + public Response getZepplin(@RequestBody(ref = "#/paths/~1zepplins~1{id}/delete/requestBody") String string) { return Response.ok().build(); } } diff --git a/tck/src/main/java/org/eclipse/microprofile/openapi/tck/AirlinesAppTest.java b/tck/src/main/java/org/eclipse/microprofile/openapi/tck/AirlinesAppTest.java index 514baa57..dd525850 100644 --- a/tck/src/main/java/org/eclipse/microprofile/openapi/tck/AirlinesAppTest.java +++ b/tck/src/main/java/org/eclipse/microprofile/openapi/tck/AirlinesAppTest.java @@ -290,6 +290,17 @@ public void testOperationUserResource(String type) { vr.body("paths.'/user/special'.post.parameters[0].schema", is(nullValue())); } + @Test(dataProvider = "formatProvider") + public void testOperationZepplinResource(String type) { + ValidatableResponse vr = callEndpoint(type); + + vr.body("paths.'/zepplins/{id}'.delete.requestBody.description", equalTo("Something about a zepplin.")); + vr.body("paths.'/zepplins/{id}'.head.requestBody.$ref", equalTo("#/paths/~1zepplins~1{id}/delete/requestBody")); + vr.body("paths.'/zepplins/{id}'.get.requestBody.$ref", equalTo("#/paths/~1zepplins~1{id}/delete/requestBody")); + + vr.body("paths.'/zepplins/{id}'.delete.requestBody.content", notNullValue()); + } + @Test(dataProvider = "formatProvider") public void testAPIResponse(String type) { ValidatableResponse vr = callEndpoint(type); From b7f400af4bfae80808951d498ccbdbd0b983fb49 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Thu, 30 May 2024 13:17:33 +0100 Subject: [PATCH 2/2] move test for request body in operations that do not support request body to model reader test --- .../apps/airlines/resources/ZepplinResource.java | 9 +++------ .../openapi/reader/MyOASModelReaderImpl.java | 13 +++++++++++++ .../microprofile/openapi/tck/AirlinesAppTest.java | 11 ----------- .../openapi/tck/ModelReaderAppTest.java | 11 +++++++++++ 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/tck/src/main/java/org/eclipse/microprofile/openapi/apps/airlines/resources/ZepplinResource.java b/tck/src/main/java/org/eclipse/microprofile/openapi/apps/airlines/resources/ZepplinResource.java index 7601a550..3a3dcb20 100644 --- a/tck/src/main/java/org/eclipse/microprofile/openapi/apps/airlines/resources/ZepplinResource.java +++ b/tck/src/main/java/org/eclipse/microprofile/openapi/apps/airlines/resources/ZepplinResource.java @@ -15,8 +15,6 @@ import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.enums.SecuritySchemeType; -import org.eclipse.microprofile.openapi.annotations.media.Content; -import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; import org.eclipse.microprofile.openapi.annotations.security.SecurityRequirement; import org.eclipse.microprofile.openapi.annotations.security.SecurityScheme; @@ -40,8 +38,7 @@ public class ZepplinResource { @Operation(summary = "Deprecate outdated airship technology", operationId = "deprecateZepplin") @Produces("text/plain") @SecurityRequirement(name = "mutualTLSScheme", scopes = "zepplinScope") - public Response deprecateZepplin(@RequestBody(description = "Something about a zepplin.", - content = @Content(mediaType = "application/json")) String string) { + public Response deprecateZepplin(String string) { return Response.ok().build(); } @@ -52,7 +49,7 @@ public Response deprecateZepplin(@RequestBody(description = "Something about a z @Operation(summary = "Deprecate outdated airship technology", operationId = "deprecateZepplin") @Produces("text/plain") @SecurityRequirement(name = "mutualTLSScheme", scopes = "zepplinScope") - public Response headZepplin(@RequestBody(ref = "#/paths/~1zepplins~1{id}/delete/requestBody") String string) { + public Response headZepplin() { return Response.ok().build(); } @@ -63,7 +60,7 @@ public Response headZepplin(@RequestBody(ref = "#/paths/~1zepplins~1{id}/delete/ @Operation(summary = "Deprecate outdated airship technology", operationId = "deprecateZepplin") @Produces("text/plain") @SecurityRequirement(name = "mutualTLSScheme", scopes = "zepplinScope") - public Response getZepplin(@RequestBody(ref = "#/paths/~1zepplins~1{id}/delete/requestBody") String string) { + public Response getZepplin() { return Response.ok().build(); } } diff --git a/tck/src/main/java/org/eclipse/microprofile/openapi/reader/MyOASModelReaderImpl.java b/tck/src/main/java/org/eclipse/microprofile/openapi/reader/MyOASModelReaderImpl.java index 2ea56c3d..e886cfbe 100644 --- a/tck/src/main/java/org/eclipse/microprofile/openapi/reader/MyOASModelReaderImpl.java +++ b/tck/src/main/java/org/eclipse/microprofile/openapi/reader/MyOASModelReaderImpl.java @@ -280,6 +280,19 @@ public OpenAPI buildModel() { .description( "Indicates that the deletion event was processed successfully"))))) .paths(OASFactory.createObject(Paths.class) + .addPathItem("/zepplins/{id}", OASFactory.createObject(PathItem.class) + .HEAD(OASFactory.createObject(Operation.class) + .requestBody(OASFactory.createRequestBody() + .ref("#/paths/~1zepplins~1{id}/delete/requestBody"))) + .GET(OASFactory.createObject(Operation.class) + .requestBody(OASFactory.createRequestBody() + .ref("#/paths/~1zepplins~1{id}/delete/requestBody"))) + .DELETE(OASFactory.createObject(Operation.class) + .requestBody(OASFactory.createRequestBody() + .description("Something about a zepplin.") + .content(OASFactory.createObject(Content.class) + .addMediaType("mediaType", OASFactory + .createObject(MediaType.class)))))) .addPathItem("/modelReader/airlines", OASFactory.createObject(PathItem.class) .GET(OASFactory.createObject(Operation.class) .summary("Retrieve all available airlines") diff --git a/tck/src/main/java/org/eclipse/microprofile/openapi/tck/AirlinesAppTest.java b/tck/src/main/java/org/eclipse/microprofile/openapi/tck/AirlinesAppTest.java index dd525850..514baa57 100644 --- a/tck/src/main/java/org/eclipse/microprofile/openapi/tck/AirlinesAppTest.java +++ b/tck/src/main/java/org/eclipse/microprofile/openapi/tck/AirlinesAppTest.java @@ -290,17 +290,6 @@ public void testOperationUserResource(String type) { vr.body("paths.'/user/special'.post.parameters[0].schema", is(nullValue())); } - @Test(dataProvider = "formatProvider") - public void testOperationZepplinResource(String type) { - ValidatableResponse vr = callEndpoint(type); - - vr.body("paths.'/zepplins/{id}'.delete.requestBody.description", equalTo("Something about a zepplin.")); - vr.body("paths.'/zepplins/{id}'.head.requestBody.$ref", equalTo("#/paths/~1zepplins~1{id}/delete/requestBody")); - vr.body("paths.'/zepplins/{id}'.get.requestBody.$ref", equalTo("#/paths/~1zepplins~1{id}/delete/requestBody")); - - vr.body("paths.'/zepplins/{id}'.delete.requestBody.content", notNullValue()); - } - @Test(dataProvider = "formatProvider") public void testAPIResponse(String type) { ValidatableResponse vr = callEndpoint(type); diff --git a/tck/src/main/java/org/eclipse/microprofile/openapi/tck/ModelReaderAppTest.java b/tck/src/main/java/org/eclipse/microprofile/openapi/tck/ModelReaderAppTest.java index c3bc3d86..ac60bc1d 100644 --- a/tck/src/main/java/org/eclipse/microprofile/openapi/tck/ModelReaderAppTest.java +++ b/tck/src/main/java/org/eclipse/microprofile/openapi/tck/ModelReaderAppTest.java @@ -368,4 +368,15 @@ public void testWebhooks(String type) { equalTo("Indicates that the deletion event was processed successfully")); } + + @Test(dataProvider = "formatProvider") + public void testRequestBodyInOperations(String type) { + ValidatableResponse vr = callEndpoint(type); + + vr.body("paths.'/zepplins/{id}'.delete.requestBody.description", equalTo("Something about a zepplin.")); + vr.body("paths.'/zepplins/{id}'.head.requestBody.$ref", equalTo("#/paths/~1zepplins~1{id}/delete/requestBody")); + vr.body("paths.'/zepplins/{id}'.get.requestBody.$ref", equalTo("#/paths/~1zepplins~1{id}/delete/requestBody")); + + vr.body("paths.'/zepplins/{id}'.delete.requestBody.content", notNullValue()); + } }