2009-05-03 00:02:22 -04:00
|
|
|
require 'abstract_unit'
|
|
|
|
|
2010-09-24 20:15:52 -04:00
|
|
|
class ShowExceptionsTest < ActionDispatch::IntegrationTest
|
2010-10-11 10:55:07 -04:00
|
|
|
|
2011-11-21 12:13:54 -05:00
|
|
|
class Boomer
|
2011-11-22 03:24:05 -05:00
|
|
|
def initialize(detailed = false)
|
|
|
|
@detailed = detailed
|
2011-11-21 12:13:54 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def call(env)
|
2011-11-22 03:24:05 -05:00
|
|
|
env['action_dispatch.show_detailed_exceptions'] = @detailed
|
2011-11-21 12:13:54 -05:00
|
|
|
req = ActionDispatch::Request.new(env)
|
|
|
|
case req.path
|
|
|
|
when "/not_found"
|
|
|
|
raise ActionController::UnknownAction
|
|
|
|
when "/runtime_error"
|
|
|
|
raise RuntimeError
|
|
|
|
when "/method_not_allowed"
|
|
|
|
raise ActionController::MethodNotAllowed
|
|
|
|
when "/not_implemented"
|
|
|
|
raise ActionController::NotImplemented
|
|
|
|
when "/unprocessable_entity"
|
|
|
|
raise ActionController::InvalidAuthenticityToken
|
|
|
|
when "/not_found_original_exception"
|
|
|
|
raise ActionView::Template::Error.new('template', {}, AbstractController::ActionNotFound.new)
|
|
|
|
else
|
|
|
|
raise "puke!"
|
|
|
|
end
|
2009-05-03 00:02:22 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2011-11-21 12:13:54 -05:00
|
|
|
ProductionApp = ActionDispatch::ShowExceptions.new(Boomer.new(false))
|
|
|
|
DevelopmentApp = ActionDispatch::ShowExceptions.new(Boomer.new(true))
|
2009-05-03 00:02:22 -04:00
|
|
|
|
2011-11-22 03:24:05 -05:00
|
|
|
test "rescue with error page when show_exceptions is false" do
|
2009-09-26 21:51:05 -04:00
|
|
|
@app = ProductionApp
|
2009-05-03 00:02:22 -04:00
|
|
|
|
2010-01-19 10:05:34 -05:00
|
|
|
get "/", {}, {'action_dispatch.show_exceptions' => true}
|
2009-05-03 00:02:22 -04:00
|
|
|
assert_response 500
|
|
|
|
assert_equal "500 error fixture\n", body
|
|
|
|
|
2010-01-19 10:05:34 -05:00
|
|
|
get "/not_found", {}, {'action_dispatch.show_exceptions' => true}
|
2009-05-03 00:02:22 -04:00
|
|
|
assert_response 404
|
|
|
|
assert_equal "404 error fixture\n", body
|
|
|
|
|
2010-01-19 10:05:34 -05:00
|
|
|
get "/method_not_allowed", {}, {'action_dispatch.show_exceptions' => true}
|
2009-05-03 00:02:22 -04:00
|
|
|
assert_response 405
|
|
|
|
assert_equal "", body
|
|
|
|
end
|
|
|
|
|
2011-11-22 03:24:05 -05:00
|
|
|
test "rescue with diagnostics message when show_exceptions is true" do
|
|
|
|
@app = DevelopmentApp
|
2009-05-03 00:02:22 -04:00
|
|
|
|
2011-11-22 03:24:05 -05:00
|
|
|
get "/", {}, {'action_dispatch.show_exceptions' => true}
|
|
|
|
assert_response 500
|
|
|
|
assert_match(/puke/, body)
|
2009-05-03 00:02:22 -04:00
|
|
|
|
2011-11-22 03:24:05 -05:00
|
|
|
get "/not_found", {}, {'action_dispatch.show_exceptions' => true}
|
|
|
|
assert_response 404
|
|
|
|
assert_match(/#{ActionController::UnknownAction.name}/, body)
|
2009-05-03 00:02:22 -04:00
|
|
|
|
2011-11-22 03:24:05 -05:00
|
|
|
get "/method_not_allowed", {}, {'action_dispatch.show_exceptions' => true}
|
|
|
|
assert_response 405
|
|
|
|
assert_match(/ActionController::MethodNotAllowed/, body)
|
2009-05-03 00:02:22 -04:00
|
|
|
end
|
|
|
|
|
2011-11-22 03:24:05 -05:00
|
|
|
test "localize rescue error page" do
|
2009-05-03 00:02:22 -04:00
|
|
|
# Change locale
|
2009-09-19 14:22:09 -04:00
|
|
|
old_locale, I18n.locale = I18n.locale, :da
|
2009-05-03 00:02:22 -04:00
|
|
|
|
|
|
|
begin
|
2009-09-26 21:51:05 -04:00
|
|
|
@app = ProductionApp
|
2009-05-03 00:02:22 -04:00
|
|
|
|
2010-01-19 10:05:34 -05:00
|
|
|
get "/", {}, {'action_dispatch.show_exceptions' => true}
|
2009-05-03 00:02:22 -04:00
|
|
|
assert_response 500
|
|
|
|
assert_equal "500 localized error fixture\n", body
|
|
|
|
|
2010-01-19 10:05:34 -05:00
|
|
|
get "/not_found", {}, {'action_dispatch.show_exceptions' => true}
|
2009-05-03 00:02:22 -04:00
|
|
|
assert_response 404
|
|
|
|
assert_equal "404 error fixture\n", body
|
|
|
|
ensure
|
|
|
|
I18n.locale = old_locale
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-04-06 18:45:56 -04:00
|
|
|
test "does not show filtered parameters" do
|
|
|
|
@app = DevelopmentApp
|
|
|
|
|
|
|
|
get "/", {"foo"=>"bar"}, {'action_dispatch.show_exceptions' => true,
|
|
|
|
'action_dispatch.parameter_filter' => [:foo]}
|
|
|
|
assert_response 500
|
2010-09-22 15:03:39 -04:00
|
|
|
assert_match(""foo"=>"[FILTERED]"", body)
|
2010-04-06 18:45:56 -04:00
|
|
|
end
|
2010-10-11 10:55:07 -04:00
|
|
|
|
2011-11-22 03:24:05 -05:00
|
|
|
test "show registered original exception for wrapped exceptions when show_exceptions is false" do
|
2010-10-11 10:55:07 -04:00
|
|
|
@app = ProductionApp
|
|
|
|
|
|
|
|
get "/not_found_original_exception", {}, {'action_dispatch.show_exceptions' => true}
|
|
|
|
assert_response 404
|
|
|
|
assert_match(/404 error/, body)
|
|
|
|
end
|
|
|
|
|
2011-11-22 03:24:05 -05:00
|
|
|
test "show registered original exception for wrapped exceptions when show_exceptions is true" do
|
2010-10-11 10:55:07 -04:00
|
|
|
@app = DevelopmentApp
|
|
|
|
|
|
|
|
get "/not_found_original_exception", {}, {'action_dispatch.show_exceptions' => true}
|
|
|
|
assert_response 404
|
|
|
|
assert_match(/AbstractController::ActionNotFound/, body)
|
|
|
|
end
|
2011-03-24 18:24:47 -04:00
|
|
|
|
|
|
|
test "show the controller name in the diagnostics template when controller name is present" do
|
2011-11-22 03:24:05 -05:00
|
|
|
@app = DevelopmentApp
|
2011-03-24 18:24:47 -04:00
|
|
|
get("/runtime_error", {}, {
|
|
|
|
'action_dispatch.show_exceptions' => true,
|
|
|
|
'action_dispatch.request.parameters' => {
|
|
|
|
'action' => 'show',
|
|
|
|
'id' => 'unknown',
|
2011-05-06 11:00:59 -04:00
|
|
|
'controller' => 'featured_tile'
|
2011-03-24 18:24:47 -04:00
|
|
|
}
|
|
|
|
})
|
|
|
|
assert_response 500
|
2011-05-06 11:00:59 -04:00
|
|
|
assert_match(/RuntimeError\n in FeaturedTileController/, body)
|
2011-03-24 18:24:47 -04:00
|
|
|
end
|
2011-05-03 09:30:59 -04:00
|
|
|
|
|
|
|
test "sets the HTTP charset parameter" do
|
|
|
|
@app = DevelopmentApp
|
|
|
|
|
|
|
|
get "/", {}, {'action_dispatch.show_exceptions' => true}
|
|
|
|
assert_equal "text/html; charset=utf-8", response.headers["Content-Type"]
|
|
|
|
end
|
2009-05-03 00:02:22 -04:00
|
|
|
end
|