From 70f1cda02f9acccf7ee1c8ad1a7ade36fba10dba Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 14 Sep 2010 12:11:44 +0000 Subject: - The ``add_route`` method of a Configurator now accepts a ``pregenerator`` argument. The pregenerator for the resulting route is called by ``route_url`` in order to adjust the set of arguments passed to it by the user for special purposes, such as Pylons 'subdomain' support. It will influence the URL returned by ``route_url``. See the ``repoze.bfg.interfaces.IRoutePregenerator`` interface for more information. --- repoze/bfg/tests/test_configuration.py | 5 +++++ repoze/bfg/tests/test_url.py | 40 ++++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 11 deletions(-) (limited to 'repoze/bfg/tests') diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py index b095c5c4c..47649d6ba 100644 --- a/repoze/bfg/tests/test_configuration.py +++ b/repoze/bfg/tests/test_configuration.py @@ -2024,6 +2024,11 @@ class ConfiguratorTests(unittest.TestCase): config = self._makeOne() self.assertRaises(ConfigurationError, config.add_route, 'name') + def test_add_route_with_pregenerator(self): + config = self._makeOne() + route = config.add_route('name', 'pattern', pregenerator='123') + self.assertEqual(route.pregenerator, '123') + def test__override_not_yet_registered(self): from repoze.bfg.interfaces import IPackageOverrides package = DummyPackage('package') diff --git a/repoze/bfg/tests/test_url.py b/repoze/bfg/tests/test_url.py index e38c6a8eb..1b6f7814c 100644 --- a/repoze/bfg/tests/test_url.py +++ b/repoze/bfg/tests/test_url.py @@ -150,7 +150,7 @@ class TestRouteUrl(unittest.TestCase): def test_with_elements(self): from repoze.bfg.interfaces import IRoutesMapper request = _makeRequest() - mapper = DummyRoutesMapper(result='/1/2/3') + mapper = DummyRoutesMapper(route=DummyRoute('/1/2/3')) request.registry.registerUtility(mapper, IRoutesMapper) result = self._callFUT('flub', request, 'extra1', 'extra2', a=1, b=2, c=3, _query={'a':1}, @@ -161,7 +161,7 @@ class TestRouteUrl(unittest.TestCase): def test_no_elements(self): from repoze.bfg.interfaces import IRoutesMapper request = _makeRequest() - mapper = DummyRoutesMapper(result='/1/2/3') + mapper = DummyRoutesMapper(route=DummyRoute('/1/2/3')) request.registry.registerUtility(mapper, IRoutesMapper) result = self._callFUT('flub', request, a=1, b=2, c=3, _query={'a':1}, _anchor=u"foo") @@ -178,23 +178,37 @@ class TestRouteUrl(unittest.TestCase): def test_generate_doesnt_receive_query_or_anchor(self): from repoze.bfg.interfaces import IRoutesMapper - mapper = DummyRoutesMapper(result='') + route = DummyRoute(result='') + mapper = DummyRoutesMapper(route=route) from zope.component import getSiteManager sm = getSiteManager() sm.registerUtility(mapper, IRoutesMapper) request = DummyRequest() result = self._callFUT('flub', request, _query=dict(name='some_name')) - self.assertEqual(mapper.kw, {}) # shouldnt have anchor/query + self.assertEqual(route.kw, {}) # shouldnt have anchor/query self.assertEqual(result, 'http://example.com:5432?name=some_name') def test_with_app_url(self): from repoze.bfg.interfaces import IRoutesMapper request = _makeRequest() - mapper = DummyRoutesMapper(result='/1/2/3') + mapper = DummyRoutesMapper(route=DummyRoute(result='/1/2/3')) request.registry.registerUtility(mapper, IRoutesMapper) result = self._callFUT('flub', request, _app_url='http://example2.com') self.assertEqual(result, 'http://example2.com/1/2/3') + def test_with_pregenerator(self): + from repoze.bfg.interfaces import IRoutesMapper + request = _makeRequest() + route = DummyRoute(result='/1/2/3') + def pregenerator(request, elements, kw): + return ('a',), {'_app_url':'http://example2.com'} + route.pregenerator = pregenerator + mapper = DummyRoutesMapper(route=route) + request.registry.registerUtility(mapper, IRoutesMapper) + result = self._callFUT('flub', request) + self.assertEqual(result, 'http://example2.com/1/2/3/a') + self.assertEqual(route.kw, {}) # shouldnt have anchor/query + class TestStaticUrl(unittest.TestCase): def setUp(self): cleanUp() @@ -259,14 +273,19 @@ class DummyRequest: class DummyRoutesMapper: raise_exc = None - def __init__(self, result='/1/2/3', raise_exc=False, routes=()): + def __init__(self, route=None, raise_exc=False): + self.route = route + + def get_route(self, route_name): + return self.route + +class DummyRoute: + pregenerator = None + def __init__(self, result='/1/2/3'): self.result = result - self.routes = routes - def generate(self, *route_args, **kw): + def generate(self, kw): self.kw = kw - if self.raise_exc: - raise self.raise_exc return self.result def _makeRequest(environ=None): @@ -274,7 +293,6 @@ def _makeRequest(environ=None): request = DummyRequest(environ) request.registry = Registry() return request - class DummyStaticURLInfo: def __init__(self, result): -- cgit v1.2.3