summaryrefslogtreecommitdiff
path: root/test/test_wsgi.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_wsgi.py')
-rwxr-xr-xtest/test_wsgi.py71
1 files changed, 67 insertions, 4 deletions
diff --git a/test/test_wsgi.py b/test/test_wsgi.py
index 88ff42c..bfc6bf3 100755
--- a/test/test_wsgi.py
+++ b/test/test_wsgi.py
@@ -264,18 +264,81 @@ class TestRouteDecorator(ServerTestBase):
self.assertBody('before', '/test')
self.assertHeader('X-Hook', 'after', '/test')
- def test_environ_reflects_correct_response_after_request_in_hooks(self):
+ def test_after_request_sees_HTTPError_response(self):
""" Issue #671 """
+ called = []
@bottle.hook('after_request')
- def log_request_a():
- self.assertStatus(400)
- self.assertBody("test")
+ def after_request():
+ called.append('after')
+ self.assertEqual(400, bottle.response.status_code)
@bottle.get('/')
def _get():
+ called.append("route")
bottle.abort(400, 'test')
+ self.urlopen("/")
+ self.assertEqual(["route", "after"], called)
+
+ def test_after_request_hooks_run_after_exception(self):
+ """ Issue #671 """
+ called = []
+
+ @bottle.hook('before_request')
+ def before_request():
+ called.append('before')
+
+ @bottle.hook('after_request')
+ def after_request():
+ called.append('after')
+
+ @bottle.get('/')
+ def _get():
+ called.append("route")
+ 1/0
+
+ self.urlopen("/")
+ self.assertEqual(["before", "route", "after"], called)
+
+ def test_after_request_hooks_run_after_exception_in_before_hook(self):
+ """ Issue #671 """
+ called = []
+
+ @bottle.hook('before_request')
+ def before_request():
+ called.append('before')
+ 1 / 0
+
+ @bottle.hook('after_request')
+ def after_request():
+ called.append('after')
+
+ @bottle.get('/')
+ def _get():
+ called.append("route")
+
+ self.urlopen("/")
+ self.assertEqual(["before", "after"], called)
+
+ def test_after_request_hooks_may_rise_response_exception(self):
+ """ Issue #671 """
+ called = []
+
+ @bottle.hook('after_request')
+ def after_request():
+ called.append('after')
+ bottle.abort(400, "hook_content")
+
+ @bottle.get('/')
+ def _get():
+ called.append("route")
+ return "XXX"
+
+ self.assertInBody("hook_content", "/")
+ self.assertEqual(["route", "after"], called)
+
+
def test_template(self):
@bottle.route(template='test {{a}} {{b}}')
def test(): return dict(a=5, b=6)