aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_controller/testing/process.rb2
-rw-r--r--actionpack/lib/action_dispatch/testing/test_request.rb24
-rw-r--r--actionpack/test/dispatch/test_request_test.rb15
3 files changed, 36 insertions, 5 deletions
diff --git a/actionpack/lib/action_controller/testing/process.rb b/actionpack/lib/action_controller/testing/process.rb
index e0f8f026fd..2fbd89ae1c 100644
--- a/actionpack/lib/action_controller/testing/process.rb
+++ b/actionpack/lib/action_controller/testing/process.rb
@@ -2,7 +2,6 @@ require 'rack/session/abstract/id'
module ActionController #:nodoc:
class TestRequest < ActionDispatch::TestRequest #:nodoc:
- attr_accessor :cookies
attr_accessor :query_parameters
def initialize(env = {})
@@ -13,7 +12,6 @@ module ActionController #:nodoc:
self.session_options = TestSession::DEFAULT_OPTIONS.merge(:id => ActiveSupport::SecureRandom.hex(16))
@request_uri = "/"
- @cookies = {}
end
# Wraps raw_post in a StringIO.
diff --git a/actionpack/lib/action_dispatch/testing/test_request.rb b/actionpack/lib/action_dispatch/testing/test_request.rb
index 3d20b466d3..bd6c26b69b 100644
--- a/actionpack/lib/action_dispatch/testing/test_request.rb
+++ b/actionpack/lib/action_dispatch/testing/test_request.rb
@@ -1,17 +1,24 @@
module ActionDispatch
class TestRequest < Request
+ DEFAULT_ENV = Rack::MockRequest.env_for('/')
+
def self.new(env = {})
super
end
def initialize(env = {})
- super(Rack::MockRequest.env_for('/').merge(env))
+ super(DEFAULT_ENV.merge(env))
self.host = 'test.host'
self.remote_addr = '0.0.0.0'
self.user_agent = 'Rails Testing'
end
+ def env
+ write_cookies!
+ super
+ end
+
def request_method=(method)
@env['REQUEST_METHOD'] = method.to_s.upcase
end
@@ -49,8 +56,19 @@ module ActionDispatch
end
def accept=(mime_types)
- @env.delete("action_dispatch.request.accepts")
- @env["HTTP_ACCEPT"] = Array(mime_types).collect { |mime_types| mime_types.to_s }.join(",")
+ @env.delete('action_dispatch.request.accepts')
+ @env['HTTP_ACCEPT'] = Array(mime_types).collect { |mime_types| mime_types.to_s }.join(",")
end
+
+ def cookies
+ @cookies ||= super
+ end
+
+ private
+ def write_cookies!
+ unless @cookies.blank?
+ @env['HTTP_COOKIE'] = @cookies.map { |name, value| "#{name}=#{value};" }.join(' ')
+ end
+ end
end
end
diff --git a/actionpack/test/dispatch/test_request_test.rb b/actionpack/test/dispatch/test_request_test.rb
index f13f67f0ae..19b5e2988b 100644
--- a/actionpack/test/dispatch/test_request_test.rb
+++ b/actionpack/test/dispatch/test_request_test.rb
@@ -27,4 +27,19 @@ class TestRequestTest < ActiveSupport::TestCase
assert env.empty?, env.inspect
end
+
+ test "cookie jar" do
+ req = ActionDispatch::TestRequest.new
+
+ assert_equal({}, req.cookies)
+ assert_equal nil, req.env["HTTP_COOKIE"]
+
+ req.cookies["user_name"] = "david"
+ assert_equal({"user_name" => "david"}, req.cookies)
+ assert_equal "user_name=david;", req.env["HTTP_COOKIE"]
+
+ req.cookies["login"] = "XJ-122"
+ assert_equal({"user_name" => "david", "login" => "XJ-122"}, req.cookies)
+ assert_equal "login=XJ-122; user_name=david;", req.env["HTTP_COOKIE"]
+ end
end