summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-08-08 23:10:20 +0000
committerChris McDonough <chrism@agendaless.com>2008-08-08 23:10:20 +0000
commitcc5e490467c105b8cce35c0bca688ed18ec93255 (patch)
treeb80b330385a9d796ea99f74b88eaaeee90d057b6 /repoze/bfg/tests
parent8fc21eb80a3c0fbe2ec4984636f86acab228d6b7 (diff)
downloadpyramid-cc5e490467c105b8cce35c0bca688ed18ec93255.tar.gz
pyramid-cc5e490467c105b8cce35c0bca688ed18ec93255.tar.bz2
pyramid-cc5e490467c105b8cce35c0bca688ed18ec93255.zip
- Add ``find_context_from_path`` and ``find_root`` traversal APIs.
In the process, make ITraverser a uni-adapter (on context) rather than a multiadapter (on context and request).
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/test_traversal.py123
-rw-r--r--repoze/bfg/tests/test_urldispatch.py8
2 files changed, 104 insertions, 27 deletions
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py
index 1ae92dcf7..075cfe85e 100644
--- a/repoze/bfg/tests/test_traversal.py
+++ b/repoze/bfg/tests/test_traversal.py
@@ -57,12 +57,10 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
from zope.interface.verify import verifyObject
from repoze.bfg.interfaces import ITraverser
context = DummyContext()
- request = DummyRequest()
- verifyObject(ITraverser, self._makeOne(context, request))
+ verifyObject(ITraverser, self._makeOne(context))
def test_call_pathel_with_no_getitem(self):
- request = DummyRequest()
- policy = self._makeOne(None, request)
+ policy = self._makeOne(None)
environ = self._getEnviron(PATH_INFO='/foo/bar')
ctx, name, subpath = policy(environ)
self.assertEqual(ctx, None)
@@ -71,8 +69,7 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
def test_call_withconn_getitem_emptypath_nosubpath(self):
root = DummyContext()
- request = DummyRequest()
- policy = self._makeOne(root, request)
+ policy = self._makeOne(root)
environ = self._getEnviron(PATH_INFO='')
ctx, name, subpath = policy(environ)
self.assertEqual(ctx, root)
@@ -82,8 +79,7 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
def test_call_withconn_getitem_withpath_nosubpath(self):
foo = DummyContext()
root = DummyContext(foo)
- request = DummyRequest()
- policy = self._makeOne(root, request)
+ policy = self._makeOne(root)
environ = self._getEnviron(PATH_INFO='/foo/bar')
ctx, name, subpath = policy(environ)
self.assertEqual(ctx, foo)
@@ -92,9 +88,8 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
def test_call_withconn_getitem_withpath_withsubpath(self):
foo = DummyContext()
- request = DummyRequest()
root = DummyContext(foo)
- policy = self._makeOne(root, request)
+ policy = self._makeOne(root)
environ = self._getEnviron(PATH_INFO='/foo/bar/baz/buz')
ctx, name, subpath = policy(environ)
self.assertEqual(ctx, foo)
@@ -103,9 +98,8 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
def test_call_with_explicit_viewname(self):
foo = DummyContext()
- request = DummyRequest()
root = DummyContext(foo)
- policy = self._makeOne(root, request)
+ policy = self._makeOne(root)
environ = self._getEnviron(PATH_INFO='/@@foo')
ctx, name, subpath = policy(environ)
self.assertEqual(ctx, root)
@@ -117,7 +111,6 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
bar = DummyContext(baz)
foo = DummyContext(bar)
root = DummyContext(foo)
- request = DummyRequest()
from zope.interface import directlyProvides
from zope.location.interfaces import ILocation
directlyProvides(root, ILocation)
@@ -126,7 +119,7 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
# give bar a direct parent and name to mix things up a bit
bar.__name__ = 'bar'
bar.__parent__ = foo
- policy = self._makeOne(root, request)
+ policy = self._makeOne(root)
environ = self._getEnviron(PATH_INFO='/foo/bar/baz')
ctx, name, subpath = policy(environ)
self.assertEqual(ctx, baz)
@@ -196,6 +189,99 @@ class ModelURLTests(unittest.TestCase):
result,
'http://example.com:5432/foo%20/bar/baz/this/theotherthing/that')
+class FindRootTests(unittest.TestCase):
+ def _getFUT(self):
+ from repoze.bfg.traversal import find_root
+ return find_root
+
+ def test_it(self):
+ dummy = DummyContext()
+ baz = DummyContext()
+ baz.__parent__ = dummy
+ baz.__name__ = 'baz'
+ dummy.__parent__ = None
+ dummy.__name__ = None
+ find = self._getFUT()
+ result = find(baz)
+ self.assertEqual(result, dummy)
+
+class FindContextFromPathTests(unittest.TestCase):
+ def _getFUT(self):
+ from repoze.bfg.traversal import find_context_from_path
+ return find_context_from_path
+
+ def _registerTraverser(self, traverser):
+ import zope.component
+ gsm = zope.component.getGlobalSiteManager()
+ from repoze.bfg.interfaces import ITraverser
+ from zope.interface import Interface
+ gsm.registerAdapter(traverser, (Interface,), ITraverser)
+
+ def test_relative_found(self):
+ dummy = DummyContext()
+ baz = DummyContext()
+ find = self._getFUT()
+ traverser = make_traverser(baz, '', [])
+ self._registerTraverser(traverser)
+ result = find(dummy, 'baz')
+ self.assertEqual(result, baz)
+
+ def test_relative_notfound(self):
+ dummy = DummyContext()
+ baz = DummyContext()
+ find = self._getFUT()
+ traverser = make_traverser(baz, 'bar', [])
+ self._registerTraverser(traverser)
+ self.assertRaises(KeyError, find, dummy, 'baz')
+
+ def test_absolute_found(self):
+ dummy = DummyContext()
+ baz = DummyContext()
+ baz.__parent__ = dummy
+ baz.__name__ = 'baz'
+ dummy.__parent__ = None
+ dummy.__name__ = None
+ find = self._getFUT()
+ traverser = make_traverser(dummy, '', [])
+ self._registerTraverser(traverser)
+ result = find(baz, '/')
+ self.assertEqual(result, dummy)
+
+ def test_absolute_found(self):
+ dummy = DummyContext()
+ baz = DummyContext()
+ baz.__parent__ = dummy
+ baz.__name__ = 'baz'
+ dummy.__parent__ = None
+ dummy.__name__ = None
+ find = self._getFUT()
+ traverser = make_traverser(dummy, '', [])
+ self._registerTraverser(traverser)
+ result = find(baz, '/')
+ self.assertEqual(result, dummy)
+ self.assertEqual(dummy.wascontext, True)
+
+ def test_absolute_notfound(self):
+ dummy = DummyContext()
+ baz = DummyContext()
+ baz.__parent__ = dummy
+ baz.__name__ = 'baz'
+ dummy.__parent__ = None
+ dummy.__name__ = None
+ find = self._getFUT()
+ traverser = make_traverser(dummy, 'fuz', [])
+ self._registerTraverser(traverser)
+ self.assertRaises(KeyError, find, baz, '/')
+ self.assertEqual(dummy.wascontext, True)
+
+def make_traverser(*args):
+ class DummyTraverser(object):
+ def __init__(self, context):
+ context.wascontext = True
+ def __call__(self, environ):
+ return args
+ return DummyTraverser
+
class DummyContext(object):
def __init__(self, next=None):
self.next = next
@@ -208,12 +294,3 @@ class DummyContext(object):
class DummyRequest:
application_url = 'http://example.com:5432/'
-class DummyTraverser:
- def __init__(self, context):
- self.context = context
-
- def __call__(self, environ, name):
- try:
- return name, self.context[name]
- except KeyError:
- return name, None
diff --git a/repoze/bfg/tests/test_urldispatch.py b/repoze/bfg/tests/test_urldispatch.py
index 0b69b5bec..84c7b5c09 100644
--- a/repoze/bfg/tests/test_urldispatch.py
+++ b/repoze/bfg/tests/test_urldispatch.py
@@ -76,9 +76,9 @@ class TestRoutesModelTraverser(unittest.TestCase):
from repoze.bfg.urldispatch import RoutesModelTraverser
return RoutesModelTraverser
- def _makeOne(self, model, request):
+ def _makeOne(self, model):
klass = self._getTargetClass()
- return klass(model, request)
+ return klass(model)
def test_class_conforms_to_ITraverser(self):
from zope.interface.verify import verifyClass
@@ -88,11 +88,11 @@ class TestRoutesModelTraverser(unittest.TestCase):
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))
+ verifyObject(ITraverser, self._makeOne(None))
def test_call(self):
model = DummyModel()
- traverser = self._makeOne(model, None)
+ traverser = self._makeOne(model)
result = traverser({})
self.assertEqual(result[0], model)
self.assertEqual(result[1], 'controller')