aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUfuk Kayserilioglu <ufuk@paralaus.com>2019-01-24 22:41:19 +0200
committerUfuk Kayserilioglu <ufuk@paralaus.com>2019-01-24 22:41:19 +0200
commit44c07fd0be1368f8388669f9d660b75eb8e49ac9 (patch)
treedf4326fa765c7c3543f8888e0cf8138f3c6718e6
parentd5fcb5b9ad4ecb271834ee5a689a1ead40290086 (diff)
downloadrails-44c07fd0be1368f8388669f9d660b75eb8e49ac9.tar.gz
rails-44c07fd0be1368f8388669f9d660b75eb8e49ac9.tar.bz2
rails-44c07fd0be1368f8388669f9d660b75eb8e49ac9.zip
Add test for Hash-like object being passed to partial `locals`
The test passes an instance of `ActionController::Parameters` that acts like a Hash but does not respond to some Hash methods like `symbolize_keys`. Moreover, if someone were to call `to_h` on the value it would fail since the parameter is not permitted. So this is a great way to ensure that the partial rendering pipeline does not mess with `locals`.
-rw-r--r--actionview/test/actionpack/controller/render_test.rb10
1 files changed, 10 insertions, 0 deletions
diff --git a/actionview/test/actionpack/controller/render_test.rb b/actionview/test/actionpack/controller/render_test.rb
index 02df84da8e..727d3fbc1a 100644
--- a/actionview/test/actionpack/controller/render_test.rb
+++ b/actionview/test/actionpack/controller/render_test.rb
@@ -485,6 +485,10 @@ class TestController < ActionController::Base
render partial: "customer", locals: { customer: Customer.new("david") }
end
+ def partial_with_hashlike_locals
+ render partial: "customer", locals: ActionController::Parameters.new(customer: Customer.new("david"))
+ end
+
def partial_with_form_builder
render partial: ActionView::Helpers::FormBuilder.new(:post, nil, view_context, {})
end
@@ -687,6 +691,7 @@ class RenderTest < ActionController::TestCase
get :partial_with_locals, to: "test#partial_with_locals"
get :partial_with_nested_object, to: "test#partial_with_nested_object"
get :partial_with_nested_object_shorthand, to: "test#partial_with_nested_object_shorthand"
+ get :partial_with_hashlike_locals, to: "test#partial_with_hashlike_locals"
get :partials_list, to: "test#partials_list"
get :render_action_hello_world, to: "test#render_action_hello_world"
get :render_action_hello_world_as_string, to: "test#render_action_hello_world_as_string"
@@ -1287,6 +1292,11 @@ class RenderTest < ActionController::TestCase
assert_equal "Hello: david", @response.body
end
+ def test_partial_with_hashlike_locals
+ get :partial_with_hashlike_locals
+ assert_equal "Hello: david", @response.body
+ end
+
def test_partial_with_form_builder
get :partial_with_form_builder
assert_equal "<label for=\"post_title\">Title</label>\n", @response.body