Error handling invokes parent exceptions (Fixes #74)
This commit is contained in:
committed by
Miguel Grinberg
parent
4a9b92b800
commit
24d74fb848
@@ -465,6 +465,90 @@ class TestMicrodot(unittest.TestCase):
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, '501')
|
||||
|
||||
def test_exception_handler_parent(self):
|
||||
app = Microdot()
|
||||
|
||||
@app.route('/')
|
||||
def index(req):
|
||||
foo = []
|
||||
return foo[1]
|
||||
|
||||
@app.errorhandler(LookupError)
|
||||
def handle_lookup_error(req, exc):
|
||||
return exc.__class__.__name__, 501
|
||||
|
||||
client = TestClient(app)
|
||||
res = client.get('/')
|
||||
self.assertEqual(res.status_code, 501)
|
||||
self.assertEqual(res.headers['Content-Type'],
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, 'IndexError')
|
||||
|
||||
def test_exception_handler_redundant_parent(self):
|
||||
app = Microdot()
|
||||
|
||||
@app.route('/')
|
||||
def index(req):
|
||||
foo = []
|
||||
return foo[1]
|
||||
|
||||
@app.errorhandler(LookupError)
|
||||
def handle_lookup_error(req, exc):
|
||||
return 'LookupError', 501
|
||||
|
||||
@app.errorhandler(IndexError)
|
||||
def handle_index_error(req, exc):
|
||||
return 'IndexError', 501
|
||||
|
||||
client = TestClient(app)
|
||||
res = client.get('/')
|
||||
self.assertEqual(res.status_code, 501)
|
||||
self.assertEqual(res.headers['Content-Type'],
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, 'IndexError')
|
||||
|
||||
def test_exception_handler_multiple_parents(self):
|
||||
app = Microdot()
|
||||
|
||||
@app.route('/')
|
||||
def index(req):
|
||||
foo = []
|
||||
return foo[1]
|
||||
|
||||
@app.errorhandler(Exception)
|
||||
def handle_generic_exception(req, exc):
|
||||
return 'Exception', 501
|
||||
|
||||
@app.errorhandler(LookupError)
|
||||
def handle_lookup_error(req, exc):
|
||||
return 'LookupError', 501
|
||||
|
||||
client = TestClient(app)
|
||||
res = client.get('/')
|
||||
self.assertEqual(res.status_code, 501)
|
||||
self.assertEqual(res.headers['Content-Type'],
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, 'LookupError')
|
||||
|
||||
def test_exception_handler_no_viable_parents(self):
|
||||
app = Microdot()
|
||||
|
||||
@app.route('/')
|
||||
def index(req):
|
||||
foo = []
|
||||
return foo[1]
|
||||
|
||||
@app.errorhandler(RuntimeError)
|
||||
def handle_runtime_error(req, exc):
|
||||
return 'RuntimeError', 501
|
||||
|
||||
client = TestClient(app)
|
||||
res = client.get('/')
|
||||
self.assertEqual(res.status_code, 500)
|
||||
self.assertEqual(res.headers['Content-Type'],
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, 'Internal server error')
|
||||
|
||||
def test_abort(self):
|
||||
app = Microdot()
|
||||
|
||||
|
||||
@@ -500,6 +500,90 @@ class TestMicrodotAsync(unittest.TestCase):
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, '501')
|
||||
|
||||
def test_exception_handler_parent(self):
|
||||
app = Microdot()
|
||||
|
||||
@app.route('/')
|
||||
def index(req):
|
||||
foo = []
|
||||
return foo[1]
|
||||
|
||||
@app.errorhandler(LookupError)
|
||||
async def handle_lookup_error(req, exc):
|
||||
return exc.__class__.__name__, 501
|
||||
|
||||
client = TestClient(app)
|
||||
res = self._run(client.get('/'))
|
||||
self.assertEqual(res.status_code, 501)
|
||||
self.assertEqual(res.headers['Content-Type'],
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, 'IndexError')
|
||||
|
||||
def test_exception_handler_redundant_parent(self):
|
||||
app = Microdot()
|
||||
|
||||
@app.route('/')
|
||||
def index(req):
|
||||
foo = []
|
||||
return foo[1]
|
||||
|
||||
@app.errorhandler(LookupError)
|
||||
async def handle_lookup_error(req, exc):
|
||||
return 'LookupError', 501
|
||||
|
||||
@app.errorhandler(IndexError)
|
||||
async def handle_index_error(req, exc):
|
||||
return 'IndexError', 501
|
||||
|
||||
client = TestClient(app)
|
||||
res = self._run(client.get('/'))
|
||||
self.assertEqual(res.status_code, 501)
|
||||
self.assertEqual(res.headers['Content-Type'],
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, 'IndexError')
|
||||
|
||||
def test_exception_handler_multiple_parents(self):
|
||||
app = Microdot()
|
||||
|
||||
@app.route('/')
|
||||
def index(req):
|
||||
foo = []
|
||||
return foo[1]
|
||||
|
||||
@app.errorhandler(Exception)
|
||||
async def handle_generic_exception(req, exc):
|
||||
return 'Exception', 501
|
||||
|
||||
@app.errorhandler(LookupError)
|
||||
async def handle_lookup_error(req, exc):
|
||||
return 'LookupError', 501
|
||||
|
||||
client = TestClient(app)
|
||||
res = self._run(client.get('/'))
|
||||
self.assertEqual(res.status_code, 501)
|
||||
self.assertEqual(res.headers['Content-Type'],
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, 'LookupError')
|
||||
|
||||
def test_exception_handler_no_viable_parents(self):
|
||||
app = Microdot()
|
||||
|
||||
@app.route('/')
|
||||
def index(req):
|
||||
foo = []
|
||||
return foo[1]
|
||||
|
||||
@app.errorhandler(RuntimeError)
|
||||
async def handle_runtime_error(req, exc):
|
||||
return 'RuntimeError', 501
|
||||
|
||||
client = TestClient(app)
|
||||
res = self._run(client.get('/'))
|
||||
self.assertEqual(res.status_code, 500)
|
||||
self.assertEqual(res.headers['Content-Type'],
|
||||
'text/plain; charset=UTF-8')
|
||||
self.assertEqual(res.text, 'Internal server error')
|
||||
|
||||
def test_abort(self):
|
||||
app = Microdot()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user