aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
authorSantiago Pastorino <santiago@wyeworks.com>2012-06-11 16:58:24 -0300
committerSantiago Pastorino <santiago@wyeworks.com>2012-06-11 18:07:30 -0300
commitbd8c0b8a7ad680aae909c6453758d86b9fc66559 (patch)
tree350dfdd618e1fe82814042c7a4190178f4d20c2d /actionpack/test
parent174f36a0778dd4ed26663f22e62d6b010cf7d216 (diff)
downloadrails-bd8c0b8a7ad680aae909c6453758d86b9fc66559.tar.gz
rails-bd8c0b8a7ad680aae909c6453758d86b9fc66559.tar.bz2
rails-bd8c0b8a7ad680aae909c6453758d86b9fc66559.zip
Return proper format on exceptions
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/controller/show_exceptions_test.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/actionpack/test/controller/show_exceptions_test.rb b/actionpack/test/controller/show_exceptions_test.rb
index 13ab19ed8f..ce7b6b0dc6 100644
--- a/actionpack/test/controller/show_exceptions_test.rb
+++ b/actionpack/test/controller/show_exceptions_test.rb
@@ -22,6 +22,14 @@ module ShowExceptions
end
end
+ class ShowLocalExceptionsController < ActionController::Base
+ use ActionDispatch::ShowExceptions, ActionDispatch::PublicExceptions.new("#{FIXTURE_LOAD_PATH}/public", true)
+
+ def boom
+ raise 'boom!'
+ end
+ end
+
class ShowExceptionsTest < ActionDispatch::IntegrationTest
test 'show error page from a remote ip' do
@app = ShowExceptionsController.action(:boom)
@@ -68,4 +76,39 @@ module ShowExceptions
assert_match(/boom/, body)
end
end
+
+ class ShowExceptionsFormatsTest < ActionDispatch::IntegrationTest
+ def test_render_json_exception
+ @app = ShowExceptionsOverridenController.action(:boom)
+ get "/", {}, 'HTTP_ACCEPT' => 'application/json'
+ assert_response :internal_server_error
+ assert_equal 'application/json', response.content_type.to_s
+ assert_equal({ :status => '500', :error => 'boom!' }.to_json, response.body)
+ end
+
+ def test_render_xml_exception
+ @app = ShowExceptionsOverridenController.action(:boom)
+ get "/", {}, 'HTTP_ACCEPT' => 'application/xml'
+ assert_response :internal_server_error
+ assert_equal 'application/xml', response.content_type.to_s
+ assert_equal({ :status => '500', :error => 'boom!' }.to_xml, response.body)
+ end
+
+ def test_render_fallback_exception
+ @app = ShowExceptionsOverridenController.action(:boom)
+ get "/", {}, 'HTTP_ACCEPT' => 'text/csv'
+ assert_response :internal_server_error
+ assert_equal 'text/html', response.content_type.to_s
+ end
+ end
+
+ class ShowExceptionsFormatsTest < ActionDispatch::IntegrationTest
+ def test_render_formatted_exception_in_development
+ @app = ShowLocalExceptionsController.action(:boom)
+ get "/", {}, 'HTTP_ACCEPT' => 'application/xml'
+
+ assert_response :internal_server_error
+ assert_equal 'text/html', response.content_type.to_s
+ end
+ end
end