diff --git a/rswag-specs/lib/rswag/specs/request_factory.rb b/rswag-specs/lib/rswag/specs/request_factory.rb index d68297b7..9222908c 100644 --- a/rswag-specs/lib/rswag/specs/request_factory.rb +++ b/rswag-specs/lib/rswag/specs/request_factory.rb @@ -174,7 +174,7 @@ def build_query_string_part(param, value, swagger_doc) return "#{escaped_name}=" + value.to_a.flatten.map{|v| CGI.escape(v.to_s) }.join(separator) end else - return "#{name}=#{value}" + return "#{name}=#{CGI.escape(value)}" end end diff --git a/rswag-specs/spec/rswag/specs/request_factory_spec.rb b/rswag-specs/spec/rswag/specs/request_factory_spec.rb index 85e3c8d2..f14923b1 100644 --- a/rswag-specs/spec/rswag/specs/request_factory_spec.rb +++ b/rswag-specs/spec/rswag/specs/request_factory_spec.rb @@ -88,6 +88,21 @@ module Specs expect(request[:path]).to eq('/blogs?q1=foo&q2=bar') end + context 'when escaping is needed' do + before do + metadata[:operation][:parameters] = [ + { name: 'q1', in: :query, type: :string }, + { name: 'q2', in: :query, type: :string } + ] + allow(example).to receive(:q1).and_return('order #123') + allow(example).to receive(:q2).and_return('last % ditch') + end + + it 'builds the query string from example values with encoding' do + expect(request[:path]).to eq('/blogs?q1=foo&q2=bar') + end + end + context 'when `getter is defined`' do before do metadata[:operation][:parameters] << {