diff --git a/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb b/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb index 04a0fb6..7c864ab 100644 --- a/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb +++ b/actionpack/test/dispatch/request/url_encoded_params_parsing_test.rb @@ -24,6 +24,7 @@ class UrlEncodedParamsParsingTest < ActionDispatch::IntegrationTest end test "parses nested hash" do + require 'ruby-debug' query = [ "note[viewers][viewer][][type]=User", "note[viewers][viewer][][id]=1", @@ -35,6 +36,40 @@ class UrlEncodedParamsParsingTest < ActionDispatch::IntegrationTest assert_parses(expected, query) end + test "parses nested hash in case first level element follows second level element" do + query = ["first[][second][e]=value1", + "first[][a]=111", + "first[][second][e]=value2", + "first[][a]=222", + "first[][second][e]=value3", + "first[][a]=333" + ].join("&") + + expected = {"first"=> + [{"a"=>"111", "second"=>{"e"=>"value1"}}, + {"a"=>"222", "second"=>{"e"=>"value2"}}, + {"a"=>"333", "second"=>{"e"=>"value3"}}]} + + assert_parses(expected, query) + end + + test "parses nested hash in case first level element preceeds second level element" do + query = ["first[][a]=111", + "first[][second][e]=value1", + "first[][a]=222", + "first[][second][e]=value2", + "first[][a]=333", + "first[][second][e]=value3" + ].join("&") + + expected = {"first"=> + [{"a"=>"111", "second"=>{"e"=>"value1"}}, + {"a"=>"222", "second"=>{"e"=>"value2"}}, + {"a"=>"333", "second"=>{"e"=>"value3"}}]} + + assert_parses(expected, query) + end + test "parses more complex nesting" do query = [ "customers[boston][first][name]=David",