diff --git a/library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIScalaCustomizer.scala b/library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIScalaCustomizer.scala index 7fd6844..4e133de 100644 --- a/library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIScalaCustomizer.scala +++ b/library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIScalaCustomizer.scala @@ -38,13 +38,16 @@ class OpenAPIScalaCustomizer(components: Components) extends OpenApiCustomizer { allOperations.foreach { case (_, operation) => val responses = operation.getResponses.asScala responses.foreach { case (_, response) => - val isReturningUnit = response.getContent.asScala.exists( - _._2.getSchema.get$ref == "#/components/schemas/BoxedUnit" - ) - if (isReturningUnit) response.setContent(None.orNull) + val contentOpt = Option(response.getContent) + contentOpt.map(_.asScala.foreach { case (_, mediaType) => + val schemaOpt = Option(mediaType.getSchema) + schemaOpt.map { schema => + val isReturningUnit = schema.get$ref == "#/components/schemas/BoxedUnit" + if (isReturningUnit) response.setContent(None.orNull) + } + }) } } } } - } diff --git a/library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIScalaCustomizerSpec.scala b/library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIScalaCustomizerSpec.scala index 67a54e8..66ed70c 100644 --- a/library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIScalaCustomizerSpec.scala +++ b/library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIScalaCustomizerSpec.scala @@ -80,4 +80,72 @@ class OpenAPIScalaCustomizerSpec extends AnyFlatSpec { ) } + it should "do nothing if a response doesn't have content" in { + val components = new Components() + val openAPIScalaCustomizer = new OpenAPIScalaCustomizer(components) + + val openAPI = new OpenAPI() + .paths( + new Paths() + .addPathItem( + "/api/endpoint", + new PathItem() + .delete( + new Operation() + .responses( + new ApiResponses() + .addApiResponse( + "204", + new ApiResponse() + .description("No Content") + ) + ) + ) + ) + ) + + openAPIScalaCustomizer.customise(openAPI) + + assert( + Option(openAPI.getPaths.get("/api/endpoint").getDelete.getResponses.get("204").getContent).isEmpty + ) + } + + it should "do nothing if a response doesn't have a schema" in { + val components = new Components() + val openAPIScalaCustomizer = new OpenAPIScalaCustomizer(components) + + val openAPI = new OpenAPI() + .paths( + new Paths() + .addPathItem( + "/api/endpoint", + new PathItem() + .delete( + new Operation() + .responses( + new ApiResponses() + .addApiResponse( + "204", + new ApiResponse() + .content( + new Content() + .addMediaType( + "*/*", + new MediaType() + ) + ) + ) + ) + ) + ) + ) + + openAPIScalaCustomizer.customise(openAPI) + + assert( + Option(openAPI.getPaths.get("/api/endpoint").getDelete.getResponses.get("204").getContent).isDefined + ) + } + }