aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
authorKir Shatrov <shatrov@me.com>2016-09-22 11:36:23 -0400
committerKir Shatrov <shatrov@me.com>2016-09-22 11:36:23 -0400
commit7e350c67057affccde176eeeffcffbe10806feda (patch)
tree40728e9380876d85dce75797b8b2d648af4fb095 /actionpack/test
parentcf5f55cd30aef0f90300c7c8f333060fe258cd8a (diff)
downloadrails-7e350c67057affccde176eeeffcffbe10806feda.tar.gz
rails-7e350c67057affccde176eeeffcffbe10806feda.tar.bz2
rails-7e350c67057affccde176eeeffcffbe10806feda.zip
Fix memoization bug on ActionDispatch::TestRequest#request_method=
TestRequest have been overrriding request_method setter since 2009, but the actual implementation in Request (not TestRequest) has been changed since that. Now it's also using @request_method instance variable to keep the state. The override in TestRequest have not been calling `super`, which caused a bug that after accessing #requst_method the value was memoized and then we've never been able to change it anymore: ``` req = ActionDispatch::TestRequest.create puts "was: #{req.request_method}" # memoized here req.request_method = "POST" puts "became: #{req.request_method}" ``` output: ``` was: GET became: GET ``` Since the whole purpose of overriding the setter in TestRequest is to upcase it, I'm changing it to `super(method.to_s.upcase)`
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/dispatch/test_request_test.rb7
1 files changed, 7 insertions, 0 deletions
diff --git a/actionpack/test/dispatch/test_request_test.rb b/actionpack/test/dispatch/test_request_test.rb
index 35af3076ba..b479af781d 100644
--- a/actionpack/test/dispatch/test_request_test.rb
+++ b/actionpack/test/dispatch/test_request_test.rb
@@ -88,6 +88,13 @@ class TestRequestTest < ActiveSupport::TestCase
assert_equal "GoogleBot", req.user_agent
end
+ test "request_method getter and setter" do
+ req = ActionDispatch::TestRequest.create
+ req.request_method # to reproduce bug caused by memoization
+ req.request_method = "POST"
+ assert_equal "POST", req.request_method
+ end
+
test "setter methods" do
req = ActionDispatch::TestRequest.create({})
get = "GET"