diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-11-01 00:48:04 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-11-01 00:48:04 +0000 |
| commit | 65476e8d2cef6b3ce105c4786645a88151a09a6c (patch) | |
| tree | 40d0c77df2fa1ba54c6bdb9df7effcc7a70049a9 /repoze/bfg/tests | |
| parent | 3052d0b41bd06314b0b1f1c78e9977b8174f637a (diff) | |
| download | pyramid-65476e8d2cef6b3ce105c4786645a88151a09a6c.tar.gz pyramid-65476e8d2cef6b3ce105c4786645a88151a09a6c.tar.bz2 pyramid-65476e8d2cef6b3ce105c4786645a88151a09a6c.zip | |
- The ZCML ``route`` directive's attributes ``xhr``,
``request_method``, ``path_info``, ``request_param``, ``header`` and
``accept`` are now *route* predicates rather than *view* predicates.
If one or more of these predicates is specified in the route
configuration, all of the predicates must return true for the route
to match a request. If one or more of the route predicates
associated with a route returns ``False`` when checked during a
request, the route match fails, and the next match in the routelist
is tried. This differs from the previous behavior, where no route
predicates existed and all predicates were considered view
predicates, because in that scenario, the next route was not tried.
Diffstat (limited to 'repoze/bfg/tests')
| -rw-r--r-- | repoze/bfg/tests/test_urldispatch.py | 39 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 317 |
2 files changed, 237 insertions, 119 deletions
diff --git a/repoze/bfg/tests/test_urldispatch.py b/repoze/bfg/tests/test_urldispatch.py index 99d5d1a98..c7dfdf196 100644 --- a/repoze/bfg/tests/test_urldispatch.py +++ b/repoze/bfg/tests/test_urldispatch.py @@ -105,6 +105,45 @@ class RoutesRootFactoryTests(unittest.TestCase): self.assertEqual(request.matchdict, routing_args) self.failUnless(req_iface.providedBy(request)) + def test_route_matches_with_predicates(self): + root_factory = DummyRootFactory(123) + req_iface = self._registerRouteRequest('foo') + mapper = self._makeOne(root_factory) + mapper.connect('archives/:action/:article', 'foo', + predicates=[lambda *arg: True]) + request = self._getRequest(PATH_INFO='/archives/action1/article1') + result = mapper(request) + self.assertEqual(result, 123) + environ = request.environ + routing_args = environ['wsgiorg.routing_args'][1] + self.assertEqual(routing_args['action'], 'action1') + self.assertEqual(routing_args['article'], 'article1') + 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_route_fails_to_match_with_predicates(self): + root_factory = DummyRootFactory(123) + foo_iface = self._registerRouteRequest('foo') + bar_iface = self._registerRouteRequest('bar') + mapper = self._makeOne(root_factory) + mapper.connect('archives/:action/article1', 'foo', + predicates=[lambda *arg: True, lambda *arg: False]) + mapper.connect('archives/:action/:article', 'bar') + request = self._getRequest(PATH_INFO='/archives/action1/article1') + result = mapper(request) + self.assertEqual(result, 123) + environ = request.environ + routing_args = environ['wsgiorg.routing_args'][1] + self.assertEqual(routing_args['action'], 'action1') + self.assertEqual(routing_args['article'], 'article1') + self.assertEqual(environ['bfg.routes.matchdict'], routing_args) + self.assertEqual(environ['bfg.routes.route'].name, 'bar') + self.assertEqual(request.matchdict, routing_args) + self.failUnless(bar_iface.providedBy(request)) + self.failIf(foo_iface.providedBy(request)) + def test_root_route_matches(self): root_factory = DummyRootFactory(123) req_iface = self._registerRouteRequest('root') diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index 8106baa03..d534559f6 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -1542,9 +1542,9 @@ class TestConnectRouteFunction(unittest.TestCase): def tearDown(self): cleanUp() - def _callFUT(self, path, name, factory): + def _callFUT(self, path, name, factory, predicates): from repoze.bfg.zcml import connect_route - return connect_route(path, name, factory) + return connect_route(path, name, factory, predicates) def _registerRoutesMapper(self): from zope.component import getSiteManager @@ -1556,8 +1556,9 @@ class TestConnectRouteFunction(unittest.TestCase): def test_defaults(self): mapper = self._registerRoutesMapper() - self._callFUT('path', 'name', 'factory') - self.assertEqual(mapper.connections, [('path', 'name', 'factory')]) + self._callFUT('path', 'name', 'factory', 'predicates') + self.assertEqual(mapper.connections, [('path', 'name', 'factory', + 'predicates')]) class TestRouteDirective(unittest.TestCase): def setUp(self): @@ -1582,10 +1583,12 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual( + route_discriminator, + ('route', 'name', False, None, None, None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) def test_with_view(self): from zope.interface import Interface @@ -1622,10 +1625,12 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual( + route_discriminator, + ('route', 'name', False, None, None, None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) def test_with_view_and_view_for(self): from zope.component import getSiteManager @@ -1658,10 +1663,11 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None,)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None, None, None,None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) def test_without_view(self): from repoze.bfg.zcml import connect_route @@ -1675,10 +1681,9 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None, None, None, None)) + self.assertEqual(route_args, ('path', 'name', None, [])) def test_with_view_request_type(self): from zope.component import getSiteManager @@ -1711,12 +1716,13 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None, None, None,None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) - def test_with_view_request_type_alias(self): + def test_with_view_request_method(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -1725,7 +1731,8 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, request_type="GET") + self._callFUT(context, 'name', 'path', view=view, + view_request_method="GET") actions = context.actions self.assertEqual(len(actions), 2) @@ -1746,12 +1753,13 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None, None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) - def test_with_view_request_method(self): + def test_with_view_containment(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -1760,8 +1768,7 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, - view_request_method="GET") + self._callFUT(context, 'name', 'path', view=view, view_containment=True) actions = context.actions self.assertEqual(len(actions), 2) @@ -1771,7 +1778,7 @@ class TestRouteDirective(unittest.TestCase): sm = getSiteManager() request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', request_type, IView, None, None, 'GET', + discrim = ('view', None, '', request_type, IView, True, None, None, 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') @@ -1782,12 +1789,13 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None,None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) - def test_with_view_request_method_alias(self): + def test_with_view_header(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -1796,7 +1804,7 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, request_method="GET") + self._callFUT(context, 'name', 'path', view=view, view_header='Host') actions = context.actions self.assertEqual(len(actions), 2) @@ -1805,10 +1813,45 @@ class TestRouteDirective(unittest.TestCase): register() sm = getSiteManager() request_type = sm.getUtility(IRouteRequest, 'name') + view_discriminator = view_action['discriminator'] + discrim = ('view', None, '', request_type, IView, None, None, None, + 'name', None, False, None, 'Host', None) + self.assertEqual(view_discriminator, discrim) + wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') + self.failUnless(wrapped) + + route_action = actions[1] + route_callable = route_action['callable'] + route_discriminator = route_action['discriminator'] + route_args = route_action['args'] + self.assertEqual(route_callable, connect_route) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None,None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) + def test_with_view_path_info(self): + from zope.component import getSiteManager + from repoze.bfg.zcml import connect_route + from repoze.bfg.interfaces import IView + from repoze.bfg.interfaces import IRouteRequest + + context = DummyContext() + def view(context, request): + """ """ + self._callFUT(context, 'name', 'path', view=view, view_path_info='/foo') + actions = context.actions + self.assertEqual(len(actions), 2) + + view_action = actions[0] + register = view_action['callable'] + register() + sm = getSiteManager() + request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', request_type, IView, None, None, 'GET', - 'name', None, False, None, None, None) + discrim = ('view', None, '', request_type, IView, None, None, None, + 'name', None, False, None, None, '/foo') self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -1818,12 +1861,13 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None, None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) - def test_with_view_containment(self): + def test_with_view_xhr(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -1832,7 +1876,7 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, view_containment=True) + self._callFUT(context, 'name', 'path', view=view, view_xhr=True) actions = context.actions self.assertEqual(len(actions), 2) @@ -1842,8 +1886,8 @@ class TestRouteDirective(unittest.TestCase): sm = getSiteManager() request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', request_type, IView, True, None, None, - 'name', None, False, None, None, None) + discrim = ('view', None, '', request_type, IView, None, None, None, + 'name', None, True, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -1853,12 +1897,13 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None, None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) - def test_with_view_containment_alias(self): + def test_with_view_accept(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -1867,7 +1912,8 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, containment=True) + self._callFUT(context, 'name', 'path', view=view, + view_accept='text/xml') actions = context.actions self.assertEqual(len(actions), 2) @@ -1877,8 +1923,8 @@ class TestRouteDirective(unittest.TestCase): sm = getSiteManager() request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', request_type, IView, True, None, None, - 'name', None, False, None, None, None) + discrim = ('view', None, '', request_type, IView, None, None, None, + 'name', None, False, 'text/xml', None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -1888,12 +1934,14 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual( + route_discriminator, + ('route', 'name', False, None, None, None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) - def test_with_view_header(self): + def test_with_request_type_GET(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -1902,7 +1950,7 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, view_header='Host') + self._callFUT(context, 'name', 'path', view=view, request_type="GET") actions = context.actions self.assertEqual(len(actions), 2) @@ -1912,8 +1960,8 @@ class TestRouteDirective(unittest.TestCase): sm = getSiteManager() request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', request_type, IView, None, None, None, - 'name', None, False, None, 'Host', None) + discrim = ('view', None, '', request_type, IView, None, None, 'GET', + 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -1923,12 +1971,15 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None, None, None,None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 0) + + # route predicates - def test_with_view_header_alias(self): + def test_with_xhr(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -1937,7 +1988,7 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, header='Host') + self._callFUT(context, 'name', 'path', view=view, xhr=True) actions = context.actions self.assertEqual(len(actions), 2) @@ -1948,7 +1999,7 @@ class TestRouteDirective(unittest.TestCase): request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] discrim = ('view', None, '', request_type, IView, None, None, None, - 'name', None, False, None, 'Host', None) + 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -1958,21 +2009,25 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', True, None, None, None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 1) + request = DummyRequest() + request.is_xhr = True + self.assertEqual(predicates[0](None, request), True) - def test_with_view_path_info(self): + def test_with_request_method(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView from repoze.bfg.interfaces import IRouteRequest - + context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, view_path_info='/foo') + self._callFUT(context, 'name', 'path', view=view, request_method="GET") actions = context.actions self.assertEqual(len(actions), 2) @@ -1981,9 +2036,10 @@ class TestRouteDirective(unittest.TestCase): register() sm = getSiteManager() request_type = sm.getUtility(IRouteRequest, 'name') + view_discriminator = view_action['discriminator'] discrim = ('view', None, '', request_type, IView, None, None, None, - 'name', None, False, None, None, '/foo') + 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -1993,21 +2049,25 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, 'GET',None, None, None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 1) + request = DummyRequest() + request.method = 'GET' + self.assertEqual(predicates[0](None, request), True) - def test_with_view_xhr(self): + def test_with_path_info(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView from repoze.bfg.interfaces import IRouteRequest - + context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, view_xhr=True) + self._callFUT(context, 'name', 'path', view=view, path_info='/foo') actions = context.actions self.assertEqual(len(actions), 2) @@ -2018,7 +2078,7 @@ class TestRouteDirective(unittest.TestCase): request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] discrim = ('view', None, '', request_type, IView, None, None, None, - 'name', None, True, None, None, None) + 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -2028,12 +2088,16 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, '/foo',None,None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 1) + request = DummyRequest() + request.path_info = '/foo' + self.assertEqual(predicates[0](None, request), True) - def test_with_view_xhr_alias(self): + def test_with_request_param(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -2042,7 +2106,7 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, xhr=True) + self._callFUT(context, 'name', 'path', view=view, request_param='abc') actions = context.actions self.assertEqual(len(actions), 2) @@ -2053,7 +2117,7 @@ class TestRouteDirective(unittest.TestCase): request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] discrim = ('view', None, '', request_type, IView, None, None, None, - 'name', None, True, None, None, None) + 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -2063,12 +2127,16 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None,'abc', None, None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 1) + request = DummyRequest() + request.params = {'abc':'123'} + self.assertEqual(predicates[0](None, request), True) - def test_with_view_accept(self): + def test_with_header(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -2077,8 +2145,7 @@ class TestRouteDirective(unittest.TestCase): context = DummyContext() def view(context, request): """ """ - self._callFUT(context, 'name', 'path', view=view, - view_accept='text/xml') + self._callFUT(context, 'name', 'path', view=view, header='Host') actions = context.actions self.assertEqual(len(actions), 2) @@ -2089,7 +2156,7 @@ class TestRouteDirective(unittest.TestCase): request_type = sm.getUtility(IRouteRequest, 'name') view_discriminator = view_action['discriminator'] discrim = ('view', None, '', request_type, IView, None, None, None, - 'name', None, False, 'text/xml', None, None) + 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -2099,12 +2166,16 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual(route_discriminator, + ('route', 'name', False, None, None,None,'Host', None)) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 1) + request = DummyRequest() + request.headers = {'Host':'example.com'} + self.assertEqual(predicates[0](None, request), True) - def test_with_view_accept_alias(self): + def test_with_accept(self): from zope.component import getSiteManager from repoze.bfg.zcml import connect_route from repoze.bfg.interfaces import IView @@ -2125,7 +2196,7 @@ class TestRouteDirective(unittest.TestCase): view_discriminator = view_action['discriminator'] discrim = ('view', None, '', request_type, IView, None, None, None, - 'name', None, False, 'text/xml', None, None) + 'name', None, False, None, None, None) self.assertEqual(view_discriminator, discrim) wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='') self.failUnless(wrapped) @@ -2135,10 +2206,15 @@ class TestRouteDirective(unittest.TestCase): route_discriminator = route_action['discriminator'] route_args = route_action['args'] self.assertEqual(route_callable, connect_route) - self.assertEqual(len(route_discriminator), 2) - self.assertEqual(route_discriminator[0], 'route') - self.assertEqual(route_discriminator[1], 'name') - self.assertEqual(route_args, ('path', 'name', None)) + self.assertEqual( + route_discriminator, + ('route', 'name', False, None, None, None, None, 'text/xml')) + self.assertEqual(route_args[:3], ('path', 'name', None)) + predicates = route_args[3] + self.assertEqual(len(predicates), 1) + request = DummyRequest() + request.accept = ['text/xml'] + self.assertEqual(predicates[0](None, request), True) class TestStaticDirective(unittest.TestCase): def setUp(self): @@ -2186,7 +2262,8 @@ class TestStaticDirective(unittest.TestCase): discriminator = action['discriminator'] args = action['args'] self.assertEqual(callable, connect_route) - self.assertEqual(discriminator, ('route', 'name')) + self.assertEqual(discriminator, + ('route', 'name', False, None, None, None, None, None)) self.assertEqual(args[0], 'name*subpath') def test_package_relative(self): @@ -2220,7 +2297,8 @@ class TestStaticDirective(unittest.TestCase): discriminator = action['discriminator'] args = action['args'] self.assertEqual(callable, connect_route) - self.assertEqual(discriminator, ('route', 'name')) + self.assertEqual(discriminator, + ('route', 'name', False, None, None, None, None, None)) self.assertEqual(args[0], 'name*subpath') def test_here_relative(self): @@ -2255,7 +2333,8 @@ class TestStaticDirective(unittest.TestCase): discriminator = action['discriminator'] args = action['args'] self.assertEqual(callable, connect_route) - self.assertEqual(discriminator, ('route', 'name')) + self.assertEqual(discriminator, + ('route', 'name', False, None, None, None, None, None)) self.assertEqual(args[0], 'name*subpath') class TestResourceDirective(unittest.TestCase): @@ -2564,8 +2643,8 @@ class DummyMapper: def __init__(self): self.connections = [] - def connect(self, *args): - self.connections.append(args) + def connect(self, path, name, factory, predicates=()): + self.connections.append((path, name, factory, predicates)) class DummyRoute: pass |
