mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #6148 from twinturbo/head-fix
Make ActionController#head pass rack-link
This commit is contained in:
commit
5f62c86b50
2 changed files with 87 additions and 1 deletions
|
@ -27,8 +27,28 @@ module ActionController
|
|||
|
||||
self.status = status
|
||||
self.location = url_for(location) if location
|
||||
self.content_type = Mime[formats.first] if formats
|
||||
|
||||
if include_content_headers?(self.status)
|
||||
self.content_type = Mime[formats.first] if formats
|
||||
else
|
||||
headers.delete('Content-Type')
|
||||
headers.delete('Content-Length')
|
||||
end
|
||||
|
||||
self.response_body = " "
|
||||
end
|
||||
|
||||
private
|
||||
# :nodoc:
|
||||
def include_content_headers?(status)
|
||||
case status
|
||||
when 100..199
|
||||
false
|
||||
when 204, 205, 304
|
||||
false
|
||||
else
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -37,6 +37,36 @@ module BareMetalTest
|
|||
def index
|
||||
head :not_found
|
||||
end
|
||||
|
||||
def continue
|
||||
self.content_type = "text/html"
|
||||
head 100
|
||||
end
|
||||
|
||||
def switching_protocols
|
||||
self.content_type = "text/html"
|
||||
head 101
|
||||
end
|
||||
|
||||
def processing
|
||||
self.content_type = "text/html"
|
||||
head 102
|
||||
end
|
||||
|
||||
def no_content
|
||||
self.content_type = "text/html"
|
||||
head 204
|
||||
end
|
||||
|
||||
def reset_content
|
||||
self.content_type = "text/html"
|
||||
head 205
|
||||
end
|
||||
|
||||
def not_modified
|
||||
self.content_type = "text/html"
|
||||
head 304
|
||||
end
|
||||
end
|
||||
|
||||
class HeadTest < ActiveSupport::TestCase
|
||||
|
@ -44,6 +74,42 @@ module BareMetalTest
|
|||
status = HeadController.action(:index).call(Rack::MockRequest.env_for("/")).first
|
||||
assert_equal 404, status
|
||||
end
|
||||
|
||||
test "head :continue (100) does not return a content-type header" do
|
||||
headers = HeadController.action(:continue).call(Rack::MockRequest.env_for("/")).second
|
||||
assert_nil headers['Content-Type']
|
||||
assert_nil headers['Content-Length']
|
||||
end
|
||||
|
||||
test "head :continue (101) does not return a content-type header" do
|
||||
headers = HeadController.action(:continue).call(Rack::MockRequest.env_for("/")).second
|
||||
assert_nil headers['Content-Type']
|
||||
assert_nil headers['Content-Length']
|
||||
end
|
||||
|
||||
test "head :processing (102) does not return a content-type header" do
|
||||
headers = HeadController.action(:processing).call(Rack::MockRequest.env_for("/")).second
|
||||
assert_nil headers['Content-Type']
|
||||
assert_nil headers['Content-Length']
|
||||
end
|
||||
|
||||
test "head :no_content (204) does not return a content-type header" do
|
||||
headers = HeadController.action(:no_content).call(Rack::MockRequest.env_for("/")).second
|
||||
assert_nil headers['Content-Type']
|
||||
assert_nil headers['Content-Length']
|
||||
end
|
||||
|
||||
test "head :reset_content (205) does not return a content-type header" do
|
||||
headers = HeadController.action(:reset_content).call(Rack::MockRequest.env_for("/")).second
|
||||
assert_nil headers['Content-Type']
|
||||
assert_nil headers['Content-Length']
|
||||
end
|
||||
|
||||
test "head :not_modified (304) does not return a content-type header" do
|
||||
headers = HeadController.action(:not_modified).call(Rack::MockRequest.env_for("/")).second
|
||||
assert_nil headers['Content-Type']
|
||||
assert_nil headers['Content-Length']
|
||||
end
|
||||
end
|
||||
|
||||
class BareControllerTest < ActionController::TestCase
|
||||
|
|
Loading…
Reference in a new issue