summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests/test_view.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-09-01 01:52:14 +0000
committerChris McDonough <chrism@agendaless.com>2008-09-01 01:52:14 +0000
commit7e2c6cbb452aa986891b2a99653a147bfb053e19 (patch)
treeb4c2bbfee120b1796b2bbe08673f9ab11a4e220c /repoze/bfg/tests/test_view.py
parent5d906eae19891ba8074a233d167cb371fe89deb0 (diff)
downloadpyramid-7e2c6cbb452aa986891b2a99653a147bfb053e19.tar.gz
pyramid-7e2c6cbb452aa986891b2a99653a147bfb053e19.tar.bz2
pyramid-7e2c6cbb452aa986891b2a99653a147bfb053e19.zip
- New API module: ``repoze.bfg.view``. This module contains the functions
named ``render_view_to_response``, ``render_view_to_iterable`` and ``is_response``, which are documented in the API docs. These features aid programmatic (non-request-driven) view execution.
Diffstat (limited to 'repoze/bfg/tests/test_view.py')
-rw-r--r--repoze/bfg/tests/test_view.py284
1 files changed, 284 insertions, 0 deletions
diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py
new file mode 100644
index 000000000..3b776b14f
--- /dev/null
+++ b/repoze/bfg/tests/test_view.py
@@ -0,0 +1,284 @@
+import unittest
+
+from zope.component.testing import PlacelessSetup
+
+class BaseTest(PlacelessSetup):
+ def setUp(self):
+ PlacelessSetup.setUp(self)
+
+ def tearDown(self):
+ PlacelessSetup.tearDown(self)
+
+ def _registerView(self, app, name, *for_):
+ import zope.component
+ gsm = zope.component.getGlobalSiteManager()
+ from repoze.bfg.interfaces import IView
+ gsm.registerAdapter(app, for_, IView, name)
+
+ def _registerPermission(self, permission, name, *for_):
+ import zope.component
+ gsm = zope.component.getGlobalSiteManager()
+ from repoze.bfg.interfaces import IViewPermission
+ gsm.registerAdapter(permission, for_, IViewPermission, name)
+
+ def _registerSecurityPolicy(self, secpol):
+ import zope.component
+ gsm = zope.component.getGlobalSiteManager()
+ from repoze.bfg.interfaces import ISecurityPolicy
+ gsm.registerUtility(secpol, ISecurityPolicy)
+
+ def _makeEnviron(self, **extras):
+ environ = {
+ 'wsgi.url_scheme':'http',
+ 'SERVER_NAME':'localhost',
+ 'SERVER_PORT':'8080',
+ 'REQUEST_METHOD':'GET',
+ }
+ environ.update(extras)
+ return environ
+
+class RenderViewToResponseTests(unittest.TestCase, BaseTest):
+ def _getFUT(self):
+ from repoze.bfg.view import render_view_to_response
+ return render_view_to_response
+
+ def test_call_no_view_registered(self):
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ context = DummyContext()
+ renderer = self._getFUT()
+ result = renderer(context, request, name='notregistered')
+ self.assertEqual(result, None)
+
+ def test_call_view_registered_secure_permission_disallows(self):
+ context = DummyContext()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ from repoze.bfg.interfaces import IRequest
+ class IContext(Interface):
+ pass
+ directlyProvides(context, IContext)
+ response = DummyResponse()
+ secpol = DummySecurityPolicy()
+ permissionfactory = make_permission_factory(False)
+ view = make_view(response)
+ self._registerView(view, 'registered', IContext, IRequest)
+ self._registerSecurityPolicy(secpol)
+ self._registerPermission(permissionfactory, 'registered', IContext,
+ IRequest)
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ directlyProvides(request, IRequest)
+ renderer = self._getFUT()
+ from repoze.bfg.security import Unauthorized
+ self.assertRaises(Unauthorized, renderer, context, request,
+ name='registered', secure=True)
+
+ def test_call_view_registered_secure_permission_allows(self):
+ context = DummyContext()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ from repoze.bfg.interfaces import IRequest
+ class IContext(Interface):
+ pass
+ directlyProvides(context, IContext)
+ response = DummyResponse()
+ secpol = DummySecurityPolicy()
+ permissionfactory = make_permission_factory(True)
+ view = make_view(response)
+ self._registerView(view, 'registered', IContext, IRequest)
+ self._registerSecurityPolicy(secpol)
+ self._registerPermission(permissionfactory, 'registered', IContext,
+ IRequest)
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ directlyProvides(request, IRequest)
+ renderer = self._getFUT()
+ response = renderer(context, request, name='registered', secure=True)
+ self.assertEqual(response.status, '200 OK')
+
+ def test_call_view_registered_insecure_permission_disallows(self):
+ context = DummyContext()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ from repoze.bfg.interfaces import IRequest
+ class IContext(Interface):
+ pass
+ directlyProvides(context, IContext)
+ response = DummyResponse()
+ secpol = DummySecurityPolicy()
+ permissionfactory = make_permission_factory(False)
+ view = make_view(response)
+ self._registerView(view, 'registered', IContext, IRequest)
+ self._registerSecurityPolicy(secpol)
+ self._registerPermission(permissionfactory, 'registered', IContext,
+ IRequest)
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ directlyProvides(request, IRequest)
+ renderer = self._getFUT()
+ response = renderer(context, request, name='registered', secure=False)
+ self.assertEqual(response.status, '200 OK')
+
+class RenderViewToIterableTests(unittest.TestCase, BaseTest):
+ def _getFUT(self):
+ from repoze.bfg.view import render_view_to_iterable
+ return render_view_to_iterable
+
+ def test_call_no_view_registered(self):
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ context = DummyContext()
+ renderer = self._getFUT()
+ result = renderer(context, request, name='notregistered')
+ self.assertEqual(result, None)
+
+ def test_call_view_registered_secure_permission_disallows(self):
+ context = DummyContext()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ from repoze.bfg.interfaces import IRequest
+ class IContext(Interface):
+ pass
+ directlyProvides(context, IContext)
+ response = DummyResponse()
+ secpol = DummySecurityPolicy()
+ permissionfactory = make_permission_factory(False)
+ view = make_view(response)
+ self._registerView(view, 'registered', IContext, IRequest)
+ self._registerSecurityPolicy(secpol)
+ self._registerPermission(permissionfactory, 'registered', IContext,
+ IRequest)
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ directlyProvides(request, IRequest)
+ renderer = self._getFUT()
+ from repoze.bfg.security import Unauthorized
+ self.assertRaises(Unauthorized, renderer, context, request,
+ name='registered', secure=True)
+
+ def test_call_view_registered_secure_permission_allows(self):
+ context = DummyContext()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ from repoze.bfg.interfaces import IRequest
+ class IContext(Interface):
+ pass
+ directlyProvides(context, IContext)
+ response = DummyResponse()
+ secpol = DummySecurityPolicy()
+ permissionfactory = make_permission_factory(True)
+ view = make_view(response)
+ self._registerView(view, 'registered', IContext, IRequest)
+ self._registerSecurityPolicy(secpol)
+ self._registerPermission(permissionfactory, 'registered', IContext,
+ IRequest)
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ directlyProvides(request, IRequest)
+ renderer = self._getFUT()
+ iterable = renderer(context, request, name='registered', secure=True)
+ self.assertEqual(iterable, ())
+
+ def test_call_view_registered_insecure_permission_disallows(self):
+ context = DummyContext()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ from repoze.bfg.interfaces import IRequest
+ class IContext(Interface):
+ pass
+ directlyProvides(context, IContext)
+ response = DummyResponse()
+ secpol = DummySecurityPolicy()
+ permissionfactory = make_permission_factory(False)
+ view = make_view(response)
+ self._registerView(view, 'registered', IContext, IRequest)
+ self._registerSecurityPolicy(secpol)
+ self._registerPermission(permissionfactory, 'registered', IContext,
+ IRequest)
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ directlyProvides(request, IRequest)
+ renderer = self._getFUT()
+ iterable = renderer(context, request, name='registered', secure=False)
+ self.assertEqual(iterable, ())
+
+ def test_call_view_response_doesnt_implement_IResponse(self):
+ context = DummyContext()
+ from zope.interface import Interface
+ from zope.interface import directlyProvides
+ from repoze.bfg.interfaces import IRequest
+ class IContext(Interface):
+ pass
+ directlyProvides(context, IContext)
+ response = 'abc'
+ view = make_view(response)
+ self._registerView(view, 'registered', IContext, IRequest)
+ environ = self._makeEnviron()
+ from webob import Request
+ request = Request(environ)
+ directlyProvides(request, IRequest)
+ renderer = self._getFUT()
+ self.assertRaises(ValueError, renderer, context, request,
+ name='registered', secure=False)
+
+class TestIsResponse(unittest.TestCase):
+ def _getFUT(self):
+ from repoze.bfg.view import is_response
+ return is_response
+
+ def test_is(self):
+ response = DummyResponse()
+ f = self._getFUT()
+ self.assertEqual(f(response), True)
+
+ def test_isnt(self):
+ response = None
+ f = self._getFUT()
+ self.assertEqual(f(response), False)
+
+class DummyContext:
+ pass
+
+def make_view(response):
+ def view(context, request):
+ return response
+ return view
+
+def make_permission_factory(result):
+ class DummyPermissionFactory:
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ def __call__(self, secpol):
+ self.__class__.checked_with = secpol
+ return result
+
+ def __repr__(self):
+ return 'permission'
+ return DummyPermissionFactory
+
+def make_appcontext():
+ from zope.configuration.interfaces import IConfigurationContext
+ from zope.interface import directlyProvides
+ app_context = DummyContext()
+ directlyProvides(app_context, IConfigurationContext)
+ return app_context
+
+class DummyResponse:
+ status = '200 OK'
+ headerlist = ()
+ app_iter = ()
+
+class DummySecurityPolicy:
+ pass
+