summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests/test_zcml.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-10-18 05:50:54 +0000
committerChris McDonough <chrism@agendaless.com>2009-10-18 05:50:54 +0000
commit1dc3907e59995852d5ee0251c1c92a360f03ed35 (patch)
tree38da7879503f2b55b995cee89a2aebe6c7d6f076 /repoze/bfg/tests/test_zcml.py
parent2cce431f02a37c119eacfc3dfa94af9fe3305de1 (diff)
downloadpyramid-1dc3907e59995852d5ee0251c1c92a360f03ed35.tar.gz
pyramid-1dc3907e59995852d5ee0251c1c92a360f03ed35.tar.bz2
pyramid-1dc3907e59995852d5ee0251c1c92a360f03ed35.zip
- The ``@bfg_view`` decorator can now be used against a class method::
from webob import Response from repoze.bfg.view import bfg_view class MyView(object): def __init__(self, context, request): self.context = context self.request = request @bfg_view(name='hello') def amethod(self): return Response('hello from %s!' % self.context) When the bfg_view decorator is used against a class method, a view is registered for the *class* (it's a "class view" where the "attr" happens to be the method they're attached to), so the view class must have a suitable constructor.
Diffstat (limited to 'repoze/bfg/tests/test_zcml.py')
-rw-r--r--repoze/bfg/tests/test_zcml.py94
1 files changed, 93 insertions, 1 deletions
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py
index 7538072ca..282c27472 100644
--- a/repoze/bfg/tests/test_zcml.py
+++ b/repoze/bfg/tests/test_zcml.py
@@ -2388,7 +2388,7 @@ class TestBFGViewGrokker(unittest.TestCase):
request_type=IRequest, route_name=None,
request_method=None, request_param=None,
containment=None, attr=None, renderer=None,
- wrapper_viewname=None, xhr=False, header=None,
+ wrapper=None, xhr=False, header=None,
accept=None)
obj.__bfg_view_settings__ = [settings]
context = DummyContext()
@@ -2413,6 +2413,98 @@ class TestBFGViewGrokker(unittest.TestCase):
actions = context.actions
self.assertEqual(len(actions), 0)
+class TestBFGClassGrokker(unittest.TestCase):
+ def setUp(self):
+ cleanUp()
+
+ def tearDown(self):
+ cleanUp()
+
+ def _getTargetClass(self):
+ from repoze.bfg.zcml import BFGClassGrokker
+ return BFGClassGrokker
+
+ def _makeOne(self, *arg, **kw):
+ return self._getTargetClass()(*arg, **kw)
+
+ def test_calls_bfg_view_grokker(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from zope.interface import Interface
+ class obj:
+ def __init__(self, context, request):
+ pass
+ def __call__(self):
+ return 'OK'
+ settings = dict(permission='foo', for_=Interface, name='foo.html',
+ request_type=IRequest, route_name=None,
+ request_method=None, request_param=None,
+ containment=None, attr=None, renderer=None,
+ wrapper=None, xhr=False, header=None,
+ accept=None)
+ obj.__bfg_view_settings__ = [settings]
+ grokker = self._makeOne()
+ context = DummyContext()
+ result = grokker.grok('name', obj, context=context)
+ self.assertEqual(result, True)
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ register = actions[0]['callable']
+ register()
+ sm = getSiteManager()
+ wrapped = sm.adapters.lookup((Interface, IRequest), IView,
+ name='foo.html')
+ self.assertEqual(wrapped(None, None), 'OK')
+
+ def test_it(self):
+ from repoze.bfg.interfaces import IRequest
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IView
+ class base(object):
+ def basemethod(self):
+ """ """
+ basemethod.__bfg_view_settings__ = [
+ dict(permission=None, for_=Interface, name='basemethod',
+ request_type=IRequest, route_name=None,
+ request_method=None, request_param=None,
+ containment=None, attr=None, renderer=None,
+ wrapper=None, xhr=False, header=None,
+ accept=None)
+ ]
+
+ class obj(base):
+ def __init__(self, context, request):
+ pass
+ def foo(self):
+ return 'OK'
+ foo.__bfg_view_settings__ = [
+ dict(permission=None, for_=Interface, name='foo',
+ request_type=IRequest, route_name=None,
+ request_method=None, request_param=None,
+ containment=None, attr=None, renderer=None,
+ wrapper=None, xhr=False, header=None,
+ accept=None)
+ ]
+
+ grokker = self._makeOne()
+ context = DummyContext()
+ result = grokker.grok('name', obj, context=context)
+ self.assertEqual(result, True)
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ register = actions[0]['callable']
+ register()
+ sm = getSiteManager()
+ wrapped = sm.adapters.lookup((Interface, IRequest), IView,
+ name='foo')
+ self.assertEqual(wrapped(None, None), 'OK')
+ wrapped = sm.adapters.lookup((Interface, IRequest), IView,
+ name='basemethod')
+ # base methods not grokked
+ self.assertEqual(wrapped, None)
+
class TestZCMLScanDirective(unittest.TestCase):
def setUp(self):
cleanUp()