mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
setting status to 404 in error handler should not trigger not_found handler, fixes #541
This commit is contained in:
parent
f1b7c3a146
commit
86bc9ac094
4 changed files with 70 additions and 21 deletions
3
CHANGES
3
CHANGES
|
@ -67,6 +67,9 @@
|
|||
|
||||
* Default to only serving localhost in development mode. (Postmodern)
|
||||
|
||||
* Setting status code to 404 in error handler no longer triggers not_found
|
||||
handler. (Konstantin Haase)
|
||||
|
||||
* Improve documentation. (Kashyap, Stanislav Chistenko, Zachary Scott,
|
||||
Anthony Accomazzo, Peter Suschlik, Rachel Mehl, ymmtmsys, Anurag Priyam,
|
||||
burningTyger, Tony Miller, akicho8, Vasily Polovnyov, Markus Prinz,
|
||||
|
|
|
@ -849,7 +849,7 @@ module Sinatra
|
|||
|
||||
@response['Content-Type'] = nil
|
||||
invoke { dispatch! }
|
||||
invoke { error_block!(response.status) }
|
||||
invoke { error_block!(response.status) } unless @env['sinatra.error']
|
||||
|
||||
unless @response['Content-Type']
|
||||
if Array === body and body[0].respond_to? :content_type
|
||||
|
|
|
@ -280,6 +280,72 @@ class HelpersTest < Test::Unit::TestCase
|
|||
assert_equal 'FAIL', body
|
||||
end
|
||||
|
||||
it 'should not invoke error handler when setting status inside an error handler' do
|
||||
mock_app do
|
||||
disable :raise_errors
|
||||
not_found do
|
||||
body "not_found handler"
|
||||
status 404
|
||||
end
|
||||
|
||||
error do
|
||||
body "error handler"
|
||||
status 404
|
||||
end
|
||||
|
||||
get '/' do
|
||||
raise
|
||||
end
|
||||
end
|
||||
|
||||
get '/'
|
||||
assert_equal 404, status
|
||||
assert_equal 'error handler', body
|
||||
end
|
||||
|
||||
it 'should not invoke error handler when halting with 500 inside an error handler' do
|
||||
mock_app do
|
||||
disable :raise_errors
|
||||
not_found do
|
||||
body "not_found handler"
|
||||
halt 404
|
||||
end
|
||||
|
||||
error do
|
||||
body "error handler"
|
||||
halt 404
|
||||
end
|
||||
|
||||
get '/' do
|
||||
raise
|
||||
end
|
||||
end
|
||||
|
||||
get '/'
|
||||
assert_equal 404, status
|
||||
assert_equal 'error handler', body
|
||||
end
|
||||
|
||||
it 'should not invoke not_found handler when halting with 404 inside a not found handler' do
|
||||
mock_app do
|
||||
disable :raise_errors
|
||||
|
||||
not_found do
|
||||
body "not_found handler"
|
||||
halt 500
|
||||
end
|
||||
|
||||
error do
|
||||
body "error handler"
|
||||
halt 500
|
||||
end
|
||||
end
|
||||
|
||||
get '/'
|
||||
assert_equal 500, status
|
||||
assert_equal 'not_found handler', body
|
||||
end
|
||||
|
||||
it 'uses a 500 status code when first argument is a body' do
|
||||
mock_app do
|
||||
get('/') do
|
||||
|
|
|
@ -281,25 +281,5 @@ class MappedErrorTest < Test::Unit::TestCase
|
|||
assert_equal 507, status
|
||||
assert_equal 'Error: 507', body
|
||||
end
|
||||
|
||||
class FooError < RuntimeError
|
||||
end
|
||||
|
||||
it 'runs after exception mappings and overwrites body' do
|
||||
mock_app do
|
||||
set :raise_errors, false
|
||||
error FooError do
|
||||
response.status = 502
|
||||
'from exception mapping'
|
||||
end
|
||||
error(500) { 'from 500 handler' }
|
||||
error(502) { 'from custom error page' }
|
||||
|
||||
get('/') { raise FooError }
|
||||
end
|
||||
get '/'
|
||||
assert_equal 502, status
|
||||
assert_equal 'from custom error page', body
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue