mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
b53f006901
* convert_content_type! is handled by assign_default_content_type_and_charset! * set_content_length! should be handled by the endpoint server. Otherwise each middleware that modifies the body has to do the expensive work of recalculating content_length. * convert_language! appears to be legacy. There are no tests for this * convert_cookies! should be handled by the new HeaderHash in Rack * Use an integer for .status's internal representation to avoid needing to do String manipulation just to find out the status
128 lines
3.5 KiB
Ruby
128 lines
3.5 KiB
Ruby
require 'abstract_unit'
|
|
|
|
class ResponseTest < ActiveSupport::TestCase
|
|
def setup
|
|
@response = ActionDispatch::Response.new
|
|
end
|
|
|
|
test "simple output" do
|
|
@response.body = "Hello, World!"
|
|
@response.prepare!
|
|
|
|
status, headers, body = @response.to_a
|
|
assert_equal 200, status
|
|
assert_equal({
|
|
"Content-Type" => "text/html; charset=utf-8",
|
|
"Cache-Control" => "max-age=0, private, must-revalidate",
|
|
"ETag" => '"65a8e27d8879283831b664bd8b7f0ad4"',
|
|
"Set-Cookie" => ""
|
|
}, headers)
|
|
|
|
parts = []
|
|
body.each { |part| parts << part }
|
|
assert_equal ["Hello, World!"], parts
|
|
end
|
|
|
|
test "utf8 output" do
|
|
@response.body = [1090, 1077, 1089, 1090].pack("U*")
|
|
@response.prepare!
|
|
|
|
status, headers, body = @response.to_a
|
|
assert_equal 200, status
|
|
assert_equal({
|
|
"Content-Type" => "text/html; charset=utf-8",
|
|
"Cache-Control" => "max-age=0, private, must-revalidate",
|
|
"ETag" => '"ebb5e89e8a94e9dd22abf5d915d112b2"',
|
|
"Set-Cookie" => ""
|
|
}, headers)
|
|
end
|
|
|
|
test "streaming block" do
|
|
@response.body = Proc.new do |response, output|
|
|
5.times { |n| output.write(n) }
|
|
end
|
|
@response.prepare!
|
|
|
|
status, headers, body = @response.to_a
|
|
assert_equal 200, status
|
|
assert_equal({
|
|
"Content-Type" => "text/html; charset=utf-8",
|
|
"Cache-Control" => "no-cache",
|
|
"Set-Cookie" => ""
|
|
}, headers)
|
|
|
|
parts = []
|
|
body.each { |part| parts << part.to_s }
|
|
assert_equal ["0", "1", "2", "3", "4"], parts
|
|
end
|
|
|
|
test "content type" do
|
|
[204, 304].each do |c|
|
|
@response.status = c.to_s
|
|
@response.prepare!
|
|
status, headers, body = @response.to_a
|
|
assert !headers.has_key?("Content-Type"), "#{c} should not have Content-Type header"
|
|
end
|
|
|
|
[200, 302, 404, 500].each do |c|
|
|
@response.status = c.to_s
|
|
@response.prepare!
|
|
status, headers, body = @response.to_a
|
|
assert headers.has_key?("Content-Type"), "#{c} did not have Content-Type header"
|
|
end
|
|
end
|
|
|
|
test "does not include Status header" do
|
|
@response.status = "200 OK"
|
|
@response.prepare!
|
|
status, headers, body = @response.to_a
|
|
assert !headers.has_key?('Status')
|
|
end
|
|
|
|
test "response code" do
|
|
@response.status = "200 OK"
|
|
assert_equal 200, @response.response_code
|
|
|
|
@response.status = "200"
|
|
assert_equal 200, @response.response_code
|
|
|
|
@response.status = 200
|
|
assert_equal 200, @response.response_code
|
|
end
|
|
|
|
test "code" do
|
|
@response.status = "200 OK"
|
|
assert_equal "200", @response.code
|
|
|
|
@response.status = "200"
|
|
assert_equal "200", @response.code
|
|
|
|
@response.status = 200
|
|
assert_equal "200", @response.code
|
|
end
|
|
|
|
test "message" do
|
|
@response.status = "200 OK"
|
|
assert_equal "OK", @response.message
|
|
|
|
@response.status = "200"
|
|
assert_equal "OK", @response.message
|
|
|
|
@response.status = 200
|
|
assert_equal "OK", @response.message
|
|
end
|
|
|
|
test "cookies" do
|
|
@response.set_cookie("user_name", :value => "david", :path => "/")
|
|
@response.prepare!
|
|
status, headers, body = @response.to_a
|
|
assert_equal "user_name=david; path=/", headers["Set-Cookie"]
|
|
assert_equal({"user_name" => "david"}, @response.cookies)
|
|
|
|
@response.set_cookie("login", :value => "foo&bar", :path => "/", :expires => Time.utc(2005, 10, 10,5))
|
|
@response.prepare!
|
|
status, headers, body = @response.to_a
|
|
assert_equal "user_name=david; path=/\nlogin=foo%26bar; path=/; expires=Mon, 10-Oct-2005 05:00:00 GMT", headers["Set-Cookie"]
|
|
assert_equal({"login" => "foo&bar", "user_name" => "david"}, @response.cookies)
|
|
end
|
|
end
|