diff --git a/lib/rack/test/utils.rb b/lib/rack/test/utils.rb index a79a8e7..d1f7456 100644 --- a/lib/rack/test/utils.rb +++ b/lib/rack/test/utils.rb @@ -6,9 +6,16 @@ module Utils # :nodoc: include Rack::Utils extend self + class << self + attr_accessor :override_build_nested_query + end + self.override_build_nested_query = false + # Build a query string for the given value and prefix. The value # can be an array or hash of parameters. def build_nested_query(value, prefix = nil) + return super if Rack::Test::Utils.override_build_nested_query + case value when Array if value.empty? diff --git a/spec/rack/test/utils_spec.rb b/spec/rack/test/utils_spec.rb index 9cb3670..090276d 100644 --- a/spec/rack/test/utils_spec.rb +++ b/spec/rack/test/utils_spec.rb @@ -58,6 +58,21 @@ input = { collection: [] } build_nested_query(input).must_equal 'collection[]=' end + + it 'percent encodes brackets with override_build_nested_query' do + original = Rack::Test::Utils.override_build_nested_query + Rack::Test::Utils.override_build_nested_query = true + begin + query = if Gem::Version.new(Rack.release) < Gem::Version.new("3.1") + 'a[b]=c' + else + 'a%5Bb%5D=c' + end + build_nested_query({"a" => { "b" => "c" }}).must_equal query + ensure + Rack::Test::Utils.override_build_nested_query = original + end + end end describe 'Rack::Test::Utils.build_multipart' do