1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Don't override @set_cookies on CookieJar#update_cookies_from_jar'

When building the cookie_jar for the current test request.
It was possible for this method to override keys currently being set on the test itself.
In situations such as when making two requests mixing creating the cookie on the test and the controller.
This commit is contained in:
André Luis Leal Cardoso Junior 2019-03-17 00:43:43 -03:00
parent fdac932707
commit ca937c59cd
2 changed files with 14 additions and 1 deletions

View file

@ -338,7 +338,7 @@ module ActionDispatch
def update_cookies_from_jar
request_jar = @request.cookie_jar.instance_variable_get(:@cookies)
set_cookies = request_jar.reject { |k, _| @delete_cookies.key?(k) }
set_cookies = request_jar.reject { |k, _| @delete_cookies.key?(k) || @set_cookies.key?(k) }
@cookies.update set_cookies if set_cookies
end

View file

@ -123,6 +123,11 @@ class CookiesTest < ActionController::TestCase
head :ok
end
def set_cookie_if_not_present
cookies["user_name"] = "alice" unless cookies["user_name"].present?
head :ok
end
def logout
cookies.delete("user_name")
head :ok
@ -1128,6 +1133,14 @@ class CookiesTest < ActionController::TestCase
assert_equal "bar", @controller.encrypted_cookie
end
def test_cookie_override
get :set_cookie_if_not_present
assert_equal "alice", cookies["user_name"]
cookies["user_name"] = "bob"
get :set_cookie_if_not_present
assert_equal "bob", cookies["user_name"]
end
def test_signed_cookie_with_expires_set_relatively
request.env["action_dispatch.use_cookies_with_metadata"] = true