diff options
| author | Chris McDonough <chrism@agendaless.com> | 2008-08-04 07:38:58 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2008-08-04 07:38:58 +0000 |
| commit | e17c8d815136218d7dd07e21cf78f4104d773d48 (patch) | |
| tree | 5ad65808c9f0e7828e4ec1b2c948726cffe953a6 /repoze/bfg/tests | |
| parent | 39b8b920c8018dc4d124cba72794da1dcc925cce (diff) | |
| download | pyramid-e17c8d815136218d7dd07e21cf78f4104d773d48.tar.gz pyramid-e17c8d815136218d7dd07e21cf78f4104d773d48.tar.bz2 pyramid-e17c8d815136218d7dd07e21cf78f4104d773d48.zip | |
- Add a ``request_type`` attribute to the available attributes of a
``bfg:view`` configure.zcml element. This attribute will have a
value which is a dotted Python path, pointing at an interface. If
the request object implements this interface when the view lookup
is performed, the appropriate view will be called.
- Remove "template only" views. These were just confusing and were
never documented.
Diffstat (limited to 'repoze/bfg/tests')
| -rw-r--r-- | repoze/bfg/tests/fixtureapp/configure.zcml | 7 | ||||
| -rw-r--r-- | repoze/bfg/tests/fixtureapp/views.py | 5 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 108 |
3 files changed, 31 insertions, 89 deletions
diff --git a/repoze/bfg/tests/fixtureapp/configure.zcml b/repoze/bfg/tests/fixtureapp/configure.zcml index 265d69511..dfedda7bb 100644 --- a/repoze/bfg/tests/fixtureapp/configure.zcml +++ b/repoze/bfg/tests/fixtureapp/configure.zcml @@ -5,16 +5,17 @@ <include package="repoze.bfg" /> <bfg:view - for=".models.IFixture" view=".views.fixture_view" + for=".models.IFixture" permission="repoze.view" /> <bfg:view + view=".views.fixture_view" for=".models.IFixture" - template="templates/fixture.pt" + name="dummyskin.html" permission="repoze.view" - name="fixture.html" + request_type=".views.IDummy" /> </configure> diff --git a/repoze/bfg/tests/fixtureapp/views.py b/repoze/bfg/tests/fixtureapp/views.py index 2babbc59c..ccf0e4811 100644 --- a/repoze/bfg/tests/fixtureapp/views.py +++ b/repoze/bfg/tests/fixtureapp/views.py @@ -1,3 +1,8 @@ +from zope.interface import Interface + def fixture_view(context, request): return None +class IDummy(Interface): + pass + diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index f8ef78ff8..663022796 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -13,54 +13,37 @@ class TestViewDirective(unittest.TestCase, PlacelessSetup): from repoze.bfg.zcml import view return view - def test_no_class_or_template(self): + def test_no_view(self): f = self._getFUT() from zope.configuration.exceptions import ConfigurationError context = DummyContext() self.assertRaises(ConfigurationError, f, context, 'repoze.view', None) - def test_no_such_file(self): - f = self._getFUT() - from zope.configuration.exceptions import ConfigurationError - context = DummyContext() - self.assertRaises(ConfigurationError, f, context, 'repoze.view', None, - template='notthere.pt') - - def test_only_template(self): + def test_only_view(self): f = self._getFUT() context = DummyContext() class IFoo: pass - f(context, 'repoze.view', IFoo, template='minimal.pt') + def view(context, request): + pass + f(context, 'repoze.view', IFoo, view=view) actions = context.actions - from repoze.bfg.interfaces import ITemplate - from repoze.bfg.interfaces import IView from repoze.bfg.interfaces import IRequest + from repoze.bfg.interfaces import IView from repoze.bfg.interfaces import IViewPermission from repoze.bfg.security import ViewPermissionFactory from zope.component.zcml import handler from zope.component.interface import provideInterface - self.assertEqual(len(actions), 4) - - regutil_discriminator = ('utility', ITemplate, - context.path('minimal.pt')) - regutil = actions[0] - self.assertEqual(regutil['discriminator'], regutil_discriminator) - self.assertEqual(regutil['callable'], handler) - self.assertEqual(regutil['args'][0], 'registerUtility') - self.assertEqual(regutil['args'][1].template.filename, - context.path('minimal.pt')) - self.assertEqual(regutil['args'][2], ITemplate) - self.assertEqual(regutil['args'][3], context.path('minimal.pt')) + self.assertEqual(len(actions), 3) - provide = actions[1] + provide = actions[0] self.assertEqual(provide['discriminator'], None) self.assertEqual(provide['callable'], provideInterface) self.assertEqual(provide['args'][0], '') self.assertEqual(provide['args'][1], IFoo) - - permission = actions[2] + + permission = actions[1] permission_discriminator = ('permission', IFoo, '', IRequest, IViewPermission) self.assertEqual(permission['discriminator'], permission_discriminator) @@ -72,29 +55,27 @@ class TestViewDirective(unittest.TestCase, PlacelessSetup): self.assertEqual(permission['args'][3], IViewPermission) self.assertEqual(permission['args'][4], '') self.assertEqual(permission['args'][5], None) - - regadapt = actions[3] + + regadapt = actions[2] regadapt_discriminator = ('view', IFoo, '', IRequest, IView) self.assertEqual(regadapt['discriminator'], regadapt_discriminator) self.assertEqual(regadapt['callable'], handler) self.assertEqual(regadapt['args'][0], 'registerAdapter') - self.assertEqual(regadapt['args'][1].template, - context.path('minimal.pt')) + self.assertEqual(regadapt['args'][1], view) self.assertEqual(regadapt['args'][2], (IFoo, IRequest)) self.assertEqual(regadapt['args'][3], IView) self.assertEqual(regadapt['args'][4], '') self.assertEqual(regadapt['args'][5], None) - def test_only_factory(self): + def test_request_type(self): f = self._getFUT() context = DummyContext() class IFoo: pass def view(context, request): pass - f(context, 'repoze.view', IFoo, view=view) + f(context, 'repoze.view', IFoo, view=view, request_type=IDummy) actions = context.actions - from repoze.bfg.interfaces import IRequest from repoze.bfg.interfaces import IView from repoze.bfg.interfaces import IViewPermission from repoze.bfg.security import ViewPermissionFactory @@ -110,77 +91,29 @@ class TestViewDirective(unittest.TestCase, PlacelessSetup): self.assertEqual(provide['args'][1], IFoo) permission = actions[1] - permission_discriminator = ('permission', IFoo, '', IRequest, + permission_discriminator = ('permission', IFoo, '', IDummy, IViewPermission) self.assertEqual(permission['discriminator'], permission_discriminator) self.assertEqual(permission['callable'], handler) self.assertEqual(permission['args'][0], 'registerAdapter') self.failUnless(isinstance(permission['args'][1],ViewPermissionFactory)) self.assertEqual(permission['args'][1].permission_name, 'repoze.view') - self.assertEqual(permission['args'][2], (IFoo, IRequest)) + self.assertEqual(permission['args'][2], (IFoo, IDummy)) self.assertEqual(permission['args'][3], IViewPermission) self.assertEqual(permission['args'][4], '') self.assertEqual(permission['args'][5], None) regadapt = actions[2] - regadapt_discriminator = ('view', IFoo, '', IRequest, IView) + regadapt_discriminator = ('view', IFoo, '', IDummy, IView) self.assertEqual(regadapt['discriminator'], regadapt_discriminator) self.assertEqual(regadapt['callable'], handler) self.assertEqual(regadapt['args'][0], 'registerAdapter') self.assertEqual(regadapt['args'][1], view) - self.assertEqual(regadapt['args'][2], (IFoo, IRequest)) + self.assertEqual(regadapt['args'][2], (IFoo, IDummy)) self.assertEqual(regadapt['args'][3], IView) self.assertEqual(regadapt['args'][4], '') self.assertEqual(regadapt['args'][5], None) - def test_template_and_factory(self): - f = self._getFUT() - context = DummyContext() - from zope.configuration.exceptions import ConfigurationError - self.assertRaises(ConfigurationError, f, context, 'repoze.view', - None, view=object, template='minimal.pt') - -class TemplateOnlyViewFactoryTests(unittest.TestCase, PlacelessSetup): - def setUp(self): - PlacelessSetup.setUp(self) - - def tearDown(self): - PlacelessSetup.tearDown(self) - - def _getTargetClass(self): - from repoze.bfg.zcml import TemplateOnlyViewFactory - return TemplateOnlyViewFactory - - def _zcmlConfigure(self): - import repoze.bfg - import zope.configuration.xmlconfig - zope.configuration.xmlconfig.file('configure.zcml', package=repoze.bfg) - - def _getTemplatePath(self, name): - import os - here = os.path.abspath(os.path.dirname(__file__)) - return os.path.join(here, 'fixtures', name) - - def _makeOne(self, *arg, **kw): - klass = self._getTargetClass() - return klass(*arg, **kw) - - def test_call(self): - self._zcmlConfigure() - path = self._getTemplatePath('minimal.pt') - view = self._makeOne(path) - result = view(None, None) - from webob import Response - self.failUnless(isinstance(result, Response)) - self.assertEqual(result.app_iter, ['<div>\n</div>']) - self.assertEqual(result.status, '200 OK') - self.assertEqual(len(result.headerlist), 2) - - def test_call_no_template(self): - self._zcmlConfigure() - view = self._makeOne('nosuch') - self.assertRaises(ValueError, view, None, None) - class TestSampleApp(unittest.TestCase, PlacelessSetup): def setUp(self): PlacelessSetup.setUp(self) @@ -224,5 +157,8 @@ class DummyContext: 'args':args} ) +from zope.interface import Interface +class IDummy(Interface): + pass |
