From dc45abfdfe1ec247ce199dcedeb178146a749023 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sun, 24 Jul 2011 01:34:33 -0400 Subject: add tests for request handler bits --- pyramid/tests/test_config.py | 31 ++++++++++++++++++++++++++++ pyramid/tests/test_router.py | 48 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) 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() -- cgit v1.2.3