summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-07-24 01:34:33 -0400
committerChris McDonough <chrism@plope.com>2011-07-24 01:34:33 -0400
commitdc45abfdfe1ec247ce199dcedeb178146a749023 (patch)
tree302e54055965a465b385d7b5ca679d213ff41f78
parentaf2323bcb169653dd2d76d7c40909fd881041beb (diff)
downloadpyramid-dc45abfdfe1ec247ce199dcedeb178146a749023.tar.gz
pyramid-dc45abfdfe1ec247ce199dcedeb178146a749023.tar.bz2
pyramid-dc45abfdfe1ec247ce199dcedeb178146a749023.zip
add tests for request handler bits
-rw-r--r--pyramid/tests/test_config.py31
-rw-r--r--pyramid/tests/test_router.py48
2 files changed, 79 insertions, 0 deletions
diff --git a/pyramid/tests/test_config.py b/pyramid/tests/test_config.py
index 88c39f36d..630fe43ce 100644
--- a/pyramid/tests/test_config.py
+++ b/pyramid/tests/test_config.py
@@ -601,6 +601,37 @@ class ConfiguratorTests(unittest.TestCase):
settings = reg.getUtility(ISettings)
self.assertEqual(settings['a'], 1)
+ def test_add_request_handlers_names_distinct(self):
+ from pyramid.interfaces import IRequestHandlerFactories
+ from pyramid.interfaces import IRequestHandlerFactory
+ def factory1(handler, registry): return handler
+ def factory2(handler, registry): return handler
+ config = self._makeOne()
+ config.add_request_handler(factory1, 'name1')
+ config.add_request_handler(factory2, 'name2')
+ config.commit()
+ names = config.registry.queryUtility(IRequestHandlerFactories)
+ self.assertEqual(names, ['name1', 'name2'])
+ f1 = config.registry.getUtility(IRequestHandlerFactory, name='name1')
+ f2 = config.registry.getUtility(IRequestHandlerFactory, name='name2')
+ self.assertEqual(f1, factory1)
+ self.assertEqual(f2, factory2)
+
+ def test_add_request_handlers_names_overlap(self):
+ from pyramid.interfaces import IRequestHandlerFactories
+ from pyramid.interfaces import IRequestHandlerFactory
+ def factory1(handler, registry): return handler
+ def factory2(handler, registry): return handler
+ def factory3(handler, registry): return handler
+ config = self._makeOne(autocommit=True)
+ config.add_request_handler(factory1, 'name1')
+ config.add_request_handler(factory2, 'name2')
+ config.add_request_handler(factory3, 'name1')
+ names = config.registry.queryUtility(IRequestHandlerFactories)
+ self.assertEqual(names, ['name1', 'name2'])
+ f3 = config.registry.getUtility(IRequestHandlerFactory, name='name1')
+ self.assertEqual(f3, factory3)
+
def test_add_subscriber_defaults(self):
from zope.interface import implements
from zope.interface import Interface
diff --git a/pyramid/tests/test_router.py b/pyramid/tests/test_router.py
index 1a70ca5a3..a1e7252e9 100644
--- a/pyramid/tests/test_router.py
+++ b/pyramid/tests/test_router.py
@@ -134,6 +134,54 @@ class TestRouter(unittest.TestCase):
router = self._makeOne()
self.assertEqual(router.request_factory, DummyRequestFactory)
+ def test_request_handler_factories(self):
+ from pyramid.interfaces import IRequestHandlerFactory
+ from pyramid.interfaces import IRequestHandlerFactories
+ L = []
+ def handler_factory1(handler, registry):
+ L.append((handler, registry))
+ def wrapper(request):
+ request.environ['handled'].append('one')
+ return handler(request)
+ wrapper.name = 'one'
+ wrapper.child = handler
+ return wrapper
+ def handler_factory2(handler, registry):
+ L.append((handler, registry))
+ def wrapper(request):
+ request.environ['handled'] = ['two']
+ return handler(request)
+ wrapper.name = 'two'
+ wrapper.child = handler
+ return wrapper
+ self.registry.registerUtility(['one', 'two'], IRequestHandlerFactories)
+ self.registry.registerUtility(handler_factory1,
+ IRequestHandlerFactory, name='one')
+ self.registry.registerUtility(handler_factory2,
+ IRequestHandlerFactory, name='two')
+ router = self._makeOne()
+ self.assertEqual(router.handle_request.name, 'two')
+ self.assertEqual(router.handle_request.child.name, 'one')
+ self.assertEqual(router.handle_request.child.child.__name__,
+ 'handle_request')
+ from pyramid.response import Response
+ from pyramid.interfaces import IViewClassifier
+ from pyramid.interfaces import IResponse
+ context = DummyContext()
+ self._registerTraverserFactory(context)
+ environ = self._makeEnviron()
+ view = DummyView('abc')
+ self._registerView(self.config.derive_view(view), '',
+ IViewClassifier, None, None)
+ start_response = DummyStartResponse()
+ def make_response(s):
+ return Response(s)
+ router.registry.registerAdapter(make_response, (str,), IResponse)
+ app_iter = router(environ, start_response)
+ self.assertEqual(app_iter, ['abc'])
+ self.assertEqual(start_response.status, '200 OK')
+ self.assertEqual(environ['handled'], ['two', 'one'])
+
def test_call_traverser_default(self):
from pyramid.httpexceptions import HTTPNotFound
environ = self._makeEnviron()