aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
authorJorge Bejar <jorge@wyeworks.com>2015-07-07 12:43:49 -0300
committerJorge Bejar <jorge@wyeworks.com>2015-12-09 10:53:44 -0300
commit05d89410bf97d0778e78558db3c9fed275f8a614 (patch)
tree4b05cd946830dea9aed72f4afb8bb610b69e048b /actionpack/test
parentf43c05bff74df90f6b8ff90f92ad9f6d7652bd09 (diff)
downloadrails-05d89410bf97d0778e78558db3c9fed275f8a614.tar.gz
rails-05d89410bf97d0778e78558db3c9fed275f8a614.tar.bz2
rails-05d89410bf97d0778e78558db3c9fed275f8a614.zip
Fix some edge cases in AD::DebugExceptions in rails api apps
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/dispatch/debug_exceptions_test.rb73
1 files changed, 62 insertions, 11 deletions
diff --git a/actionpack/test/dispatch/debug_exceptions_test.rb b/actionpack/test/dispatch/debug_exceptions_test.rb
index 48eff700ce..d9c6233511 100644
--- a/actionpack/test/dispatch/debug_exceptions_test.rb
+++ b/actionpack/test/dispatch/debug_exceptions_test.rb
@@ -162,17 +162,6 @@ class DebugExceptionsTest < ActionDispatch::IntegrationTest
assert_match(/ActionController::ParameterMissing/, body)
end
- test "rescue with json on API request" do
- @app = ActionDispatch::DebugExceptions.new(BoomerAPI.new(true), RoutesApp, true)
-
- get "/index.json", headers: { 'action_dispatch.show_exceptions' => true }
- assert_response 500
- assert_no_match(/<header>/, body)
- assert_no_match(/<body>/, body)
- assert_equal "application/json", response.content_type
- assert_match(/RuntimeError: puke/, body)
- end
-
test "rescue with text error for xhr request" do
@app = DevelopmentApp
xhr_request_env = {'action_dispatch.show_exceptions' => true, 'HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'}
@@ -223,6 +212,68 @@ class DebugExceptionsTest < ActionDispatch::IntegrationTest
assert_match(/ActionController::ParameterMissing/, body)
end
+ test "rescue with json error for API request" do
+ @app = ActionDispatch::DebugExceptions.new(Boomer.new(true), RoutesApp, true)
+
+ get "/", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 500
+ assert_no_match(/<header>/, body)
+ assert_no_match(/<body>/, body)
+ assert_equal "application/json", response.content_type
+ assert_match(/RuntimeError: puke/, body)
+
+ get "/not_found", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 404
+ assert_no_match(/<body>/, body)
+ assert_equal "application/json", response.content_type
+ assert_match(/#{AbstractController::ActionNotFound.name}/, body)
+
+ get "/method_not_allowed", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 405
+ assert_no_match(/<body>/, body)
+ assert_equal "application/json", response.content_type
+ assert_match(/ActionController::MethodNotAllowed/, body)
+
+ get "/unknown_http_method", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 405
+ assert_no_match(/<body>/, body)
+ assert_equal "application/json", response.content_type
+ assert_match(/ActionController::UnknownHttpMethod/, body)
+
+ get "/bad_request", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 400
+ assert_no_match(/<body>/, body)
+ assert_equal "application/json", response.content_type
+ assert_match(/ActionController::BadRequest/, body)
+
+ get "/parameter_missing", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 400
+ assert_no_match(/<body>/, body)
+ assert_equal "application/json", response.content_type
+ assert_match(/ActionController::ParameterMissing/, body)
+ end
+
+ test "rescue with json on API request returns only allowed formats or json as a fallback" do
+ @app = ActionDispatch::DebugExceptions.new(Boomer.new(true), RoutesApp, true)
+
+ get "/index.json", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 500
+ assert_equal "application/json", response.content_type
+ assert_match(/RuntimeError: puke/, body)
+
+ get "/index.html", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 500
+ assert_no_match(/<header>/, body)
+ assert_no_match(/<body>/, body)
+ assert_equal "application/json", response.content_type
+ assert_match(/RuntimeError: puke/, body)
+
+ get "/index.xml", headers: { 'action_dispatch.show_exceptions' => true }
+ assert_response 500
+ assert_equal "application/xml", response.content_type
+ assert_match(/RuntimeError: puke/, body)
+ end
+
test "does not show filtered parameters" do
@app = DevelopmentApp