summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2010-09-12 22:33:16 +0000
committerChris McDonough <chrism@agendaless.com>2010-09-12 22:33:16 +0000
commitad6a6706391c60dbdb66073caff1306b771da0bd (patch)
tree058fa1f42f71069112b0258bb249730231941811 /repoze/bfg/tests
parent79c11cc905bcc5eae4f1b6e63aa187551966be34 (diff)
downloadpyramid-ad6a6706391c60dbdb66073caff1306b771da0bd.tar.gz
pyramid-ad6a6706391c60dbdb66073caff1306b771da0bd.tar.bz2
pyramid-ad6a6706391c60dbdb66073caff1306b771da0bd.zip
- Add a new request API: ``request.add_finished_callback``. Finished
callbacks are called by the router unconditionally near the very end of request processing.
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/test_request.py22
-rw-r--r--repoze/bfg/tests/test_router.py56
2 files changed, 77 insertions, 1 deletions
diff --git a/repoze/bfg/tests/test_request.py b/repoze/bfg/tests/test_request.py
index 0248e10be..d8a3c09fb 100644
--- a/repoze/bfg/tests/test_request.py
+++ b/repoze/bfg/tests/test_request.py
@@ -184,6 +184,28 @@ class TestRequest(unittest.TestCase):
self.assertEqual(response.called2, True)
self.assertEqual(inst.response_callbacks, ())
+ def test_add_finished_callback(self):
+ inst = self._makeOne({})
+ self.assertEqual(inst.finished_callbacks, ())
+ def callback(request):
+ """ """
+ inst.add_finished_callback(callback)
+ self.assertEqual(inst.finished_callbacks, [callback])
+ inst.add_finished_callback(callback)
+ self.assertEqual(inst.finished_callbacks, [callback, callback])
+
+ def test__process_finished_callbacks(self):
+ inst = self._makeOne({})
+ def callback1(request):
+ request.called1 = True
+ def callback2(request):
+ request.called2 = True
+ inst.finished_callbacks = [callback1, callback2]
+ inst._process_finished_callbacks()
+ self.assertEqual(inst.called1, True)
+ self.assertEqual(inst.called2, True)
+ self.assertEqual(inst.finished_callbacks, ())
+
class Test_route_request_iface(unittest.TestCase):
def _callFUT(self, name):
from repoze.bfg.request import route_request_iface
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index fbe11968a..199602a96 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -383,7 +383,6 @@ class TestRouter(unittest.TestCase):
directlyProvides(context, IContext)
self._registerTraverserFactory(context, subpath=[''])
response = DummyResponse('200 OK')
- response.headerlist = [('a', 1)]
def view(context, request):
def callback(request, response):
response.called_back = True
@@ -396,6 +395,61 @@ class TestRouter(unittest.TestCase):
router(environ, start_response)
self.assertEqual(response.called_back, True)
+ def test_call_request_has_finished_callbacks_when_view_succeeds(self):
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ class IContext(Interface):
+ pass
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IViewClassifier
+ context = DummyContext()
+ directlyProvides(context, IContext)
+ self._registerTraverserFactory(context, subpath=[''])
+ response = DummyResponse('200 OK')
+ def view(context, request):
+ def callback(request):
+ request.environ['called_back'] = True
+ request.finished_callbacks = [callback]
+ return response
+ environ = self._makeEnviron()
+ self._registerView(view, '', IViewClassifier, IRequest, IContext)
+ router = self._makeOne()
+ start_response = DummyStartResponse()
+ router(environ, start_response)
+ self.assertEqual(environ['called_back'], True)
+
+ def test_call_request_has_finished_callbacks_when_view_raises(self):
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ class IContext(Interface):
+ pass
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IViewClassifier
+ context = DummyContext()
+ directlyProvides(context, IContext)
+ self._registerTraverserFactory(context, subpath=[''])
+ def view(context, request):
+ def callback(request):
+ request.environ['called_back'] = True
+ request.finished_callbacks = [callback]
+ raise NotImplementedError
+ environ = self._makeEnviron()
+ self._registerView(view, '', IViewClassifier, IRequest, IContext)
+ router = self._makeOne()
+ start_response = DummyStartResponse()
+ exc_raised(NotImplementedError, router, environ, start_response)
+ self.assertEqual(environ['called_back'], True)
+
+ def test_call_request_factory_raises(self):
+ # making sure finally doesnt barf when a request cannot be created
+ environ = self._makeEnviron()
+ router = self._makeOne()
+ def dummy_request_factory(environ):
+ raise NotImplementedError
+ router.request_factory = dummy_request_factory
+ start_response = DummyStartResponse()
+ exc_raised(NotImplementedError, router, environ, start_response)
+
def test_call_eventsends(self):
from repoze.bfg.interfaces import INewRequest
from repoze.bfg.interfaces import INewResponse