From 8392d7094c96f777f6d1d5f0c62051702191d106 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 22 Jul 2008 11:02:28 +0000 Subject: Add url-based dispatch. --- repoze/bfg/tests/test_traversal.py | 4 +- repoze/bfg/tests/test_urldispatch.py | 85 ++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 repoze/bfg/tests/test_urldispatch.py (limited to 'repoze/bfg/tests') diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py index 590a06b81..5cc7551c0 100644 --- a/repoze/bfg/tests/test_traversal.py +++ b/repoze/bfg/tests/test_traversal.py @@ -48,12 +48,12 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup): environ.update(kw) return environ - def test_class_conforms_to_IPublishTraverser(self): + def test_class_conforms_to_ITraverser(self): from zope.interface.verify import verifyClass from repoze.bfg.interfaces import ITraverser verifyClass(ITraverser, self._getTargetClass()) - def test_instance_conforms_to_IPublishTraverser(self): + def test_instance_conforms_to_ITraverser(self): from zope.interface.verify import verifyObject from repoze.bfg.interfaces import ITraverser context = DummyContext() diff --git a/repoze/bfg/tests/test_urldispatch.py b/repoze/bfg/tests/test_urldispatch.py new file mode 100644 index 000000000..a3e156861 --- /dev/null +++ b/repoze/bfg/tests/test_urldispatch.py @@ -0,0 +1,85 @@ +import unittest + +class RoutesMapperTests(unittest.TestCase): + def _getEnviron(self, **kw): + environ = {'SERVER_NAME':'localhost', + 'wsgi.url_scheme':'http'} + environ.update(kw) + return environ + + def _getTargetClass(self): + from repoze.bfg.urldispatch import RoutesMapper + return RoutesMapper + + def _makeOne(self, get_root): + klass = self._getTargetClass() + return klass(get_root) + + def test_routes_mapper_no_route_matches(self): + marker = () + get_root = make_get_root(marker) + mapper = self._makeOne(get_root) + environ = self._getEnviron(PATH_INFO='/') + result = mapper(environ) + self.assertEqual(result, marker) + + def test_routes_mapper_route_matches(self): + marker = () + get_root = make_get_root(marker) + mapper = self._makeOne(get_root) + mapper.connect('archives/:action/:article', controller='foo') + environ = self._getEnviron(PATH_INFO='/archives/action1/article1') + result = mapper(environ) + self.assertEqual(result.controller, 'foo') + self.assertEqual(result.action, 'action1') + self.assertEqual(result.article, 'article1') + + def test_url_for(self): + marker = () + get_root = make_get_root(marker) + mapper = self._makeOne(get_root) + mapper.connect('archives/:action/:article', controller='foo') + environ = self._getEnviron(PATH_INFO='/archives/action1/article1') + result = mapper(environ) + from routes import url_for + result = url_for(controller='foo', action='action2', article='article2') + self.assertEqual(result, '/archives/action2/article2') + +class TestRoutesModelTraverser(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.urldispatch import RoutesModelTraverser + return RoutesModelTraverser + + def _makeOne(self, model, request): + klass = self._getTargetClass() + return klass(model, request) + + def test_class_conforms_to_ITraverser(self): + from zope.interface.verify import verifyClass + from repoze.bfg.interfaces import ITraverser + verifyClass(ITraverser, self._getTargetClass()) + + def test_instance_conforms_to_ITraverser(self): + from zope.interface.verify import verifyObject + from repoze.bfg.interfaces import ITraverser + verifyObject(ITraverser, self._makeOne(None, None)) + + def test_call(self): + model = DummyModel() + traverser = self._makeOne(model, None) + result = traverser({}) + self.assertEqual(result[0], model) + self.assertEqual(result[1], 'controller') + self.assertEqual(result[2], '') + +class DummyModel: + controller = 'controller' + +def make_get_root(result): + def dummy_get_root(environ): + return result + return dummy_get_root + + + + -- cgit v1.2.3