1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionpack/test/controller/metal_test.rb
Jon Moss 9d695743de Do not include default response headers for AC::Metal
In Rails 4.2, `ActionController::Metal` controllers did not include the
default headers from `ActionDispatch::Response`. However, through e16afe6, and a
general shift towards having `ActionController::Metal` objects contain
`ActionDispatch::Response` objects (instead of just returning an array
of status, headers, and body), this behavior was lost. This PR helps to
restore the original behavior by having `ActionController::Metal`
controllers generate Response objects without the default headers, while
`ActionController::Base` now overrides the factory method to make sure
its version does have the default headers.
2017-03-29 19:26:39 -04:00

30 lines
871 B
Ruby

require "abstract_unit"
class MetalControllerInstanceTests < ActiveSupport::TestCase
class SimpleController < ActionController::Metal
def hello
self.response_body = "hello"
end
end
def test_response_has_default_headers
original_default_headers = ActionDispatch::Response.default_headers
ActionDispatch::Response.default_headers = {
"X-Frame-Options" => "DENY",
"X-Content-Type-Options" => "nosniff",
"X-XSS-Protection" => "1;"
}
response_headers = SimpleController.action("hello").call(
"REQUEST_METHOD" => "GET",
"rack.input" => -> {}
)[1]
refute response_headers.key?("X-Frame-Options")
refute response_headers.key?("X-Content-Type-Options")
refute response_headers.key?("X-XSS-Protection")
ensure
ActionDispatch::Response.default_headers = original_default_headers
end
end