diff options
Diffstat (limited to 'repoze')
| -rw-r--r-- | repoze/bfg/tests/test_traversal.py | 21 | ||||
| -rw-r--r-- | repoze/bfg/traversal.py | 15 |
2 files changed, 31 insertions, 5 deletions
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py index 4dced41ca..be75ed646 100644 --- a/repoze/bfg/tests/test_traversal.py +++ b/repoze/bfg/tests/test_traversal.py @@ -189,6 +189,16 @@ class ModelURLTests(unittest.TestCase): result, 'http://example.com:5432/foo%20/bar/baz/this/theotherthing/that') + def test_root(self): + root = DummyContext() + root.__parent__ = None + root.__name__ = None + model_url = self._getFUT() + request = DummyRequest() + result = model_url(root, request) + self.assertEqual(result, 'http://example.com:5432/') + + class FindRootTests(unittest.TestCase): def _getFUT(self): from repoze.bfg.traversal import find_root @@ -279,12 +289,19 @@ class ModelPathTests(unittest.TestCase): bar.__name__ = 'bar' baz.__parent__ = bar baz.__name__ = 'baz' - request = DummyRequest() model_path = self._getFUT() - request = DummyRequest() result = model_path(baz, 'this/theotherthing', 'that') self.assertEqual(result, '/foo /bar/baz/this/theotherthing/that') + def test_root(self): + root = DummyContext() + root.__parent__ = None + root.__name__ = None + model_path = self._getFUT() + request = DummyRequest() + result = model_path(root) + self.assertEqual(result, '/') + def make_traverser(*args): class DummyTraverser(object): diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py index f7647879b..29677fe99 100644 --- a/repoze/bfg/traversal.py +++ b/repoze/bfg/traversal.py @@ -103,6 +103,14 @@ def find_interface(model, interface): if interface.providedBy(location): return location +def _pjoin(path): + path = list(path) + path.insert(0, '') + result = '/'.join(path) + if not result: + result = '/' + return result + def model_url(model, request, *elements): """ Return the absolute URL of the model object based on the ``wsgi.url_scheme``, ``HTTP_HOST`` or ``SERVER_NAME`` in the @@ -117,7 +125,7 @@ def model_url(model, request, *elements): rpath.append(urllib.quote(location.__name__)) path = list(reversed(rpath)) path.extend(elements) - path = '/'.join(path) + path = _pjoin(path) return urlparse.urljoin(request.application_url, path) def model_path(model, *elements): @@ -132,5 +140,6 @@ def model_path(model, *elements): rpath.append(location.__name__) path = list(reversed(rpath)) path.extend(elements) - path.insert(0, '') - return '/'.join(path) + path = _pjoin(path) + return path + |
