From 1f745003ff207ff8164d2e01672e96cc4be5bf2b Mon Sep 17 00:00:00 2001 From: Greg Myers Date: Sun, 29 Mar 2020 20:16:03 +0100 Subject: [PATCH] fix do not delete from operation level metadata --- .../lib/rswag/specs/swagger_formatter.rb | 9 ++- test-app/swagger/v1/swagger.json | 58 ++++++++++++++----- 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/rswag-specs/lib/rswag/specs/swagger_formatter.rb b/rswag-specs/lib/rswag/specs/swagger_formatter.rb index ea99f59..09350e4 100644 --- a/rswag-specs/lib/rswag/specs/swagger_formatter.rb +++ b/rswag-specs/lib/rswag/specs/swagger_formatter.rb @@ -34,6 +34,9 @@ module Rswag swagger_doc = @config.get_swagger_doc(metadata[:swagger_doc]) unless doc_version(swagger_doc).start_with?('2') + # This is called once PER EXAMPLE ('it' block) not on group finished. + # metadata[:operation] is also re-used between examples so be careful + # NOT to modify its content here. upgrade_request_type!(metadata) upgrade_servers!(swagger_doc) upgrade_oauth!(swagger_doc) @@ -83,14 +86,14 @@ module Rswag def upgrade_request_consumes!(swagger_doc, metadata) # Content-Type header - mime_list = Array(metadata[:operation].delete(:consumes) || swagger_doc[:consumes]) + mime_list = Array(metadata[:operation][:consumes] || swagger_doc[:consumes]) target_node = metadata[:response] upgrade_content!(mime_list, target_node) end def upgrade_response_produces!(swagger_doc, metadata) # Accept header - mime_list = Array(metadata[:operation].delete(:produces) || swagger_doc[:produces]) + mime_list = Array(metadata[:operation][:produces] || swagger_doc[:produces]) target_node = metadata[:response] upgrade_content!(mime_list, target_node) metadata[:response].delete(:schema) @@ -99,7 +102,7 @@ module Rswag def upgrade_content!(mime_list, target_node) target_node.merge!(content: {}) schema = target_node[:schema] - return if mime_list.empty? + return if mime_list.empty? || schema.nil? mime_list.each do |mime_type| # TODO upgrade to have content-type specific schema diff --git a/test-app/swagger/v1/swagger.json b/test-app/swagger/v1/swagger.json index 8e0f3fa..df8d4ba 100644 --- a/test-app/swagger/v1/swagger.json +++ b/test-app/swagger/v1/swagger.json @@ -21,10 +21,14 @@ ], "responses": { "204": { - "description": "Valid credentials" + "description": "Valid credentials", + "content": { + } }, "401": { - "description": "Invalid credentials" + "description": "Invalid credentials", + "content": { + } } } } @@ -45,10 +49,14 @@ ], "responses": { "204": { - "description": "Valid credentials" + "description": "Valid credentials", + "content": { + } }, "401": { - "description": "Invalid credentials" + "description": "Invalid credentials", + "content": { + } } } } @@ -72,10 +80,14 @@ ], "responses": { "204": { - "description": "Valid credentials" + "description": "Valid credentials", + "content": { + } }, "401": { - "description": "Invalid credentials" + "description": "Invalid credentials", + "content": { + } } } } @@ -105,12 +117,18 @@ ], "responses": { "201": { - "description": "blog created" + "description": "blog created", + "content": { + } }, "422": { "description": "invalid request", - "schema": { - "$ref": "#/definitions/errors_object" + "content": { + "application/json": { + "schema": { + "$ref": "#/definitions/errors_object" + } + } } } } @@ -136,7 +154,9 @@ ], "responses": { "406": { - "description": "unsupported accept header" + "description": "unsupported accept header", + "content": { + } } } } @@ -176,9 +196,6 @@ "type": "string" } }, - "schema": { - "$ref": "#/definitions/blog" - }, "examples": { "application/json": { "id": 1, @@ -186,10 +203,19 @@ "content": "Hello world and hello universe. Thank you all very much!!!", "thumbnail": "thumbnail.png" } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/definitions/blog" + } + } } }, "404": { - "description": "blog not found" + "description": "blog not found", + "content": { + } } } } @@ -227,7 +253,9 @@ ], "responses": { "200": { - "description": "blog updated" + "description": "blog updated", + "content": { + } } } }