summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-08-04 07:38:58 +0000
committerChris McDonough <chrism@agendaless.com>2008-08-04 07:38:58 +0000
commite17c8d815136218d7dd07e21cf78f4104d773d48 (patch)
tree5ad65808c9f0e7828e4ec1b2c948726cffe953a6 /repoze/bfg/tests
parent39b8b920c8018dc4d124cba72794da1dcc925cce (diff)
downloadpyramid-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.zcml7
-rw-r--r--repoze/bfg/tests/fixtureapp/views.py5
-rw-r--r--repoze/bfg/tests/test_zcml.py108
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