Allow overriding of all headers from passed environment hash

Allow REMOTE_ADDR, HTTP_HOST and HTTP_USER_AGENT to be overridden from
the environment passed into `ActionDispatch::TestRequest.new`.

Fixes #11590
This commit is contained in:
Andrew White 2013-07-25 07:46:54 +01:00
parent 7af0ae919f
commit 4db0637d55
3 changed files with 42 additions and 5 deletions

@ -1,3 +1,10 @@
* Allow REMOTE_ADDR, HTTP_HOST and HTTP_USER_AGENT to be overridden from
the environment passed into `ActionDispatch::TestRequest.new`.
Fixes #11590
*Andrew White*
* Fix an issue where Journey was failing to clear the named routes hash when the
routes were reloaded and since it doesn't overwrite existing routes then if a
route changed but wasn't renamed it kept the old definition. This was being

@ -3,7 +3,11 @@
module ActionDispatch
class TestRequest < Request
DEFAULT_ENV = Rack::MockRequest.env_for('/')
DEFAULT_ENV = Rack::MockRequest.env_for('/',
'HTTP_HOST' => 'test.host',
'REMOTE_ADDR' => '0.0.0.0',
'HTTP_USER_AGENT' => 'Rails Testing'
)
def self.new(env = {})
super
@ -12,10 +16,6 @@ def self.new(env = {})
def initialize(env = {})
env = Rails.application.env_config.merge(env) if defined?(Rails.application) && Rails.application
super(default_env.merge(env))
self.host = 'test.host'
self.remote_addr = '0.0.0.0'
self.user_agent = 'Rails Testing'
end
def request_method=(method)

@ -62,6 +62,36 @@ class TestRequestTest < ActiveSupport::TestCase
assert_equal false, req.env.empty?
end
test "default remote address is 0.0.0.0" do
req = ActionDispatch::TestRequest.new
assert_equal '0.0.0.0', req.remote_addr
end
test "allows remote address to be overridden" do
req = ActionDispatch::TestRequest.new('REMOTE_ADDR' => '127.0.0.1')
assert_equal '127.0.0.1', req.remote_addr
end
test "default host is test.host" do
req = ActionDispatch::TestRequest.new
assert_equal 'test.host', req.host
end
test "allows host to be overridden" do
req = ActionDispatch::TestRequest.new('HTTP_HOST' => 'www.example.com')
assert_equal 'www.example.com', req.host
end
test "default user agent is 'Rails Testing'" do
req = ActionDispatch::TestRequest.new
assert_equal 'Rails Testing', req.user_agent
end
test "allows user agent to be overridden" do
req = ActionDispatch::TestRequest.new('HTTP_USER_AGENT' => 'GoogleBot')
assert_equal 'GoogleBot', req.user_agent
end
private
def assert_cookies(expected, cookie_jar)
assert_equal(expected, cookie_jar.instance_variable_get("@cookies"))