Permalink
Browse files

Make process reuse the env var passed as argument

  • Loading branch information...
1 parent 0c5aded commit 0e4748cd415660eb91e63d50aa15cdd027c612dd @spastorino spastorino committed Apr 6, 2011
@@ -243,7 +243,8 @@ def _mock_session
end
# Performs the actual request.
- def process(method, path, parameters = nil, rack_environment = nil)
+ def process(method, path, parameters = nil, env = nil)
+ env ||= {}
if path =~ %r{://}
location = URI.parse(path)
https! URI::HTTPS === location if location.scheme
@@ -259,7 +260,7 @@ def process(method, path, parameters = nil, rack_environment = nil)
hostname, port = host.split(':')
- env = {
+ default_env = {
:method => method,
:params => parameters,
@@ -277,9 +278,7 @@ def process(method, path, parameters = nil, rack_environment = nil)
session = Rack::Test::Session.new(_mock_session)
- (rack_environment || {}).each do |key, value|
- env[key] = value
- end
+ env.reverse_merge!(default_env)
@dolzenko

dolzenko Sep 19, 2011

Contributor

This destructively modifies parameters passed into process and in turn into get/put//etc. methods - not good :)

@spastorino

spastorino Sep 24, 2011

Owner

@dolzenko you're right. Can you provide a test case and patch?. Thanks.

# NOTE: rack-test v0.5 doesn't build a default uri correctly
# Make sure requested path is always a full uri
@@ -521,4 +521,12 @@ def app
get '/foo'
assert_raise(NameError) { missing_path }
end
+
+ test "process reuse the env we pass as argument" do
+ env = { :SERVER_NAME => 'server', 'action_dispatch.custom' => 'custom' }
+ get '/foo', nil, env
+ assert_equal :get, env[:method]
+ assert_equal 'server', env[:SERVER_NAME]
+ assert_equal 'custom', env['action_dispatch.custom']
+ end
end

0 comments on commit 0e4748c

Please sign in to comment.