Pass along arguments to underlying `get` method in `follow_redirect!` (#33299)

* Allow get arguments for follow_redirect

Now all arguments passed to `follow_redirect!` are passed to the
underlying `get` method. This for example allows to set custom headers
for the redirection request to the server.

This is especially useful for setting headers that may, outside of the
testing environment, be set automatically on every request, i.e. by a
web application firewall.

* Allow get arguments for follow_redirect

[Remo Fritzsche + Rafael Mendonça França]
This commit is contained in:
Remo Fritzsche 2018-07-05 22:51:52 +02:00 committed by Rafael França
parent 9ecbd64cd9
commit a0061d2389
3 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,13 @@
* Pass along arguments to underlying `get` method in `follow_redirect!`
Now all arguments passed to `follow_redirect!` are passed to the underlying
`get` method. This for example allows to set custom headers for the
redirection request to the server.
follow_redirect!(params: { foo: :bar })
*Remo Fritzsche*
* Introduce a new error page to when the implicit render page is accessed in the browser.
Now instead of showing an error page that with exception and backtraces we now show only

View File

@ -50,10 +50,11 @@ module ActionDispatch
# Follow a single redirect response. If the last response was not a
# redirect, an exception will be raised. Otherwise, the redirect is
# performed on the location header.
def follow_redirect!
# performed on the location header. Any arguments are passed to the
# underlying call to `get`.
def follow_redirect!(**args)
raise "not a redirect! #{status} #{status_message}" unless redirect?
get(response.location)
get(response.location, **args)
status
end
end

View File

@ -349,6 +349,16 @@ class IntegrationProcessTest < ActionDispatch::IntegrationTest
end
end
def test_redirect_with_arguments
with_test_route_set do
get "/redirect"
follow_redirect! params: { foo: :bar }
assert_response :ok
assert_equal "bar", request.parameters["foo"]
end
end
def test_xml_http_request_get
with_test_route_set do
get "/get", xhr: true