From 05e1e2271fcccdc4cb13fe10693f3a44354d5193 Mon Sep 17 00:00:00 2001 From: Andrey Kurashev Date: Tue, 20 Feb 2018 14:49:13 +0600 Subject: [PATCH] Fix Authorization header missing and duplicating --- .../lib/rswag/specs/request_factory.rb | 5 +++- .../spec/rswag/specs/request_factory_spec.rb | 28 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/rswag-specs/lib/rswag/specs/request_factory.rb b/rswag-specs/lib/rswag/specs/request_factory.rb index d6df35b..48a5af1 100644 --- a/rswag-specs/lib/rswag/specs/request_factory.rb +++ b/rswag-specs/lib/rswag/specs/request_factory.rb @@ -29,12 +29,15 @@ module Rswag path_item_params = metadata[:path_item][:parameters] || [] security_params = derive_security_params(metadata, swagger_doc) - operation_params + operation_params = operation_params .concat(path_item_params) .concat(security_params) .map { |p| p['$ref'] ? resolve_parameter(p['$ref'], swagger_doc) : p } .uniq { |p| p[:name] } .reject { |p| p[:required] == false && !example.respond_to?(p[:name]) } + + metadata[:operation][:parameters] = operation_params unless operation_params.empty? + operation_params end def derive_security_params(metadata, swagger_doc) diff --git a/rswag-specs/spec/rswag/specs/request_factory_spec.rb b/rswag-specs/spec/rswag/specs/request_factory_spec.rb index 9e870f8..3139140 100644 --- a/rswag-specs/spec/rswag/specs/request_factory_spec.rb +++ b/rswag-specs/spec/rswag/specs/request_factory_spec.rb @@ -235,6 +235,34 @@ module Rswag expect(request[:headers]).to eq('api_key' => 'foobar') end end + + context 'in header with no other params' do + let(:key_location) { :header } + + it 'adds name and example value to the headers' do + expect(request[:headers]).to eq('api_key' => 'foobar') + expect(metadata[:operation][:parameters]).to( + include(name: 'api_key', in: :header, type: :string, required: true) + ) + end + end + + context 'in header with auth param already added' do + let(:key_location) { :header } + before do + metadata[:operation][:parameters] = [ + { name: 'q1', in: :query, type: :string }, + { name: 'api_key', in: :header, type: :string } + ] + allow(example).to receive(:q1).and_return('foo') + allow(example).to receive(:api_key).and_return('foobar') + end + + it 'adds authorization parameter only once' do + expect(request[:headers]).to eq('api_key' => 'foobar') + expect(metadata[:operation][:parameters].size).to eq 2 + end + end end context 'oauth2' do