diff options
| author | Chris McDonough <chrism@agendaless.com> | 2010-01-24 08:45:35 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2010-01-24 08:45:35 +0000 |
| commit | 333bd06861e55f97dfcaeebff100657734829add (patch) | |
| tree | 495b62d5b297a52f29f042adca5d54a319d413c2 /repoze/bfg/tests | |
| parent | cc6a44df0a8535d2bc91944ae34a2521c12c7a07 (diff) | |
| download | pyramid-333bd06861e55f97dfcaeebff100657734829add.tar.gz pyramid-333bd06861e55f97dfcaeebff100657734829add.tar.bz2 pyramid-333bd06861e55f97dfcaeebff100657734829add.zip | |
Merge reversepolarity branch.
Diffstat (limited to 'repoze/bfg/tests')
| -rw-r--r-- | repoze/bfg/tests/hybridapp/__init__.py | 1 | ||||
| -rw-r--r-- | repoze/bfg/tests/hybridapp/configure.zcml | 42 | ||||
| -rw-r--r-- | repoze/bfg/tests/hybridapp/views.py | 13 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_configuration.py | 79 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_integration.py | 25 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_router.py | 12 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_view.py | 5 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 42 |
8 files changed, 145 insertions, 74 deletions
diff --git a/repoze/bfg/tests/hybridapp/__init__.py b/repoze/bfg/tests/hybridapp/__init__.py new file mode 100644 index 000000000..5bb534f79 --- /dev/null +++ b/repoze/bfg/tests/hybridapp/__init__.py @@ -0,0 +1 @@ +# package diff --git a/repoze/bfg/tests/hybridapp/configure.zcml b/repoze/bfg/tests/hybridapp/configure.zcml new file mode 100644 index 000000000..80e9e4fe5 --- /dev/null +++ b/repoze/bfg/tests/hybridapp/configure.zcml @@ -0,0 +1,42 @@ +<configure xmlns="http://namespaces.repoze.org/bfg"> + + <include package="repoze.bfg.includes" /> + + <!-- we want this view to "win" --> + <route + view=".views.route_view" + path="abc" + name="route" /> + + <!-- .. even though this one has a more specific context --> + <view + view=".views.global_view" + context="repoze.bfg.traversal.DefaultRootFactory" + /> + + <route + path="def" + name="route2" + /> + + <!-- we want this view to win for route2 even though global view with + context is more specific --> + <view + route_name="route2" + view=".views.route2_view" + /> + + <!-- the global view should be found for this route --> + <route + path="ghi" + name="route3" + use_global_views="True" + /> + + <!-- the global view should not be found for this route --> + <route + path="jkl" + name="route4" + /> + +</configure> diff --git a/repoze/bfg/tests/hybridapp/views.py b/repoze/bfg/tests/hybridapp/views.py new file mode 100644 index 000000000..06423da83 --- /dev/null +++ b/repoze/bfg/tests/hybridapp/views.py @@ -0,0 +1,13 @@ +from webob import Response + +def route_view(request): + """ """ + return Response('route') + +def global_view(request): + """ """ + return Response('global') + +def route2_view(request): + """ """ + return Response('route2') diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py index 3ddaedd70..2e4ba3a18 100644 --- a/repoze/bfg/tests/test_configuration.py +++ b/repoze/bfg/tests/test_configuration.py @@ -30,7 +30,7 @@ class ConfiguratorTests(unittest.TestCase): if request_iface is None: request_iface = IRequest return config.registry.adapters.lookup( - (ctx_iface, request_iface), IView, name=name, + (request_iface, ctx_iface), IView, name=name, default=None) def _getRouteRequestIface(self, config, name): @@ -563,7 +563,7 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() config.add_view(view=view) wrapper = config.registry.adapters.lookup( - (Interface, IRequest), ISecuredView, name='', default=None) + (IRequest, Interface), ISecuredView, name='', default=None) self.assertEqual(wrapper, view) def test_add_view_multiview_replaces_existing_view(self): @@ -574,7 +574,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.registry.registerAdapter( - view, (Interface, IRequest), IView, name='') + view, (IRequest, Interface), IView, name='') config.add_view(view=view) wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) @@ -588,7 +588,7 @@ class ConfiguratorTests(unittest.TestCase): view = lambda *arg: 'OK' config = self._makeOne() config.registry.registerAdapter( - view, (Interface, IRequest), ISecuredView, name='') + view, (IRequest, Interface), ISecuredView, name='') config.add_view(view=view) wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) @@ -605,7 +605,7 @@ class ConfiguratorTests(unittest.TestCase): return 'OK2' config = self._makeOne() config.registry.registerAdapter( - view, (Interface, IRequest), IView, name='') + view, (IRequest, Interface), IView, name='') config.add_view(view=view2, accept='text/html') wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) @@ -628,7 +628,7 @@ class ConfiguratorTests(unittest.TestCase): view.__accept__ = 'text/html' config = self._makeOne() config.registry.registerAdapter( - view, (Interface, IRequest), IView, name='') + view, (IRequest, Interface), IView, name='') config.add_view(view=view2) wrapper = self._getViewCallable(config) self.failUnless(IMultiView.providedBy(wrapper)) @@ -645,7 +645,7 @@ class ConfiguratorTests(unittest.TestCase): from repoze.bfg.interfaces import IMultiView view = DummyMultiView() config = self._makeOne() - config.registry.registerAdapter(view, (Interface, IRequest), + config.registry.registerAdapter(view, (IRequest, Interface), IMultiView, name='') view2 = lambda *arg: 'OK2' config.add_view(view=view2) @@ -667,7 +667,7 @@ class ConfiguratorTests(unittest.TestCase): view2 = lambda *arg: 'OK2' config = self._makeOne() config.registry.registerAdapter( - view, (ISuper, IRequest), IView, name='') + view, (IRequest, ISuper), IView, name='') config.add_view(view=view2, for_=ISub) wrapper = self._getViewCallable(config, ISuper, IRequest) self.failIf(IMultiView.providedBy(wrapper)) @@ -676,26 +676,6 @@ class ConfiguratorTests(unittest.TestCase): self.failIf(IMultiView.providedBy(wrapper)) self.assertEqual(wrapper(None, None), 'OK2') - def test_add_view_multiview_request_superclass_then_subclass(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IMultiView - class ISubRequest(IRequest): - pass - view = lambda *arg: 'OK' - view2 = lambda *arg: 'OK2' - config = self._makeOne() - config.registry.registerAdapter( - view, (Interface, IRequest), IView, name='') - config.add_view(view=view2, request_type=ISubRequest) - wrapper = self._getViewCallable(config, Interface, IRequest) - self.failIf(IMultiView.providedBy(wrapper)) - self.assertEqual(wrapper(None, None), 'OK') - wrapper = self._getViewCallable(config, Interface, ISubRequest) - self.failIf(IMultiView.providedBy(wrapper)) - self.assertEqual(wrapper(None, None), 'OK2') - def test_add_view_multiview_call_ordering(self): from zope.interface import directlyProvides def view1(context, request): return 'view1' @@ -801,31 +781,44 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(renderer.path, 'repoze.bfg.tests:fixtures/minimal.txt') def test_add_view_with_request_type_as_iface(self): + from zope.interface import directlyProvides def view(context, request): return 'OK' config = self._makeOne() config.add_view(request_type=IDummy, view=view) - wrapper = self._getViewCallable(config, None, IDummy) - result = wrapper(None, None) + wrapper = self._getViewCallable(config, None) + request = self._makeRequest(config) + directlyProvides(request, IDummy) + result = wrapper(None, request) self.assertEqual(result, 'OK') def test_add_view_with_request_type_as_noniface(self): - from zope.interface import providedBy - def view(context, request): - return 'OK' + from repoze.bfg.exceptions import ConfigurationError + view = lambda *arg: 'OK' config = self._makeOne() - config.add_view(request_type=object, view=view) - request_iface = providedBy(object) - wrapper = self._getViewCallable(config, None, request_iface) - result = wrapper(None, None) - self.assertEqual(result, 'OK') + self.assertRaises(ConfigurationError, + config.add_view, view, '', None, None, object) def test_add_view_with_route_name(self): + from zope.component import ComponentLookupError view = lambda *arg: 'OK' config = self._makeOne() config.add_view(view=view, route_name='foo') - request_type = self._getRouteRequestIface(config, 'foo') - wrapper = self._getViewCallable(config, None, request_type) + self.assertEqual(len(config.registry.deferred_route_views), 1) + infos = config.registry.deferred_route_views['foo'] + self.assertEqual(len(infos), 1) + info = infos[0] + self.assertEqual(info['route_name'], 'foo') + self.assertEqual(info['view'], view) + self.assertRaises(ComponentLookupError, + self._getRouteRequestIface, config, 'foo') + wrapper = self._getViewCallable(config, None) + self.assertEqual(wrapper, None) + config.add_route('foo', '/a/b') + request_iface = self._getRouteRequestIface(config, 'foo') + self.failIfEqual(request_iface, None) + wrapper = self._getViewCallable(config, request_iface=request_iface) + self.failIfEqual(wrapper, None) self.assertEqual(wrapper(None, None), 'OK') def test_add_view_with_request_method_true(self): @@ -1363,7 +1356,7 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(route.factory.__class__, StaticRootFactory) iface = implementedBy(StaticRootFactory) wrapped = config.registry.adapters.lookup( - (iface, request_type), IView, name='') + (request_type, iface), IView, name='') request = self._makeRequest(config) self.assertEqual(wrapped(None, request).__class__, PackageURLParser) @@ -1379,7 +1372,7 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(route.factory.__class__, StaticRootFactory) iface = implementedBy(StaticRootFactory) wrapped = config.registry.adapters.lookup( - (iface, request_type), IView, name='') + (request_type, iface), IView, name='') request = self._makeRequest(config) self.assertEqual(wrapped(None, request).__class__, PackageURLParser) @@ -1398,7 +1391,7 @@ class ConfiguratorTests(unittest.TestCase): self.assertEqual(route.factory.__class__, StaticRootFactory) iface = implementedBy(StaticRootFactory) wrapped = config.registry.adapters.lookup( - (iface, request_type), IView, name='') + (request_type, iface), IView, name='') request = self._makeRequest(config) self.assertEqual(wrapped(None, request).__class__, StaticURLParser) diff --git a/repoze/bfg/tests/test_integration.py b/repoze/bfg/tests/test_integration.py index 1c6fdd01e..6affe24e1 100644 --- a/repoze/bfg/tests/test_integration.py +++ b/repoze/bfg/tests/test_integration.py @@ -36,7 +36,7 @@ class WGSIAppPlusBFGViewTests(unittest.TestCase): config = Configurator() config.scan(test_integration) reg = config.registry - view = reg.adapters.lookup((INothing, IRequest), IView, name='') + view = reg.adapters.lookup((IRequest, INothing), IView, name='') self.assertEqual(view, wsgiapptest) here = os.path.dirname(__file__) @@ -113,6 +113,29 @@ class TestCCBug(TwillBase): self.assertEqual(browser.get_code(), 200) self.assertEqual(browser.get_html(), 'juri') +class TestHybridApp(TwillBase): + # make sure views registered for a route "win" over views registered + # without one, even though the context of the non-route view may + # be more specific than the route view. + config = 'repoze.bfg.tests.hybridapp:configure.zcml' + def test_it(self): + import twill.commands + browser = twill.commands.get_browser() + browser.go('http://localhost:6543/') + self.assertEqual(browser.get_code(), 200) + self.assertEqual(browser.get_html(), 'global') + browser.go('http://localhost:6543/abc') + self.assertEqual(browser.get_code(), 200) + self.assertEqual(browser.get_html(), 'route') + browser.go('http://localhost:6543/def') + self.assertEqual(browser.get_code(), 200) + self.assertEqual(browser.get_html(), 'route2') + browser.go('http://localhost:6543/ghi') + self.assertEqual(browser.get_code(), 200) + self.assertEqual(browser.get_html(), 'global') + browser.go('http://localhost:6543/jkl') + self.assertEqual(browser.get_code(), 404) + class DummyContext(object): pass diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index c1d60ae9a..0d7bee720 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -354,7 +354,7 @@ class TestRouter(unittest.TestCase): response.app_iter = ['Hello world'] view = DummyView(response) environ = self._makeEnviron() - self._registerView(view, '', IContext, IRequest) + self._registerView(view, '', IRequest, IContext) router = self._makeOne() start_response = DummyStartResponse() result = router(environ, start_response) @@ -381,7 +381,7 @@ class TestRouter(unittest.TestCase): response = DummyResponse() view = DummyView(response) environ = self._makeEnviron() - self._registerView(view, '', IContext, IRequest) + self._registerView(view, '', IRequest, IContext) router = self._makeOne() start_response = DummyStartResponse() result = router(environ, start_response) @@ -400,7 +400,7 @@ class TestRouter(unittest.TestCase): response = DummyResponse() view = DummyView(response, raise_unauthorized=True) environ = self._makeEnviron() - self._registerView(view, '', IContext, IRequest) + self._registerView(view, '', IRequest, IContext) router = self._makeOne() start_response = DummyStartResponse() response = router(environ, start_response) @@ -419,7 +419,7 @@ class TestRouter(unittest.TestCase): response = DummyResponse() view = DummyView(response, raise_notfound=True) environ = self._makeEnviron() - self._registerView(view, '', IContext, IRequest) + self._registerView(view, '', IRequest, IContext) router = self._makeOne() start_response = DummyStartResponse() response = router(environ, start_response) @@ -441,7 +441,7 @@ class TestRouter(unittest.TestCase): request.global_response_headers = [('b', 2)] return response environ = self._makeEnviron() - self._registerView(view, '', IContext, IRequest) + self._registerView(view, '', IRequest, IContext) router = self._makeOne() start_response = DummyStartResponse() router(environ, start_response) @@ -519,7 +519,6 @@ class TestRouter(unittest.TestCase): self.assertEqual(environ['bfg.routes.matchdict'], routing_args) self.assertEqual(environ['bfg.routes.route'].name, 'foo') self.assertEqual(request.matchdict, routing_args) - self.failUnless(req_iface.providedBy(request)) def test_call_route_matches_doesnt_overwrite_subscriber_iface(self): from repoze.bfg.interfaces import INewRequest @@ -560,7 +559,6 @@ class TestRouter(unittest.TestCase): self.assertEqual(environ['bfg.routes.matchdict'], routing_args) self.assertEqual(environ['bfg.routes.route'].name, 'foo') self.assertEqual(request.matchdict, routing_args) - self.failUnless(req_iface.providedBy(request)) self.failUnless(IFoo.providedBy(request)) def test_root_factory_raises_notfound(self): diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py index 94b896893..994eb8c66 100644 --- a/repoze/bfg/tests/test_view.py +++ b/repoze/bfg/tests/test_view.py @@ -9,10 +9,9 @@ class BaseTest(object): def tearDown(self): cleanUp() - def _registerView(self, reg, app, name, *for_): + def _registerView(self, reg, app, name): from repoze.bfg.interfaces import IRequest - if not for_: - for_ = (IContext, IRequest) + for_ = (IRequest, IContext) from repoze.bfg.interfaces import IView reg.registerAdapter(app, for_, IView, name) diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index abcf8863e..4d29c8373 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -37,7 +37,7 @@ class TestViewDirective(unittest.TestCase): register = action['callable'] register() reg = get_current_registry() - wrapper = reg.adapters.lookup((IDummy, IRequest), IView, name='') + wrapper = reg.adapters.lookup((IRequest, IDummy), IView, name='') request = DummyRequest() request.method = 'GET' self.assertEqual(wrapper.__predicated__(None, request), True) @@ -45,12 +45,12 @@ class TestViewDirective(unittest.TestCase): self.assertEqual(wrapper.__predicated__(None, request), False) def test_request_type_asinterfacestring(self): + from zope.interface import directlyProvides from repoze.bfg.threadlocal import get_current_registry from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewPermission from repoze.bfg.interfaces import IRequest context = DummyContext(IDummy) - view = lambda *arg: None + view = lambda *arg: 'OK' self._callFUT(context, 'repoze.view', IDummy, view=view, request_type='whatever') actions = context.actions @@ -61,11 +61,13 @@ class TestViewDirective(unittest.TestCase): register = actions[0]['callable'] register() reg = get_current_registry() - regview = reg.adapters.lookup((IDummy, IDummy), IView, name='') - self.assertEqual(view, regview) + regview = reg.adapters.lookup((IRequest, IDummy), IView, name='') + self.assertNotEqual(view, regview) + request = DummyRequest() + directlyProvides(request, IDummy) + result = regview(None, request) + self.assertEqual(result, 'OK') self.failIf(hasattr(view, '__call_permissive__')) - perm = reg.adapters.lookup((IDummy, IRequest), IViewPermission, name='') - self.assertEqual(perm, None) def test_with_dotted_renderer(self): from repoze.bfg.threadlocal import get_current_registry @@ -89,7 +91,7 @@ class TestViewDirective(unittest.TestCase): self.assertEqual(actions[0]['discriminator'], discrim) register = actions[0]['callable'] register() - regview = reg.adapters.lookup((IDummy, IRequest), IView, name='') + regview = reg.adapters.lookup((IRequest, IDummy), IView, name='') self.assertEqual(regview(None, None).body, 'OK') def test_with_custom_predicates(self): @@ -114,7 +116,7 @@ class TestViewDirective(unittest.TestCase): self.assertEqual(actions[0]['discriminator'], discrim) register = actions[0]['callable'] register() - regview = reg.adapters.lookup((IDummy, IRequest), IView, name='') + regview = reg.adapters.lookup((IRequest, IDummy), IView, name='') self.assertEqual(regview(None, None), 'OK') def test_context_trumps_for(self): @@ -135,7 +137,7 @@ class TestViewDirective(unittest.TestCase): self.assertEqual(actions[0]['discriminator'], discrim) register = actions[0]['callable'] register() - regview = reg.adapters.lookup((IDummy, IRequest), IView, name='') + regview = reg.adapters.lookup((IRequest, IDummy), IView, name='') self.assertEqual(regview(None, None), 'OK') def test_with_for(self): @@ -155,7 +157,7 @@ class TestViewDirective(unittest.TestCase): self.assertEqual(actions[0]['discriminator'], discrim) register = actions[0]['callable'] register() - regview = reg.adapters.lookup((IDummy, IRequest), IView, name='') + regview = reg.adapters.lookup((IRequest, IDummy), IView, name='') self.assertEqual(regview(None, None), 'OK') class TestNotFoundDirective(unittest.TestCase): @@ -510,10 +512,10 @@ class TestRouteDirective(unittest.TestCase): reg = get_current_registry() request_type = reg.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', request_type, IView, None, None, None, + discrim = ('view', None, '', None, IView, None, None, None, 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) - wrapped = reg.adapters.lookup((Interface, request_type), IView, name='') + wrapped = reg.adapters.lookup((request_type, Interface), IView, name='') self.failUnless(wrapped) def test_with_view_and_view_context(self): @@ -537,10 +539,10 @@ class TestRouteDirective(unittest.TestCase): reg = get_current_registry() request_type = reg.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', IDummy, '', request_type, IView, None, None, None, + discrim = ('view', IDummy, '', None, IView, None, None, None, 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) - wrapped = reg.adapters.lookup((IDummy, request_type), IView, name='') + wrapped = reg.adapters.lookup((request_type, IDummy), IView, name='') self.failUnless(wrapped) def test_with_view_context_trumps_view_for(self): @@ -567,10 +569,10 @@ class TestRouteDirective(unittest.TestCase): reg = get_current_registry() request_type = reg.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', IDummy, '', request_type, IView, None, None, None, + discrim = ('view', IDummy, '', None, IView, None, None, None, 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) - wrapped = reg.adapters.lookup((IDummy, request_type), IView, name='') + wrapped = reg.adapters.lookup((request_type, IDummy), IView, name='') self.failUnless(wrapped) def test_with_dotted_renderer(self): @@ -604,10 +606,10 @@ class TestRouteDirective(unittest.TestCase): view_action = actions[1] request_type = reg.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', request_type, IView, None, None, None, + discrim = ('view', None, '', None, IView, None, None, None, 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) - wrapped = reg.adapters.lookup((Interface, request_type), IView, name='') + wrapped = reg.adapters.lookup((request_type, Interface), IView, name='') self.failUnless(wrapped) request = DummyRequest() result = wrapped(None, request) @@ -674,7 +676,7 @@ class TestStaticDirective(unittest.TestCase): self.assertEqual(discriminator[4], IView) iface = implementedBy(StaticRootFactory) request_type = reg.getUtility(IRouteRequest, 'name') - view = reg.adapters.lookup((iface, request_type), IView, name='') + view = reg.adapters.lookup((request_type, iface), IView, name='') request = DummyRequest() self.assertEqual(view(None, request).__class__, PackageURLParser) |
