summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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()