summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-11-02 12:23:26 +0000
committerChris McDonough <chrism@agendaless.com>2009-11-02 12:23:26 +0000
commit49304cecdf2c51888ee4ff42ec6496207186ad9b (patch)
tree82172ae270dfd0d5d972f65d4669c93219c9f469 /repoze/bfg/tests
parent32d95886503540052d9b7075c9ce3326b042bb08 (diff)
downloadpyramid-49304cecdf2c51888ee4ff42ec6496207186ad9b.tar.gz
pyramid-49304cecdf2c51888ee4ff42ec6496207186ad9b.tar.bz2
pyramid-49304cecdf2c51888ee4ff42ec6496207186ad9b.zip
- Add a new event type: ``repoze.bfg.events.AfterTraversal``. Events
of this type will be sent after traversal is completed, but before any view code is invoked. Like ``repoze.bfg.events.NewRequest``, This event will have a single attribute: ``request`` representing the current request. Unlike the request attribute of ``repoze.bfg.events.NewRequest`` however, during an AfterTraversal event, the request object will possess attributes set by the traverser, most notably ``context``, which will be the context used when a view is found and invoked. The interface ``repoze.bfg.events.IAfterTraversal`` can be used to subscribe to the event. For example:: <subscriber for="repoze.bfg.interfaces.IAfterTraversal" handler="my.app.handle_after_traverse"/> Like any framework event, a subscriber function should expect one parameter: ``event``.
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/test_events.py25
-rw-r--r--repoze/bfg/tests/test_router.py8
2 files changed, 31 insertions, 2 deletions
diff --git a/repoze/bfg/tests/test_events.py b/repoze/bfg/tests/test_events.py
index d7ab772f5..f1cbfff5b 100644
--- a/repoze/bfg/tests/test_events.py
+++ b/repoze/bfg/tests/test_events.py
@@ -66,6 +66,31 @@ class WSGIAppEventTests(unittest.TestCase):
from zope.interface.verify import verifyClass
verifyClass(IWSGIApplicationCreatedEvent, WSGIApplicationCreatedEvent)
+class AfterTraversalEventTests(unittest.TestCase):
+ def _getTargetClass(self):
+ from repoze.bfg.events import AfterTraversal
+ return AfterTraversal
+
+ def _makeOne(self, request):
+ return self._getTargetClass()(request)
+
+ def test_class_implements(self):
+ from repoze.bfg.interfaces import IAfterTraversal
+ from zope.interface.verify import verifyClass
+ klass = self._getTargetClass()
+ verifyClass(IAfterTraversal, klass)
+
+ def test_instance_implements(self):
+ from repoze.bfg.interfaces import IAfterTraversal
+ from zope.interface.verify import verifyObject
+ request = DummyRequest()
+ inst = self._makeOne(request)
+ verifyObject(IAfterTraversal, inst)
+
+ def test_ctor(self):
+ request = DummyRequest()
+ inst = self._makeOne(request)
+ self.assertEqual(inst.request, request)
class DummyRequest:
pass
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index 1e5382dde..d5bc8cd66 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -382,6 +382,9 @@ class TestRouter(unittest.TestCase):
self.assertEqual(start_response.headers, [('a', 1), ('b', 2)])
def test_call_eventsends(self):
+ from repoze.bfg.interfaces import INewRequest
+ from repoze.bfg.interfaces import INewResponse
+ from repoze.bfg.interfaces import IAfterTraversal
context = DummyContext()
self._registerTraverserFactory(context)
response = DummyResponse()
@@ -389,15 +392,16 @@ class TestRouter(unittest.TestCase):
view = DummyView(response)
environ = self._makeEnviron()
self._registerView(view, '', None, None)
- from repoze.bfg.interfaces import INewRequest
- from repoze.bfg.interfaces import INewResponse
request_events = self._registerEventListener(INewRequest)
+ aftertraversal_events = self._registerEventListener(IAfterTraversal)
response_events = self._registerEventListener(INewResponse)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
self.assertEqual(len(request_events), 1)
self.assertEqual(request_events[0].request.environ, environ)
+ self.assertEqual(len(aftertraversal_events), 1)
+ self.assertEqual(aftertraversal_events[0].request.environ, environ)
self.assertEqual(len(response_events), 1)
self.assertEqual(response_events[0].response, response)