summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-09-23 03:41:40 +0000
committerChris McDonough <chrism@agendaless.com>2009-09-23 03:41:40 +0000
commita5a9547555f07596cfc0c15a46a8d3281eb531c9 (patch)
treecd6bdf5558240526978a4cbd22966b2d35599904
parent69626ce4531664532870c950f4c1d66a0830a50a (diff)
downloadpyramid-a5a9547555f07596cfc0c15a46a8d3281eb531c9.tar.gz
pyramid-a5a9547555f07596cfc0c15a46a8d3281eb531c9.tar.bz2
pyramid-a5a9547555f07596cfc0c15a46a8d3281eb531c9.zip
Make sure we have multiview predicate dispatch ordering right.
-rw-r--r--repoze/bfg/tests/test_zcml.py93
1 files changed, 92 insertions, 1 deletions
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py
index d521250b5..89ad71cac 100644
--- a/repoze/bfg/tests/test_zcml.py
+++ b/repoze/bfg/tests/test_zcml.py
@@ -767,7 +767,6 @@ class TestViewDirective(unittest.TestCase):
context = DummyContext()
class IFoo(Interface):
pass
- view = lambda *arg: None
sm = getSiteManager()
def view(context, request):
return '123'
@@ -787,6 +786,98 @@ class TestViewDirective(unittest.TestCase):
self.assertEqual(perm, wrapper.__permitted__)
self.assertEqual(wrapper(None, None), '123')
+ def test_multiview_call_ordering(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ context = DummyContext()
+ class IFoo(Interface):
+ pass
+ def view1(context, request): return 'view1'
+ def view2(context, request): return 'view2'
+ def view3(context, request): return 'view3'
+ def view4(context, request): return 'view4'
+ def view5(context, request): return 'view5'
+ def view6(context, request): return 'view6'
+ def view7(context, request): return 'view7'
+ def view8(context, request): return 'view8'
+ self._callFUT(context, 'repoze.view', IFoo, view=view1)
+ self._callFUT(context, 'repoze.view', IFoo, view=view2,
+ request_method='POST')
+ self._callFUT(context, 'repoze.view', IFoo, view=view3,
+ request_param='param')
+ self._callFUT(context, 'repoze.view', IFoo, view=view4,
+ containment=IFoo)
+ self._callFUT(context, 'repoze.view', IFoo, view=view5,
+ request_method='POST', request_param='param')
+ self._callFUT(context, 'repoze.view', IFoo, view=view6,
+ request_method='POST', containment=IFoo)
+ self._callFUT(context, 'repoze.view', IFoo, view=view7,
+ request_param='param', containment=IFoo)
+ self._callFUT(context, 'repoze.view', IFoo, view=view8,
+ request_type='POST', request_param='param',
+ containment=IFoo)
+ for action in context.actions:
+ register = action['callable']
+ register()
+
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+
+ ctx = Dummy()
+ request = DummyRequest()
+ request.method = 'GET'
+ request.params = {}
+ self.assertEqual(wrapper(ctx, request), 'view1')
+
+ ctx = Dummy()
+ request = DummyRequest()
+ request.params = {}
+ request.method = 'POST'
+ self.assertEqual(wrapper(ctx, request), 'view2')
+
+ ctx = Dummy()
+ request = DummyRequest()
+ request.params = {'param':'1'}
+ request.method = 'GET'
+ self.assertEqual(wrapper(ctx, request), 'view3')
+
+ ctx = Dummy()
+ directlyProvides(ctx, IFoo)
+ request = DummyRequest()
+ request.method = 'GET'
+ request.params = {}
+ self.assertEqual(wrapper(ctx, request), 'view4')
+
+ ctx = Dummy()
+ request = DummyRequest()
+ request.method = 'POST'
+ request.params = {'param':'1'}
+ self.assertEqual(wrapper(ctx, request), 'view5')
+
+ ctx = Dummy()
+ directlyProvides(ctx, IFoo)
+ request = DummyRequest()
+ request.params = {}
+ request.method = 'POST'
+ self.assertEqual(wrapper(ctx, request), 'view6')
+
+ ctx = Dummy()
+ directlyProvides(ctx, IFoo)
+ request = DummyRequest()
+ request.method = 'GET'
+ request.params = {'param':'1'}
+ self.assertEqual(wrapper(ctx, request), 'view7')
+
+ ctx = Dummy()
+ directlyProvides(ctx, IFoo)
+ request = DummyRequest()
+ request.method = 'POST'
+ request.params = {'param':'1'}
+ self.assertEqual(wrapper(ctx, request), 'view8')
+
def test_multiview_replaces_multiview(self):
from zope.component import getSiteManager
from zope.interface import Interface