summaryrefslogtreecommitdiff
path: root/pecan/tests/test_hooks.py
diff options
context:
space:
mode:
Diffstat (limited to 'pecan/tests/test_hooks.py')
-rw-r--r--pecan/tests/test_hooks.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/pecan/tests/test_hooks.py b/pecan/tests/test_hooks.py
index 44963bf..8f1ca39 100644
--- a/pecan/tests/test_hooks.py
+++ b/pecan/tests/test_hooks.py
@@ -339,6 +339,78 @@ class TestHooks(PecanTestCase):
assert run_hook[4] == 'after1'
assert run_hook[5] == 'after2'
+ def test_mixin_hooks(self):
+ run_hook = []
+
+ class HelperHook(PecanHook):
+ priority = 2
+
+ def before(self, state):
+ run_hook.append('helper - before hook')
+
+ # we'll use the same hook instance to avoid duplicate calls
+ helper_hook = HelperHook()
+
+ class LastHook(PecanHook):
+ priority = 200
+
+ def before(self, state):
+ run_hook.append('last - before hook')
+
+ class SimpleHook(PecanHook):
+ priority = 1
+
+ def before(self, state):
+ run_hook.append('simple - before hook')
+
+ class HelperMixin(object):
+ __hooks__ = [helper_hook]
+
+ class LastMixin(object):
+ __hooks__ = [LastHook()]
+
+ class SubController(HookController, HelperMixin):
+ __hooks__ = [LastHook()]
+
+ @expose()
+ def index(self):
+ return "This is sub controller!"
+
+ class RootController(HookController, LastMixin):
+ __hooks__ = [SimpleHook(), helper_hook]
+
+ @expose()
+ def index(self):
+ run_hook.append('inside')
+ return 'Hello, World!'
+
+ sub = SubController()
+
+ papp = make_app(RootController())
+ app = TestApp(papp)
+ response = app.get('/')
+ assert response.status_int == 200
+ assert response.body == b_('Hello, World!')
+
+ assert len(run_hook) == 4
+ assert run_hook[0] == 'simple - before hook', run_hook[0]
+ assert run_hook[1] == 'helper - before hook', run_hook[1]
+ assert run_hook[2] == 'last - before hook', run_hook[2]
+ assert run_hook[3] == 'inside', run_hook[3]
+
+ run_hook = []
+ response = app.get('/sub/')
+ assert response.status_int == 200
+ assert response.body == b_('This is sub controller!')
+
+ assert len(run_hook) == 4, run_hook
+ assert run_hook[0] == 'simple - before hook', run_hook[0]
+ assert run_hook[1] == 'helper - before hook', run_hook[1]
+ assert run_hook[2] == 'last - before hook', run_hook[2]
+ # LastHook is invoked once again -
+ # for each different instance of the Hook in the two Controllers
+ assert run_hook[3] == 'last - before hook', run_hook[3]
+
class TestTransactionHook(PecanTestCase):
def test_transaction_hook(self):