diff options
author | Jeremy Friesen <jeremy.n.friesen@gmail.com> | 2015-08-26 09:08:18 -0400 |
---|---|---|
committer | Jeremy Friesen <jeremy.n.friesen@gmail.com> | 2015-08-26 09:08:18 -0400 |
commit | 0258ef33a5b89a25ddc5b091ba03142578a6777b (patch) | |
tree | ef1840d54f34e4cc537e3711e56b69ccfbf1f5ae /actionpack | |
parent | 479217ca34e3eb1f86fa8e8358bdde9de16effaf (diff) | |
download | rails-0258ef33a5b89a25ddc5b091ba03142578a6777b.tar.gz rails-0258ef33a5b89a25ddc5b091ba03142578a6777b.tar.bz2 rails-0258ef33a5b89a25ddc5b091ba03142578a6777b.zip |
Updating TestSession to access with indifference
The following Rails code failed (with a `KeyError` exception) under
test:
```ruby
class ApplicationController < ActionController::Base
def user_strategy
# At this point:
# ```ruby
# session == {
# "user_strategy"=>"email",
# "user_identifying_value"=>"hello@world.com"
# }
# ```
if session.key?(:user_strategy)
session.fetch(:user_strategy)
end
end
end
```
When I checked the session's keys (`session.keys`), I got an array of
strings. If I accessed `session[:user_strategy]` I got the expected
`'email'` value. However if I used `session.fetch(:user_strategy)` I
got a `KeyError` exception.
This appears to be a Rails 4.2.4 regression (as the code works under
Rails 4.2.3).
Closes #21383
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/CHANGELOG.md | 5 | ||||
-rw-r--r-- | actionpack/lib/action_controller/test_case.rb | 4 | ||||
-rw-r--r-- | actionpack/test/dispatch/session/test_session_test.rb | 10 |
3 files changed, 17 insertions, 2 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 8eea4ccd41..65c57dd809 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,3 +1,8 @@ +* Updating ActionController::TestSession to behave as a hash with indifferent + access: + + *Jeremy Friesen* + * Using strings or symbols for middleware class names is deprecated. Convert things like this: diff --git a/actionpack/lib/action_controller/test_case.rb b/actionpack/lib/action_controller/test_case.rb index 103986e44a..39cbc0cd70 100644 --- a/actionpack/lib/action_controller/test_case.rb +++ b/actionpack/lib/action_controller/test_case.rb @@ -174,8 +174,8 @@ module ActionController clear end - def fetch(*args, &block) - @data.fetch(*args, &block) + def fetch(key, *args, &block) + @data.fetch(key.to_s, *args, &block) end private diff --git a/actionpack/test/dispatch/session/test_session_test.rb b/actionpack/test/dispatch/session/test_session_test.rb index 59c030176b..3e61d123e3 100644 --- a/actionpack/test/dispatch/session/test_session_test.rb +++ b/actionpack/test/dispatch/session/test_session_test.rb @@ -46,6 +46,16 @@ class ActionController::TestSessionTest < ActiveSupport::TestCase assert_equal('2', session.fetch(:two, '2')) end + def test_fetch_on_symbol_returns_value + session = ActionController::TestSession.new(one: '1') + assert_equal('1', session.fetch(:one)) + end + + def test_fetch_on_string_returns_value + session = ActionController::TestSession.new(one: '1') + assert_equal('1', session.fetch('one')) + end + def test_fetch_returns_block_value session = ActionController::TestSession.new(one: '1') assert_equal(2, session.fetch('2') { |key| key.to_i }) |