summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-09-06 03:36:59 +0000
committerChris McDonough <chrism@agendaless.com>2009-09-06 03:36:59 +0000
commitd66bfb5d1f1aef5cce4941b49740dbd136c95605 (patch)
tree0204e233befdb8ad99332e498308468015f3558e /repoze/bfg/tests
parent50df953770409dc9c9558c77bd5c0bbb17ac54f6 (diff)
downloadpyramid-d66bfb5d1f1aef5cce4941b49740dbd136c95605.tar.gz
pyramid-d66bfb5d1f1aef5cce4941b49740dbd136c95605.tar.bz2
pyramid-d66bfb5d1f1aef5cce4941b49740dbd136c95605.zip
Merge multiview2 branch to HEAD.
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/test_integration.py35
-rw-r--r--repoze/bfg/tests/test_request.py268
-rw-r--r--repoze/bfg/tests/test_router.py292
-rw-r--r--repoze/bfg/tests/test_security.py33
-rw-r--r--repoze/bfg/tests/test_testing.py80
-rw-r--r--repoze/bfg/tests/test_view.py571
-rw-r--r--repoze/bfg/tests/test_zcml.py1905
7 files changed, 1872 insertions, 1312 deletions
diff --git a/repoze/bfg/tests/test_integration.py b/repoze/bfg/tests/test_integration.py
index 14dd6a8ad..681dcf043 100644
--- a/repoze/bfg/tests/test_integration.py
+++ b/repoze/bfg/tests/test_integration.py
@@ -18,10 +18,6 @@ def wsgiapptest(environ, start_response):
""" """
return '123'
-def _getRequestInterface(name_or_iface=None):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES[name_or_iface]['interface']
-
class WGSIAppPlusBFGViewTests(unittest.TestCase):
def setUp(self):
cleanUp()
@@ -39,7 +35,8 @@ class WGSIAppPlusBFGViewTests(unittest.TestCase):
self.assertEqual(result, '123')
def test_scanned(self):
- IRequest = _getRequestInterface()
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
from repoze.bfg.interfaces import IView
from repoze.bfg.zcml import scan
context = DummyContext()
@@ -48,9 +45,11 @@ class WGSIAppPlusBFGViewTests(unittest.TestCase):
actions = context.actions
self.assertEqual(len(actions), 1)
action = actions[0]
- self.assertEqual(action['args'],
- ('registerAdapter',
- wsgiapptest, (INothing, IRequest), IView, '', None))
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ view = sm.adapters.lookup((INothing, IRequest), IView, name='')
+ self.assertEqual(view, wsgiapptest)
here = os.path.dirname(__file__)
staticapp = static(os.path.join(here, 'fixtures'))
@@ -101,8 +100,8 @@ class TestGrokkedApp(unittest.TestCase):
def test_it(self):
import inspect
- from repoze.bfg.interfaces import IPOSTRequest
from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRequest
import repoze.bfg.tests.grokkedapp as package
from zope.configuration import config
from zope.configuration import xmlconfig
@@ -112,37 +111,25 @@ class TestGrokkedApp(unittest.TestCase):
xmlconfig.include(context, 'configure.zcml', package)
actions = context.actions
- post_iface = _getRequestInterface(IPOSTRequest)
- request_iface = _getRequestInterface()
-
postview = actions[-1]
self.assertEqual(postview[0][1], None)
self.assertEqual(postview[0][2], '')
- self.assertEqual(postview[0][3], post_iface)
+ self.assertEqual(postview[0][3], IRequest)
self.assertEqual(postview[0][4], IView)
- self.assertEqual(postview[2][1], package.grokked_post)
- self.assertEqual(postview[2][2], (None, post_iface))
- self.assertEqual(postview[2][3], IView)
klassview = actions[-2]
self.assertEqual(klassview[0][1], None)
self.assertEqual(klassview[0][2], 'grokked_klass')
- self.assertEqual(klassview[0][3], request_iface)
+ self.assertEqual(klassview[0][3], IRequest)
self.assertEqual(klassview[0][4], IView)
- self.assertEqual(klassview[2][1], package.grokked_klass)
- self.assertEqual(klassview[2][2], (None, request_iface))
- self.assertEqual(klassview[2][3], IView)
self.failUnless(inspect.isfunction(package.grokked_klass))
self.assertEqual(package.grokked_klass(None, None), None)
funcview = actions[-3]
self.assertEqual(funcview[0][1], None)
self.assertEqual(funcview[0][2], '')
- self.assertEqual(funcview[0][3], request_iface)
+ self.assertEqual(funcview[0][3], IRequest)
self.assertEqual(funcview[0][4], IView)
- self.assertEqual(funcview[2][1], package.grokked)
- self.assertEqual(funcview[2][2], (None, request_iface))
- self.assertEqual(funcview[2][3], IView)
class DummyContext:
pass
diff --git a/repoze/bfg/tests/test_request.py b/repoze/bfg/tests/test_request.py
index 5f61f4efc..8aeeff42d 100644
--- a/repoze/bfg/tests/test_request.py
+++ b/repoze/bfg/tests/test_request.py
@@ -12,7 +12,7 @@ class TestMakeRequestASCII(unittest.TestCase):
self._callFUT(event)
self.assertEqual(request.charset, None)
-class TestRequestSubclass(object):
+class RequestTestBase(object):
def _makeOne(self, environ):
request = self._getTargetClass()(environ)
return request
@@ -37,71 +37,22 @@ class TestRequestSubclass(object):
def test_class_implements(self):
from repoze.bfg.interfaces import IRequest
klass = self._getTargetClass()
- iface = self._getInterface()
- self.assertTrue(iface.implementedBy(klass))
self.assertTrue(IRequest.implementedBy(klass))
def test_instance_provides(self):
from repoze.bfg.interfaces import IRequest
inst = self._makeOne({})
- iface = self._getInterface()
- self.assertTrue(iface.providedBy(inst))
self.assertTrue(IRequest.providedBy(inst))
-
-class Test_Request(TestRequestSubclass, unittest.TestCase):
- def _getTargetClass(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES[None]['factory']
-
- def _getInterface(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES[None]['interface']
-
-class Test_GETRequest(TestRequestSubclass, unittest.TestCase):
- def _getTargetClass(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['GET']['factory']
-
- def _getInterface(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['GET']['interface']
-
-class Test_POSTRequest(TestRequestSubclass, unittest.TestCase):
- def _getTargetClass(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['POST']['factory']
-
- def _getInterface(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['POST']['interface']
-
-class Test_PUTRequest(TestRequestSubclass, unittest.TestCase):
- def _getTargetClass(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['PUT']['factory']
-
- def _getInterface(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['PUT']['interface']
-
-class Test_DELETERequest(TestRequestSubclass, unittest.TestCase):
- def _getTargetClass(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['DELETE']['factory']
-
- def _getInterface(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['DELETE']['interface']
-
-class Test_HEADRequest(TestRequestSubclass, unittest.TestCase):
- def _getTargetClass(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['HEAD']['factory']
-
- def _getInterface(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES['HEAD']['interface']
+class TestRequest(unittest.TestCase, RequestTestBase):
+ def _getTargetClass(self):
+ from repoze.bfg.request import Request
+ return Request
+
+class TestRouteRequest(unittest.TestCase, RequestTestBase):
+ def _getTargetClass(self):
+ from repoze.bfg.request import create_route_request_factory
+ return create_route_request_factory('abc')
class TestRequestFactory(unittest.TestCase):
def setUp(self):
@@ -114,187 +65,48 @@ class TestRequestFactory(unittest.TestCase):
from repoze.bfg.request import request_factory
return request_factory(environ)
- def _registerRequestFactories(self, name=''):
- from zope.component import getSiteManager
- from repoze.bfg.interfaces import IRequestFactories
- factories = {}
- def factory(environ):
- return environ
- for name in (None, 'GET', 'POST', 'PUT', 'DELETE', 'HEAD'):
- factories[name] = {'factory':factory}
- sm = getSiteManager()
- sm.registerUtility(factories, IRequestFactories, name=name)
- if name:
- sm.registerUtility(factories, IRequestFactories, name='')
-
- def _getRequestFactory(self, name_or_iface=None):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES
- return DEFAULT_REQUEST_FACTORIES[name_or_iface]['factory']
-
- def _makeRoute(self, name=None):
- route = DummyRoute(name)
- return route
-
- def test_no_route_no_request_method(self):
+ def test_it_no_route(self):
from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.request import Request
result = self._callFUT({})
- self.assertEqual(result.__class__, self._getRequestFactory())
- self.failUnless(IRequest.providedBy(result))
-
- def test_no_route_unknown(self):
- from repoze.bfg.interfaces import IRequest
- result = self._callFUT({'REQUEST_METHOD':'UNKNOWN'})
- self.assertEqual(result.__class__, self._getRequestFactory())
+ self.assertEqual(result.__class__, Request)
self.failUnless(IRequest.providedBy(result))
- def test_no_route_get(self):
- from repoze.bfg.interfaces import IGETRequest
- result = self._callFUT({'REQUEST_METHOD':'GET'})
- self.assertEqual(result.__class__, self._getRequestFactory('GET'))
- self.failUnless(IGETRequest.providedBy(result))
-
- def test_no_route_post(self):
- from repoze.bfg.interfaces import IPOSTRequest
- result = self._callFUT({'REQUEST_METHOD':'POST'})
- self.assertEqual(result.__class__, self._getRequestFactory('POST'))
- self.failUnless(IPOSTRequest.providedBy(result))
-
- def test_no_route_put(self):
- from repoze.bfg.interfaces import IPUTRequest
- result = self._callFUT({'REQUEST_METHOD':'PUT'})
- self.assertEqual(result.__class__, self._getRequestFactory('PUT'))
- self.failUnless(IPUTRequest.providedBy(result))
-
- def test_no_route_delete(self):
- from repoze.bfg.interfaces import IDELETERequest
- result = self._callFUT({'REQUEST_METHOD':'DELETE'})
- self.assertEqual(result.__class__, self._getRequestFactory('DELETE'))
- self.failUnless(IDELETERequest.providedBy(result))
-
- def test_no_route_head(self):
- from repoze.bfg.interfaces import IHEADRequest
- result = self._callFUT({'REQUEST_METHOD':'HEAD'})
- self.assertEqual(result.__class__, self._getRequestFactory('HEAD'))
- self.failUnless(IHEADRequest.providedBy(result))
-
- def test_route_no_request_method(self):
- self._registerRequestFactories()
- route = self._makeRoute()
- environ = {'bfg.routes.route':route}
- result = self._callFUT(environ)
- self.assertEqual(result, environ)
-
- def test_route_unknown(self):
- self._registerRequestFactories()
- route = self._makeRoute()
- environ = {'bfg.routes.route':route, 'REQUEST_METHOD':'UNKNOWN'}
- result = self._callFUT(environ)
- self.assertEqual(result, environ)
-
- def test_route_known(self):
- self._registerRequestFactories()
- route = self._makeRoute()
- environ = {'bfg.routes.route':route, 'REQUEST_METHOD':'GET'}
- result = self._callFUT(environ)
- self.assertEqual(result, environ)
-
-class TestNamedRequestFactories(unittest.TestCase):
+ def test_it_with_route_found(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRouteRequest
+ sm = getSiteManager()
+ sm.registerUtility(DummyRequest, IRouteRequest, 'routename')
+ route = DummyRoute('routename')
+ result = self._callFUT({'bfg.routes.route':route})
+ self.assertEqual(result.__class__, DummyRequest)
+
+ def test_it_with_route_notfound(self):
+ from repoze.bfg.request import Request
+ route = DummyRoute('routename')
+ result = self._callFUT({'bfg.routes.route':route})
+ self.assertEqual(result.__class__, Request)
+
+class Test_create_route_request_factory(unittest.TestCase):
def _callFUT(self, name):
- from repoze.bfg.request import named_request_factories
- return named_request_factories(name)
-
- def test_it_unnamed(self):
- factories = self._callFUT(None)
- from repoze.bfg.interfaces import IRequest
- from repoze.bfg.interfaces import IGETRequest
- from repoze.bfg.interfaces import IPOSTRequest
- from repoze.bfg.interfaces import IPUTRequest
- from repoze.bfg.interfaces import IDELETERequest
- from repoze.bfg.interfaces import IHEADRequest
- for alias, iface in (
- (None, IRequest),
- ('GET', IGETRequest),
- ('POST', IPOSTRequest),
- ('PUT', IPUTRequest),
- ('DELETE', IDELETERequest),
- ('HEAD', IHEADRequest),
- ):
- self.failUnless(alias in factories)
- self.failUnless(iface in factories)
- self.assertEqual(factories[alias], factories[iface])
- named_iface = factories[alias]['interface']
- named_factory = factories[alias]['factory']
- default_iface = factories[None]['interface']
- self.assertEqual(factories[alias]['interface'], iface)
- self.assertEqual(factories[iface]['interface'], iface)
- self.assertEqual(factories[alias]['factory'].charset, 'utf-8')
- self.failUnless(named_iface.implementedBy(named_factory))
- self.failUnless(iface.implementedBy(named_factory))
- self.failUnless(IRequest.implementedBy(named_factory))
- self.failUnless(default_iface.implementedBy(named_factory))
+ from repoze.bfg.request import create_route_request_factory
+ return create_route_request_factory(name)
- def test_it_named(self):
- factories = self._callFUT('name')
- from repoze.bfg.interfaces import IRequest
- from repoze.bfg.interfaces import IGETRequest
- from repoze.bfg.interfaces import IPOSTRequest
- from repoze.bfg.interfaces import IPUTRequest
- from repoze.bfg.interfaces import IDELETERequest
- from repoze.bfg.interfaces import IHEADRequest
- for alias, iface in (
- (None, IRequest),
- ('GET', IGETRequest),
- ('POST', IPOSTRequest),
- ('PUT', IPUTRequest),
- ('DELETE', IDELETERequest),
- ('HEAD', IHEADRequest),
- ):
- self.failUnless(alias in factories)
- self.failUnless(iface in factories)
- self.assertEqual(factories[alias], factories[iface])
- self.assertEqual(factories[alias]['factory'].charset, 'utf-8')
- named_iface = factories[alias]['interface']
- named_factory = factories[alias]['factory']
- default_iface = factories[None]['interface']
- self.failUnless(named_iface.implementedBy(named_factory))
- self.failUnless(iface.implementedBy(named_factory))
- self.failUnless(IRequest.implementedBy(named_factory))
- self.failUnless(default_iface.implementedBy(named_factory))
-
-class TestDefaultRequestFactories(unittest.TestCase):
def test_it(self):
- from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES as factories
+ from repoze.bfg.interfaces import IRouteRequest
from repoze.bfg.interfaces import IRequest
- from repoze.bfg.interfaces import IGETRequest
- from repoze.bfg.interfaces import IPOSTRequest
- from repoze.bfg.interfaces import IPUTRequest
- from repoze.bfg.interfaces import IDELETERequest
- from repoze.bfg.interfaces import IHEADRequest
- for alias, iface in (
- (None, IRequest),
- ('GET', IGETRequest),
- ('POST', IPOSTRequest),
- ('PUT', IPUTRequest),
- ('DELETE', IDELETERequest),
- ('HEAD', IHEADRequest),
- ):
- self.failUnless(alias in factories)
- self.failUnless(iface in factories)
- self.assertEqual(factories[alias], factories[iface])
- named_iface = factories[alias]['interface']
- named_factory = factories[alias]['factory']
- self.failUnless(named_iface.implementedBy(named_factory))
- self.assertEqual(factories[alias]['interface'], iface)
- self.assertEqual(factories[iface]['interface'], iface)
- self.assertEqual(factories[alias]['factory'].charset, 'utf-8')
-
+ factory = self._callFUT('routename')
+ self.failUnless(IRouteRequest.implementedBy(factory))
+ self.failUnless(IRequest.implementedBy(factory))
class DummyRoute:
def __init__(self, name):
- self.name=name
-
+ self.name = name
class DummyRequest:
- pass
+ def __init__(self, environ=None):
+ if environ is None:
+ environ = {}
+ self.environ = environ
class DummyNewRequestEvent:
def __init__(self, request):
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index 566ffe4f1..a96765a01 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -33,12 +33,6 @@ class RouterTests(unittest.TestCase):
settings = Settings(**defaultkw)
self.registry.registerUtility(settings, ISettings)
- def _registerAuthenticationPolicy(self):
- from repoze.bfg.interfaces import IAuthenticationPolicy
- policy = DummyAuthenticationPolicy()
- self.registry.registerUtility(policy, IAuthenticationPolicy)
- return policy
-
def _registerTraverserFactory(self, context, view_name='', subpath=None,
traversed=None, virtual_root=None,
virtual_root_path=None, **kw):
@@ -75,20 +69,6 @@ class RouterTests(unittest.TestCase):
from repoze.bfg.interfaces import IView
self.registry.registerAdapter(app, for_, IView, name)
- def _registerViewPermission(self, view_name, allow=True):
- from zope.interface import Interface
- from repoze.bfg.interfaces import IViewPermission
- class Checker(object):
- def __call__(self, context, request):
- self.context = context
- self.request = request
- return allow
- checker = Checker()
- self.registry.registerAdapter(checker, (Interface, Interface),
- IViewPermission,
- view_name)
- return checker
-
def _registerEventListener(self, iface):
L = []
def listener(event):
@@ -239,31 +219,6 @@ class RouterTests(unittest.TestCase):
start_response = DummyStartResponse()
self.assertRaises(ValueError, router, environ, start_response)
- def test_iforbiddenview_returns_nonresponse(self):
- from repoze.bfg.interfaces import IForbiddenView
- from zope.interface import Interface
- from zope.interface import directlyProvides
- class IContext(Interface):
- pass
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- directlyProvides(context, IContext)
- self._registerTraverserFactory(context)
- self._registerAuthenticationPolicy()
- response = DummyResponse()
- view = DummyView(response)
- from repoze.bfg.security import ACLDenied
- denied = ACLDenied('ace', 'acl', 'permission', ['principals'], context)
- environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
- checker = self._registerViewPermission('', denied)
- def app(context, request):
- """ """
- self.registry.registerUtility(app, IForbiddenView)
- router = self._makeOne()
- start_response = DummyStartResponse()
- self.assertRaises(ValueError, router, environ, start_response)
-
def test_call_view_registered_nonspecific_default_path(self):
context = DummyContext()
self._registerTraverserFactory(context)
@@ -369,72 +324,7 @@ class RouterTests(unittest.TestCase):
self.assertEqual(start_response.status, '404 Not Found')
self.failUnless('404' in result[0])
- def test_call_view_permission_none(self):
- from zope.interface import Interface
- from zope.interface import directlyProvides
- class IContext(Interface):
- pass
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- directlyProvides(context, IContext)
- self._registerTraverserFactory(context, subpath=[''])
- response = DummyResponse()
- view = DummyView(response)
- environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
- router = self._makeOne()
- start_response = DummyStartResponse()
- result = router(environ, start_response)
- self.assertEqual(start_response.status, '200 OK')
-
- def test_call_view_no_authentication_policy_debug_authorization(self):
- logger = self._registerLogger()
- from zope.interface import Interface
- from zope.interface import directlyProvides
- class IContext(Interface):
- pass
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- directlyProvides(context, IContext)
- self._registerTraverserFactory(context, subpath=[''])
- response = DummyResponse()
- view = DummyView(response)
- environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
- router = self._makeOne()
- router.debug_authorization = True
- start_response = DummyStartResponse()
- result = router(environ, start_response)
- self.assertEqual(start_response.status, '200 OK')
- self.assertEqual(len(logger.messages), 1)
- self.failUnless('no authentication policy' in logger.messages[0])
-
- def test_call_view_no_permission_registered_debug_authorization(self):
- self._registerAuthenticationPolicy()
- logger = self._registerLogger()
- from zope.interface import Interface
- from zope.interface import directlyProvides
- class IContext(Interface):
- pass
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- directlyProvides(context, IContext)
- self._registerTraverserFactory(context, subpath=[''])
- response = DummyResponse()
- view = DummyView(response)
- environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
- router = self._makeOne()
- router.debug_authorization = True
- start_response = DummyStartResponse()
- result = router(environ, start_response)
- self.assertEqual(start_response.status, '200 OK')
- self.assertEqual(len(logger.messages), 1)
- self.failUnless('no permission registered' in logger.messages[0])
-
- def test_call_view_no_permission_registered_no_debug(self):
- self._registerAuthenticationPolicy()
- logger = self._registerLogger()
+ def test_call_view_raises_unauthorized(self):
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -444,63 +334,16 @@ class RouterTests(unittest.TestCase):
directlyProvides(context, IContext)
self._registerTraverserFactory(context, subpath=[''])
response = DummyResponse()
- view = DummyView(response)
+ view = DummyView(response, raise_unauthorized=True)
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
router = self._makeOne()
- router.debug_authorization = False
start_response = DummyStartResponse()
- result = router(environ, start_response)
- self.assertEqual(start_response.status, '200 OK')
- self.assertEqual(len(logger.messages), 0)
-
- def test_call_view_permission_succeeds(self):
- from zope.interface import Interface
- from zope.interface import directlyProvides
- class IContext(Interface):
- pass
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- directlyProvides(context, IContext)
- self._registerTraverserFactory(context, subpath=[''])
- self._registerAuthenticationPolicy()
- response = DummyResponse()
- view = DummyView(response)
- environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
- checker = self._registerViewPermission('', True)
- router = self._makeOne()
- start_response = DummyStartResponse()
- result = router(environ, start_response)
- self.assertEqual(start_response.status, '200 OK')
- self.assertEqual(checker.context, context)
-
- def test_call_view_permission_fails_nosettings(self):
- from zope.interface import Interface
- from zope.interface import directlyProvides
- class IContext(Interface):
- pass
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- directlyProvides(context, IContext)
- self._registerTraverserFactory(context, subpath=[''])
- self._registerAuthenticationPolicy()
- response = DummyResponse()
- view = DummyView(response)
- from repoze.bfg.security import ACLDenied
- denied = ACLDenied('ace', 'acl', 'permission', ['principals'], context)
- environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
- checker = self._registerViewPermission('', denied)
- router = self._makeOne()
- start_response = DummyStartResponse()
- result = router(environ, start_response)
+ response = router(environ, start_response)
self.assertEqual(start_response.status, '401 Unauthorized')
- message = environ['repoze.bfg.message']
- self.assertEqual(message, 'Unauthorized: failed security policy check')
- self.assertEqual(checker.context, context)
+ self.assertEqual(environ['repoze.bfg.message'], 'unauthorized')
- def test_call_view_permission_fails_no_debug_auth(self):
+ def test_call_view_raises_notfound(self):
from zope.interface import Interface
from zope.interface import directlyProvides
class IContext(Interface):
@@ -509,62 +352,15 @@ class RouterTests(unittest.TestCase):
context = DummyContext()
directlyProvides(context, IContext)
self._registerTraverserFactory(context, subpath=[''])
- self._registerAuthenticationPolicy()
response = DummyResponse()
- view = DummyView(response)
- from repoze.bfg.security import ACLDenied
- denied = ACLDenied('ace', 'acl', 'permission', ['principals'], context)
+ view = DummyView(response, raise_notfound=True)
environ = self._makeEnviron()
self._registerView(view, '', IContext, IRequest)
- checker = self._registerViewPermission('', denied)
- self._registerSettings(debug_authorization=False)
router = self._makeOne()
start_response = DummyStartResponse()
- result = router(environ, start_response)
- self.assertEqual(start_response.status, '401 Unauthorized')
- message = environ['repoze.bfg.message']
- self.failUnless('failed security policy check' in message)
- self.assertEqual(checker.context, context)
-
- def test_call_view_permission_fails_with_debug_auth(self):
- from zope.interface import Interface
- from zope.interface import directlyProvides
- class IContext(Interface):
- pass
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- directlyProvides(context, IContext)
- self._registerAuthenticationPolicy()
- self._registerTraverserFactory(context, subpath=[''])
- response = DummyResponse()
- view = DummyView(response)
- from repoze.bfg.security import ACLDenied
- environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
- allowed = ACLDenied('ace', 'acl', 'permission', ['principals'], context)
- checker = self._registerViewPermission('', allowed)
- self._registerSettings(debug_authorization=True)
- logger = self._registerLogger()
- router = self._makeOne()
- start_response = DummyStartResponse()
- result = router(environ, start_response)
- self.assertEqual(start_response.status, '401 Unauthorized')
- message = environ['repoze.bfg.message']
- self.failUnless(
- "ACLDenied permission 'permission' via ACE 'ace' in ACL 'acl' "
- "on context" in message)
- self.failUnless("for principals ['principals']" in message)
- self.assertEqual(checker.context, context)
- self.assertEqual(len(logger.messages), 1)
- logged = logger.messages[0]
- self.failUnless(
- "debug_authorization of url http://localhost:8080/ (view name "
- "'' against context" in logged)
- self.failUnless(
- "ACLDenied permission 'permission' via ACE 'ace' in ACL 'acl' on "
- "context" in logged)
- self.failUnless(
- "for principals ['principals']" in logged)
+ response = router(environ, start_response)
+ self.assertEqual(start_response.status, '404 Not Found')
+ self.assertEqual(environ['repoze.bfg.message'], 'notfound')
def test_call_eventsends(self):
context = DummyContext()
@@ -601,65 +397,6 @@ class RouterTests(unittest.TestCase):
self.assertEqual(len(router.threadlocal_manager.pushed), 1)
self.assertEqual(len(router.threadlocal_manager.popped), 1)
- def test_call_post_method(self):
- from repoze.bfg.interfaces import INewRequest
- from repoze.bfg.interfaces import IPOSTRequest
- from repoze.bfg.interfaces import IPUTRequest
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- self._registerTraverserFactory(context)
- response = DummyResponse()
- response.app_iter = ['Hello world']
- view = DummyView(response)
- environ = self._makeEnviron(REQUEST_METHOD='POST')
- self._registerView(view, '', None, None)
- router = self._makeOne()
- start_response = DummyStartResponse()
- request_events = self._registerEventListener(INewRequest)
- result = router(environ, start_response)
- request = request_events[0].request
- self.failUnless(IPOSTRequest.providedBy(request))
- self.failIf(IPUTRequest.providedBy(request))
- self.failUnless(IRequest.providedBy(request))
-
- def test_call_put_method(self):
- from repoze.bfg.interfaces import INewRequest
- from repoze.bfg.interfaces import IPUTRequest
- from repoze.bfg.interfaces import IPOSTRequest
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- self._registerTraverserFactory(context)
- response = DummyResponse()
- response.app_iter = ['Hello world']
- view = DummyView(response)
- environ = self._makeEnviron(REQUEST_METHOD='PUT')
- self._registerView(view, '', None, None)
- router = self._makeOne()
- start_response = DummyStartResponse()
- request_events = self._registerEventListener(INewRequest)
- result = router(environ, start_response)
- request = request_events[0].request
- self.failUnless(IPUTRequest.providedBy(request))
- self.failIf(IPOSTRequest.providedBy(request))
- self.failUnless(IRequest.providedBy(request))
-
- def test_call_unknown_method(self):
- from repoze.bfg.interfaces import INewRequest
- from repoze.bfg.interfaces import IRequest
- context = DummyContext()
- self._registerTraverserFactory(context)
- response = DummyResponse()
- response.app_iter = ['Hello world']
- view = DummyView(response)
- environ = self._makeEnviron(REQUEST_METHOD='UNKNOWN')
- self._registerView(view, '', None, None)
- router = self._makeOne()
- start_response = DummyStartResponse()
- request_events = self._registerEventListener(INewRequest)
- result = router(environ, start_response)
- request = request_events[0].request
- self.failUnless(IRequest.providedBy(request))
-
class MakeAppTests(unittest.TestCase):
def setUp(self):
cleanUp()
@@ -917,10 +654,19 @@ class DummyContext:
pass
class DummyView:
- def __init__(self, response):
+ def __init__(self, response, raise_unauthorized=False,
+ raise_notfound=False):
self.response = response
+ self.raise_unauthorized = raise_unauthorized
+ self.raise_notfound = raise_notfound
def __call__(self, context, request):
+ if self.raise_unauthorized:
+ from repoze.bfg.security import Unauthorized
+ raise Unauthorized('unauthorized')
+ if self.raise_notfound:
+ from repoze.bfg.view import NotFound
+ raise NotFound('notfound')
return self.response
class DummyRootFactory:
diff --git a/repoze/bfg/tests/test_security.py b/repoze/bfg/tests/test_security.py
index bb1a54e04..e06386fdb 100644
--- a/repoze/bfg/tests/test_security.py
+++ b/repoze/bfg/tests/test_security.py
@@ -27,29 +27,6 @@ class TestAllPermissionsList(unittest.TestCase):
from repoze.bfg.security import ALL_PERMISSIONS
self.assertEqual(ALL_PERMISSIONS.__class__, self._getTargetClass())
-class TestViewPermissionFactory(unittest.TestCase):
- def setUp(self):
- cleanUp()
-
- def tearDown(self):
- cleanUp()
-
- def _getTargetClass(self):
- from repoze.bfg.security import ViewPermissionFactory
- return ViewPermissionFactory
-
- def _makeOne(self, *arg, **kw):
- klass = self._getTargetClass()
- return klass(*arg, **kw)
-
- def test_call(self):
- context = DummyContext()
- request = DummyRequest({})
- factory = self._makeOne('repoze.view')
- self.assertEqual(factory.permission_name, 'repoze.view')
- result = factory(context, request)
- self.assertEqual(result, True)
-
class TestAllowed(unittest.TestCase):
def _getTargetClass(self):
from repoze.bfg.security import Allowed
@@ -137,19 +114,19 @@ class TestViewExecutionPermitted(unittest.TestCase):
from repoze.bfg.security import view_execution_permitted
return view_execution_permitted(*arg, **kw)
- def _registerViewPermission(self, view_name, allow=True):
+ def _registerSecuredView(self, view_name, allow=True):
import zope.component
from zope.interface import Interface
- from repoze.bfg.interfaces import IViewPermission
+ from repoze.bfg.interfaces import ISecuredView
class Checker(object):
- def __call__(self, context, request):
+ def __permitted__(self, context, request):
self.context = context
self.request = request
return allow
checker = Checker()
gsm = zope.component.getGlobalSiteManager()
gsm.registerAdapter(checker, (Interface, Interface),
- IViewPermission,
+ ISecuredView,
view_name)
return checker
@@ -175,7 +152,7 @@ class TestViewExecutionPermitted(unittest.TestCase):
pass
context = DummyContext()
directlyProvides(context, IContext)
- checker = self._registerViewPermission('', True)
+ checker = self._registerSecuredView('', True)
request = DummyRequest({})
directlyProvides(request, IRequest)
result = self._callFUT(context, request, '')
diff --git a/repoze/bfg/tests/test_testing.py b/repoze/bfg/tests/test_testing.py
index 4ad3c83f6..e81a90219 100644
--- a/repoze/bfg/tests/test_testing.py
+++ b/repoze/bfg/tests/test_testing.py
@@ -4,9 +4,13 @@ import unittest
class TestTestingFunctions(unittest.TestCase):
def setUp(self):
cleanUp()
+ from zope.deprecation import __show__
+ __show__.off()
def tearDown(self):
cleanUp()
+ from zope.deprecation import __show__
+ __show__.on()
def test_registerDummySecurityPolicy(self):
from repoze.bfg import testing
@@ -143,34 +147,78 @@ class TestTestingFunctions(unittest.TestCase):
response = render_view_to_response(None, None, 'moo.html')
self.assertEqual(response.body, '123')
- def test_registerViewPermission_defaults(self):
+ def test_registerView_with_permission_denying(self):
+ from repoze.bfg import testing
+ from repoze.bfg.security import Unauthorized
+ def view(context, request):
+ """ """
+ view = testing.registerView('moo.html', view=view, permission='bar')
+ testing.registerDummySecurityPolicy(permissive=False)
+ import types
+ self.failUnless(isinstance(view, types.FunctionType))
+ from repoze.bfg.view import render_view_to_response
+ self.assertRaises(Unauthorized, render_view_to_response,
+ None, None, 'moo.html')
+
+ def test_registerView_with_permission_denying2(self):
+ from repoze.bfg import testing
from repoze.bfg.security import view_execution_permitted
+ def view(context, request):
+ """ """
+ view = testing.registerView('moo.html', view=view, permission='bar')
+ testing.registerDummySecurityPolicy(permissive=False)
+ import types
+ self.failUnless(isinstance(view, types.FunctionType))
+ result = view_execution_permitted(None, None, 'moo.html')
+ self.assertEqual(result, False)
+
+ def test_registerView_with_permission_allowing(self):
+ from repoze.bfg import testing
+ def view(context, request):
+ from webob import Response
+ return Response('123')
+ view = testing.registerView('moo.html', view=view, permission='bar')
+ testing.registerDummySecurityPolicy(permissive=True)
+ import types
+ self.failUnless(isinstance(view, types.FunctionType))
+ from repoze.bfg.view import render_view_to_response
+ result = render_view_to_response(None, None, 'moo.html')
+ self.assertEqual(result.app_iter, ['123'])
+
+ def test_registerViewPermission_defaults(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IViewPermission
from repoze.bfg import testing
view = testing.registerViewPermission('moo.html')
- testing.registerDummySecurityPolicy()
- result = view_execution_permitted(None, None, 'moo.html')
- self.failUnless(result)
- self.assertEqual(result.msg, 'message')
+ sm = getSiteManager()
+ result = sm.getMultiAdapter(
+ (Interface, Interface), IViewPermission, 'moo.html')
+ self.assertEqual(result, True)
def test_registerViewPermission_denying(self):
- from repoze.bfg.security import view_execution_permitted
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IViewPermission
from repoze.bfg import testing
view = testing.registerViewPermission('moo.html', result=False)
- testing.registerDummySecurityPolicy()
- result = view_execution_permitted(None, None, 'moo.html')
- self.failIf(result)
- self.assertEqual(result.msg, 'message')
+ sm = getSiteManager()
+ result = sm.getMultiAdapter(
+ (Interface, Interface), IViewPermission, 'moo.html')
+ self.assertEqual(result, False)
def test_registerViewPermission_custom(self):
- from repoze.bfg.security import view_execution_permitted
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IViewPermission
def viewperm(context, request):
return True
from repoze.bfg import testing
- view = testing.registerViewPermission('moo.html',
- viewpermission=viewperm)
- testing.registerDummySecurityPolicy()
- result = view_execution_permitted(None, None, 'moo.html')
- self.failUnless(result is True)
+ testing.registerViewPermission('moo.html', viewpermission=viewperm)
+ sm = getSiteManager()
+ result = sm.getMultiAdapter(
+ (Interface, Interface), IViewPermission, 'moo.html')
+ self.assertEqual(result, True)
def test_registerAdapter(self):
from zope.interface import implements
diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py
index 3c7d6f853..f496ebb36 100644
--- a/repoze/bfg/tests/test_view.py
+++ b/repoze/bfg/tests/test_view.py
@@ -15,28 +15,6 @@ class BaseTest(object):
from repoze.bfg.interfaces import IView
gsm.registerAdapter(app, for_, IView, name)
- def _registerViewPermission(self, view_name, allow=True):
- import zope.component
- from zope.interface import Interface
- from repoze.bfg.interfaces import IViewPermission
- class Checker(object):
- def __call__(self, context, request):
- self.context = context
- self.request = request
- return allow
- checker = Checker()
- gsm = zope.component.getGlobalSiteManager()
- gsm.registerAdapter(checker, (Interface, Interface),
- IViewPermission,
- view_name)
- return checker
-
- 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',
@@ -61,7 +39,7 @@ class RenderViewToResponseTests(BaseTest, unittest.TestCase):
result = self._callFUT(context, request, name='notregistered')
self.assertEqual(result, None)
- def test_call_view_registered_secure_permission_disallows(self):
+ def test_call_view_registered_secure(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -70,20 +48,18 @@ class RenderViewToResponseTests(BaseTest, unittest.TestCase):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', False)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
directlyProvides(request, IRequest)
- from repoze.bfg.security import Unauthorized
- self.assertRaises(Unauthorized, self._callFUT, context, request,
- name='registered', secure=True)
+ response = self._callFUT(context, request, name='registered',
+ secure=True)
+ self.assertEqual(response.status, '200 OK')
+
- def test_call_view_registered_secure_permission_allows(self):
+ def test_call_view_registered_insecure_no_call_permissive(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -92,20 +68,17 @@ class RenderViewToResponseTests(BaseTest, unittest.TestCase):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', True)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
directlyProvides(request, IRequest)
response = self._callFUT(context, request, name='registered',
- secure=True)
+ secure=False)
self.assertEqual(response.status, '200 OK')
- def test_call_view_registered_insecure_permission_disallows(self):
+ def test_call_view_registered_insecure_with_call_permissive(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -114,11 +87,11 @@ class RenderViewToResponseTests(BaseTest, unittest.TestCase):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
+ def anotherview(context, request):
+ return DummyResponse('anotherview')
+ view.__call_permissive__ = anotherview
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', False)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
@@ -126,6 +99,7 @@ class RenderViewToResponseTests(BaseTest, unittest.TestCase):
response = self._callFUT(context, request, name='registered',
secure=False)
self.assertEqual(response.status, '200 OK')
+ self.assertEqual(response.app_iter, ['anotherview'])
class RenderViewToIterableTests(BaseTest, unittest.TestCase):
def _callFUT(self, *arg, **kw):
@@ -140,7 +114,7 @@ class RenderViewToIterableTests(BaseTest, unittest.TestCase):
result = self._callFUT(context, request, name='notregistered')
self.assertEqual(result, None)
- def test_call_view_registered_secure_permission_disallows(self):
+ def test_call_view_registered_secure(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -149,20 +123,17 @@ class RenderViewToIterableTests(BaseTest, unittest.TestCase):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', False)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
directlyProvides(request, IRequest)
- from repoze.bfg.security import Unauthorized
- self.assertRaises(Unauthorized, self._callFUT, context, request,
- name='registered', secure=True)
+ iterable = self._callFUT(context, request, name='registered',
+ secure=True)
+ self.assertEqual(iterable, ())
- def test_call_view_registered_secure_permission_allows(self):
+ def test_call_view_registered_insecure_no_call_permissive(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -171,20 +142,17 @@ class RenderViewToIterableTests(BaseTest, unittest.TestCase):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', True)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
directlyProvides(request, IRequest)
iterable = self._callFUT(context, request, name='registered',
- secure=True)
+ secure=False)
self.assertEqual(iterable, ())
- def test_call_view_registered_insecure_permission_disallows(self):
+ def test_call_view_registered_insecure_with_call_permissive(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -193,18 +161,18 @@ class RenderViewToIterableTests(BaseTest, unittest.TestCase):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
+ def anotherview(context, request):
+ return DummyResponse('anotherview')
+ view.__call_permissive__ = anotherview
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', False)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
directlyProvides(request, IRequest)
iterable = self._callFUT(context, request, name='registered',
secure=False)
- self.assertEqual(iterable, ())
+ self.assertEqual(iterable, ['anotherview'])
class RenderViewTests(unittest.TestCase, BaseTest):
def _callFUT(self, *arg, **kw):
@@ -219,7 +187,7 @@ class RenderViewTests(unittest.TestCase, BaseTest):
result = self._callFUT(context, request, name='notregistered')
self.assertEqual(result, None)
- def test_call_view_registered_secure_permission_disallows(self):
+ def test_call_view_registered_secure(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -228,20 +196,16 @@ class RenderViewTests(unittest.TestCase, BaseTest):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', False)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
directlyProvides(request, IRequest)
- from repoze.bfg.security import Unauthorized
- self.assertRaises(Unauthorized, self._callFUT, context, request,
- name='registered', secure=True)
+ s = self._callFUT(context, request, name='registered', secure=True)
+ self.assertEqual(s, '')
- def test_call_view_registered_secure_permission_allows(self):
+ def test_call_view_registered_insecure_no_call_permissive(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -250,19 +214,16 @@ class RenderViewTests(unittest.TestCase, BaseTest):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', True)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
directlyProvides(request, IRequest)
- s = self._callFUT(context, request, name='registered', secure=True)
+ s = self._callFUT(context, request, name='registered', secure=False)
self.assertEqual(s, '')
- def test_call_view_registered_insecure_permission_disallows(self):
+ def test_call_view_registered_insecure_with_call_permissive(self):
context = DummyContext()
from zope.interface import Interface
from zope.interface import directlyProvides
@@ -271,17 +232,17 @@ class RenderViewTests(unittest.TestCase, BaseTest):
pass
directlyProvides(context, IContext)
response = DummyResponse()
- secpol = DummySecurityPolicy()
view = make_view(response)
+ def anotherview(context, request):
+ return DummyResponse('anotherview')
+ view.__call_permissive__ = anotherview
self._registerView(view, 'registered', IContext, IRequest)
- self._registerSecurityPolicy(secpol)
- self._registerViewPermission('registered', False)
environ = self._makeEnviron()
from webob import Request
request = Request(environ)
directlyProvides(request, IRequest)
s = self._callFUT(context, request, name='registered', secure=False)
- self.assertEqual(s, '')
+ self.assertEqual(s, 'anotherview')
class TestIsResponse(unittest.TestCase):
def _callFUT(self, *arg, **kw):
@@ -506,6 +467,461 @@ class TestDefaultNotFoundView(unittest.TestCase):
self.assertEqual(response.status, '404 Not Found')
self.failUnless('<code>abc&amp;123</code>' in response.body)
+class TestMultiView(unittest.TestCase):
+ def _getTargetClass(self):
+ from repoze.bfg.view import MultiView
+ return MultiView
+
+ def _makeOne(self, name='name'):
+ return self._getTargetClass()(name)
+
+ def test_class_implements_ISecuredView(self):
+ from zope.interface.verify import verifyClass
+ from repoze.bfg.interfaces import ISecuredView
+ verifyClass(ISecuredView, self._getTargetClass())
+
+ def test_instance_implements_ISecuredView(self):
+ from zope.interface.verify import verifyObject
+ from repoze.bfg.interfaces import ISecuredView
+ verifyObject(ISecuredView, self._makeOne())
+
+ def test_add(self):
+ mv = self._makeOne()
+ mv.add('view', 100)
+ self.assertEqual(mv.views, [(100, 'view')])
+ mv.add('view2', 99)
+ self.assertEqual(mv.views, [(99, 'view2'), (100, 'view')])
+
+ def test_match_not_found(self):
+ from repoze.bfg.view import NotFound
+ mv = self._makeOne()
+ context = DummyContext()
+ request = DummyRequest()
+ self.assertRaises(NotFound, mv.match, context, request)
+
+ def test_match_predicate_fails(self):
+ from repoze.bfg.view import NotFound
+ mv = self._makeOne()
+ def view(context, request):
+ """ """
+ view.__predicated__ = lambda *arg: False
+ mv.views = [(100, view)]
+ context = DummyContext()
+ request = DummyRequest()
+ self.assertRaises(NotFound, mv.match, context, request)
+
+ def test_match_predicate_succeeds(self):
+ mv = self._makeOne()
+ def view(context, request):
+ """ """
+ view.__predicated__ = lambda *arg: True
+ mv.views = [(100, view)]
+ context = DummyContext()
+ request = DummyRequest()
+ result = mv.match(context, request)
+ self.assertEqual(result, view)
+
+ def test_permitted_no_views(self):
+ from repoze.bfg.view import NotFound
+ mv = self._makeOne()
+ context = DummyContext()
+ request = DummyRequest()
+ self.assertRaises(NotFound, mv.__permitted__, context, request)
+
+ def test_permitted_no_match_with__permitted__(self):
+ mv = self._makeOne()
+ def view(context, request):
+ """ """
+ mv.views = [(100, view)]
+ context = DummyContext()
+ request = DummyRequest()
+ self.assertEqual(mv.__permitted__(None, None), True)
+
+ def test_permitted(self):
+ from zope.component import getSiteManager
+ mv = self._makeOne()
+ def view(context, request):
+ """ """
+ def permitted(context, request):
+ return False
+ view.__permitted__ = permitted
+ mv.views = [(100, view)]
+ context = DummyContext()
+ request = DummyRequest()
+ sm = getSiteManager()
+ result = mv.__permitted__(context, request)
+ self.assertEqual(result, False)
+
+ def test__call__not_found(self):
+ from repoze.bfg.view import NotFound
+ mv = self._makeOne()
+ context = DummyContext()
+ request = DummyRequest()
+ self.assertRaises(NotFound, mv, context, request)
+
+ def test___call__intermediate_not_found(self):
+ from repoze.bfg.view import NotFound
+ mv = self._makeOne()
+ context = DummyContext()
+ request = DummyRequest()
+ request.view_name = ''
+ expected_response = DummyResponse()
+ def view1(context, request):
+ raise NotFound
+ def view2(context, request):
+ return expected_response
+ mv.views = [(100, view1), (99, view2)]
+ response = mv(context, request)
+ self.assertEqual(response, expected_response)
+
+ def test___call__(self):
+ mv = self._makeOne()
+ context = DummyContext()
+ request = DummyRequest()
+ request.view_name = ''
+ expected_response = DummyResponse()
+ def view(context, request):
+ return expected_response
+ mv.views = [(100, view)]
+ response = mv(context, request)
+ self.assertEqual(response, expected_response)
+
+ def test__call_permissive__not_found(self):
+ from repoze.bfg.view import NotFound
+ mv = self._makeOne()
+ context = DummyContext()
+ request = DummyRequest()
+ self.assertRaises(NotFound, mv, context, request)
+
+ def test___call_permissive_has_call_permissive(self):
+ mv = self._makeOne()
+ context = DummyContext()
+ request = DummyRequest()
+ request.view_name = ''
+ expected_response = DummyResponse()
+ def view(context, request):
+ """ """
+ def permissive(context, request):
+ return expected_response
+ view.__call_permissive__ = permissive
+ mv.views = [(100, view)]
+ response = mv.__call_permissive__(context, request)
+ self.assertEqual(response, expected_response)
+
+ def test___call_permissive_has_no_call_permissive(self):
+ mv = self._makeOne()
+ context = DummyContext()
+ request = DummyRequest()
+ request.view_name = ''
+ expected_response = DummyResponse()
+ def view(context, request):
+ return expected_response
+ mv.views = [(100, view)]
+ response = mv.__call_permissive__(context, request)
+ self.assertEqual(response, expected_response)
+
+class TestMapView(unittest.TestCase):
+ def setUp(self):
+ cleanUp()
+
+ def tearDown(self):
+ cleanUp()
+
+ def _callFUT(self, view, *arg, **kw):
+ from repoze.bfg.view import map_view
+ return map_view(view, *arg, **kw)
+
+ def test_view_as_function_context_and_request(self):
+ def view(context, request):
+ return 'OK'
+ result = self._callFUT(view)
+ self.failUnless(result is view)
+ self.assertEqual(view(None, None), 'OK')
+
+ def test_view_as_function_requestonly(self):
+ def view(request):
+ return 'OK'
+ result = self._callFUT(view)
+ self.failIf(result is view)
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.assertEqual(result(None, None), 'OK')
+
+ def test_view_as_newstyle_class_context_and_request(self):
+ class view(object):
+ def __init__(self, context, request):
+ pass
+ def __call__(self):
+ return 'OK'
+ result = self._callFUT(view)
+ self.failIf(result is view)
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.assertEqual(result(None, None), 'OK')
+
+ def test_view_as_newstyle_class_requestonly(self):
+ class view(object):
+ def __init__(self, context, request):
+ pass
+ def __call__(self):
+ return 'OK'
+ result = self._callFUT(view)
+ self.failIf(result is view)
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.assertEqual(result(None, None), 'OK')
+
+ def test_view_as_oldstyle_class_context_and_request(self):
+ class view:
+ def __init__(self, context, request):
+ pass
+ def __call__(self):
+ return 'OK'
+ result = self._callFUT(view)
+ self.failIf(result is view)
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.assertEqual(result(None, None), 'OK')
+
+ def test_view_as_oldstyle_class_requestonly(self):
+ class view:
+ def __init__(self, context, request):
+ pass
+ def __call__(self):
+ return 'OK'
+ result = self._callFUT(view)
+ self.failIf(result is view)
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.assertEqual(result(None, None), 'OK')
+
+ def test_view_as_instance_context_and_request(self):
+ class View:
+ def __call__(self, context, request):
+ return 'OK'
+ view = View()
+ result = self._callFUT(view)
+ self.failUnless(result is view)
+ self.assertEqual(result(None, None), 'OK')
+
+ def test_view_as_instance_requestonly(self):
+ class View:
+ def __call__(self, request):
+ return 'OK'
+ view = View()
+ result = self._callFUT(view)
+ self.failIf(result is view)
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.failUnless('instance' in result.__name__)
+ self.assertEqual(result(None, None), 'OK')
+
+class TestRequestOnly(unittest.TestCase):
+ def _callFUT(self, arg):
+ from repoze.bfg.view import requestonly
+ return requestonly(arg)
+
+ def test_newstyle_class_no_init(self):
+ class foo(object):
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_newstyle_class_init_toomanyargs(self):
+ class foo(object):
+ def __init__(self, context, request):
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_newstyle_class_init_onearg_named_request(self):
+ class foo(object):
+ def __init__(self, request):
+ """ """
+ self.assertTrue(self._callFUT(foo))
+
+ def test_newstyle_class_init_onearg_named_somethingelse(self):
+ class foo(object):
+ def __init__(self, req):
+ """ """
+ self.assertTrue(self._callFUT(foo))
+
+ def test_newstyle_class_init_defaultargs_firstname_not_request(self):
+ class foo(object):
+ def __init__(self, context, request=None):
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_newstyle_class_init_defaultargs_firstname_request(self):
+ class foo(object):
+ def __init__(self, request, foo=1, bar=2):
+ """ """
+ self.assertTrue(self._callFUT(foo))
+
+ def test_newstyle_class_init_noargs(self):
+ class foo(object):
+ def __init__():
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_oldstyle_class_no_init(self):
+ class foo:
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_oldstyle_class_init_toomanyargs(self):
+ class foo:
+ def __init__(self, context, request):
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_oldstyle_class_init_onearg_named_request(self):
+ class foo:
+ def __init__(self, request):
+ """ """
+ self.assertTrue(self._callFUT(foo))
+
+ def test_oldstyle_class_init_onearg_named_somethingelse(self):
+ class foo:
+ def __init__(self, req):
+ """ """
+ self.assertTrue(self._callFUT(foo))
+
+ def test_oldstyle_class_init_defaultargs_firstname_not_request(self):
+ class foo:
+ def __init__(self, context, request=None):
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_oldstyle_class_init_defaultargs_firstname_request(self):
+ class foo:
+ def __init__(self, request, foo=1, bar=2):
+ """ """
+ self.assertTrue(self._callFUT(foo), True)
+
+ def test_oldstyle_class_init_noargs(self):
+ class foo:
+ def __init__():
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_function_toomanyargs(self):
+ def foo(context, request):
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_function_onearg_named_request(self):
+ def foo(request):
+ """ """
+ self.assertTrue(self._callFUT(foo))
+
+ def test_function_onearg_named_somethingelse(self):
+ def foo(req):
+ """ """
+ self.assertTrue(self._callFUT(foo))
+
+ def test_function_defaultargs_firstname_not_request(self):
+ def foo(context, request=None):
+ """ """
+ self.assertFalse(self._callFUT(foo))
+
+ def test_function_defaultargs_firstname_request(self):
+ def foo(request, foo=1, bar=2):
+ """ """
+ self.assertTrue(self._callFUT(foo), True)
+
+ def test_instance_toomanyargs(self):
+ class Foo:
+ def __call__(self, context, request):
+ """ """
+ foo = Foo()
+ self.assertFalse(self._callFUT(foo))
+
+ def test_instance_defaultargs_onearg_named_request(self):
+ class Foo:
+ def __call__(self, request):
+ """ """
+ foo = Foo()
+ self.assertTrue(self._callFUT(foo))
+
+ def test_instance_defaultargs_onearg_named_somethingelse(self):
+ class Foo:
+ def __call__(self, req):
+ """ """
+ foo = Foo()
+ self.assertTrue(self._callFUT(foo))
+
+ def test_instance_defaultargs_firstname_not_request(self):
+ class Foo:
+ def __call__(self, context, request=None):
+ """ """
+ foo = Foo()
+ self.assertFalse(self._callFUT(foo))
+
+ def test_instance_defaultargs_firstname_request(self):
+ class Foo:
+ def __call__(self, request, foo=1, bar=2):
+ """ """
+ foo = Foo()
+ self.assertTrue(self._callFUT(foo), True)
+
+ def test_instance_nocall(self):
+ class Foo: pass
+ foo = Foo()
+ self.assertFalse(self._callFUT(foo))
+
+class TestDecorateView(unittest.TestCase):
+ def _callFUT(self, wrapped, original):
+ from repoze.bfg.view import decorate_view
+ return decorate_view(wrapped, original)
+
+ def test_it_same(self):
+ def view(context, request):
+ """ """
+ result = self._callFUT(view, view)
+ self.assertEqual(result, False)
+
+ def test_it_different(self):
+ class DummyView1:
+ """ 1 """
+ __name__ = '1'
+ __module__ = '1'
+ def __call__(self, context, request):
+ """ """
+ def __call_permissive__(self, context, reuqest):
+ """ """
+ def __predicated__(self, context, reuqest):
+ """ """
+ def __permitted__(self, context, request):
+ """ """
+ class DummyView2:
+ """ 2 """
+ __name__ = '2'
+ __module__ = '2'
+ def __call__(self, context, request):
+ """ """
+ def __call_permissive__(self, context, reuqest):
+ """ """
+ def __predicated__(self, context, reuqest):
+ """ """
+ def __permitted__(self, context, request):
+ """ """
+ view1 = DummyView1()
+ view2 = DummyView2()
+ result = self._callFUT(view1, view2)
+ self.assertEqual(result, True)
+ self.failUnless(view1.__doc__ is view2.__doc__)
+ self.failUnless(view1.__module__ is view2.__module__)
+ self.failUnless(view1.__name__ is view2.__name__)
+ self.failUnless(view1.__call_permissive__.im_func is
+ view2.__call_permissive__.im_func)
+ self.failUnless(view1.__permitted__.im_func is
+ view2.__permitted__.im_func)
+ self.failUnless(view1.__predicated__.im_func is
+ view2.__predicated__.im_func)
class DummyContext:
pass
@@ -531,8 +947,9 @@ def make_view(response):
class DummyResponse:
status = '200 OK'
headerlist = ()
- app_iter = ()
-
-class DummySecurityPolicy:
- pass
-
+ def __init__(self, body=None):
+ if body is None:
+ self.app_iter = ()
+ else:
+ self.app_iter = [body]
+
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py
index 49baa3a34..fdf8fa9e3 100644
--- a/repoze/bfg/tests/test_zcml.py
+++ b/repoze/bfg/tests/test_zcml.py
@@ -20,185 +20,144 @@ class TestViewDirective(unittest.TestCase):
'repoze.view', None)
def test_view_as_function(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
context = DummyContext()
- class IFoo:
+ class IFoo(Interface):
pass
view = lambda *arg: None
self._callFUT(context, 'repoze.view', IFoo, view=view)
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
- from repoze.bfg.zcml import handler
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IRequest,
- 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'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- 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], 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)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ self.failUnless(wrapper)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
def test_view_as_function_requestonly(self):
+ from zope.interface import Interface
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
+
context = DummyContext()
def view(request):
return 'OK'
- class IFoo:
+ class IFoo(Interface):
pass
self._callFUT(context, 'repoze.view', IFoo, view=view)
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
- from repoze.bfg.zcml import handler
-
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IRequest,
- 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'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', IRequest, IView)
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerAdapter')
- wrapper = regadapt['args'][1]
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
self.failIfEqual(wrapper, view)
self.assertEqual(wrapper.__module__, view.__module__)
self.assertEqual(wrapper.__name__, view.__name__)
self.assertEqual(wrapper.__doc__, view.__doc__)
result = wrapper(None, None)
self.assertEqual(result, 'OK')
- self.assertEqual(regadapt['args'][2], (IFoo, IRequest))
- self.assertEqual(regadapt['args'][3], IView)
- self.assertEqual(regadapt['args'][4], '')
- self.assertEqual(regadapt['args'][5], None)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
def test_view_as_instance(self):
+ from zope.interface import Interface
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
+
context = DummyContext()
class AView:
def __call__(self, context, request):
""" """
view = AView()
- class IFoo:
+ class IFoo(Interface):
pass
self._callFUT(context, 'repoze.view', IFoo, view=view)
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
- from repoze.bfg.zcml import handler
+ self.assertEqual(len(actions), 1)
- self.assertEqual(len(actions), 2)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ self.failUnless(wrapper)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IRequest,
- 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'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- 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], 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)
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
def test_view_as_instance_requestonly(self):
+ from zope.interface import Interface
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
+
context = DummyContext()
class AView:
def __call__(self, request):
return 'OK'
view = AView()
- class IFoo:
+ class IFoo(Interface):
pass
self._callFUT(context, 'repoze.view', IFoo, view=view)
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
- from repoze.bfg.zcml import handler
-
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IRequest,
- 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'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', IRequest, IView)
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerAdapter')
- wrapper = regadapt['args'][1]
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
self.failIfEqual(wrapper, view)
self.assertEqual(wrapper.__module__, view.__module__)
self.failUnless('instance' in wrapper.__name__)
self.assertEqual(wrapper.__doc__, view.__doc__)
result = wrapper(None, None)
self.assertEqual(result, 'OK')
- self.assertEqual(regadapt['args'][2], (IFoo, IRequest))
- self.assertEqual(regadapt['args'][3], IView)
- self.assertEqual(regadapt['args'][4], '')
- self.assertEqual(regadapt['args'][5], None)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
def test_view_as_oldstyle_class(self):
+ from zope.interface import Interface
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
context = DummyContext()
- class IFoo:
+ class IFoo(Interface):
pass
class view:
def __init__(self, context, request):
@@ -209,47 +168,36 @@ class TestViewDirective(unittest.TestCase):
return self
self._callFUT(context, 'repoze.view', IFoo, view=view)
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
- from repoze.bfg.zcml import handler
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IRequest,
- 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'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', IRequest, IView)
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerAdapter')
- wrapper = regadapt['args'][1]
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
self.assertEqual(wrapper.__module__, view.__module__)
self.assertEqual(wrapper.__name__, view.__name__)
self.assertEqual(wrapper.__doc__, view.__doc__)
result = wrapper(None, None)
self.assertEqual(result.context, None)
self.assertEqual(result.request, None)
- self.assertEqual(regadapt['args'][2], (IFoo, IRequest))
- self.assertEqual(regadapt['args'][3], IView)
- self.assertEqual(regadapt['args'][4], '')
- self.assertEqual(regadapt['args'][5], None)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
def test_view_as_oldstyle_class_requestonly(self):
+ from zope.interface import Interface
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
+
context = DummyContext()
- class IFoo:
+ class IFoo(Interface):
pass
class view:
def __init__(self, request):
@@ -259,46 +207,35 @@ class TestViewDirective(unittest.TestCase):
return self
self._callFUT(context, 'repoze.view', IFoo, view=view)
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
- from repoze.bfg.zcml import handler
-
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IRequest,
- 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'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', IRequest, IView)
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerAdapter')
- wrapper = regadapt['args'][1]
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
self.assertEqual(wrapper.__module__, view.__module__)
self.assertEqual(wrapper.__name__, view.__name__)
self.assertEqual(wrapper.__doc__, view.__doc__)
result = wrapper(None, None)
self.assertEqual(result.request, None)
- self.assertEqual(regadapt['args'][2], (IFoo, IRequest))
- self.assertEqual(regadapt['args'][3], IView)
- self.assertEqual(regadapt['args'][4], '')
- self.assertEqual(regadapt['args'][5], None)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
+
def test_view_as_newstyle_class(self):
+ from zope.interface import Interface
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
+
context = DummyContext()
- class IFoo:
+ class IFoo(Interface):
pass
class view(object):
def __init__(self, context, request):
@@ -309,47 +246,35 @@ class TestViewDirective(unittest.TestCase):
return self
self._callFUT(context, 'repoze.view', IFoo, view=view)
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
- from repoze.bfg.zcml import handler
-
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IRequest,
- 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'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', IRequest, IView)
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerAdapter')
- wrapper = regadapt['args'][1]
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
self.assertEqual(wrapper.__module__, view.__module__)
self.assertEqual(wrapper.__name__, view.__name__)
self.assertEqual(wrapper.__doc__, view.__doc__)
result = wrapper(None, None)
self.assertEqual(result.context, None)
self.assertEqual(result.request, None)
- self.assertEqual(regadapt['args'][2], (IFoo, IRequest))
- self.assertEqual(regadapt['args'][3], IView)
- self.assertEqual(regadapt['args'][4], '')
- self.assertEqual(regadapt['args'][5], None)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
def test_view_as_newstyle_class_requestonly(self):
+ from zope.interface import Interface
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
+
context = DummyContext()
- class IFoo:
+ class IFoo(Interface):
pass
class view(object):
def __init__(self, request):
@@ -359,170 +284,470 @@ class TestViewDirective(unittest.TestCase):
return self
self._callFUT(context, 'repoze.view', IFoo, view=view)
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
- from repoze.bfg.zcml import handler
-
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IRequest,
- 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'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', IRequest, IView)
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerAdapter')
- wrapper = regadapt['args'][1]
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
self.assertEqual(wrapper.__module__, view.__module__)
self.assertEqual(wrapper.__name__, view.__name__)
self.assertEqual(wrapper.__doc__, view.__doc__)
result = wrapper(None, None)
self.assertEqual(result.request, None)
- self.assertEqual(regadapt['args'][2], (IFoo, IRequest))
- self.assertEqual(regadapt['args'][3], IView)
- self.assertEqual(regadapt['args'][4], '')
- self.assertEqual(regadapt['args'][5], None)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
+
def test_request_type_asinterface(self):
- context = DummyContext()
- class IFoo:
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
+ class IRequest(Interface):
+ pass
+ class IFoo(Interface):
pass
+ context = DummyContext(IRequest)
view = lambda *arg: None
self._callFUT(context, 'repoze.view', IFoo, view=view,
request_type=IDummy)
actions = context.actions
+
+ self.assertEqual(len(actions), 1)
+
+ action = actions[0]
+ discrim = ('view', IFoo, '', IDummy, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IDummy), IView, name='')
+ self.failUnless(wrapper)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
+
+ def test_request_type_as_noninterface(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from zope.interface import implementedBy
from repoze.bfg.interfaces import IView
- from repoze.bfg.interfaces import IViewPermission
- from repoze.bfg.security import ViewPermissionFactory
- from repoze.bfg.zcml import handler
+ class IFoo(Interface):
+ pass
+ class Dummy:
+ pass
+ context = DummyContext(Dummy)
+ view = lambda *arg: None
+ self._callFUT(context, 'repoze.view', IFoo, view=view,
+ request_type=Dummy)
+ actions = context.actions
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', DummyModule,
- 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, DummyModule))
- self.assertEqual(permission['args'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', DummyModule, 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, DummyModule))
- self.assertEqual(regadapt['args'][3], IView)
- self.assertEqual(regadapt['args'][4], '')
- self.assertEqual(regadapt['args'][5], None)
+ action = actions[0]
+ discrim = ('view', IFoo, '', Dummy, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ iface = implementedBy(Dummy)
+ wrapper = sm.adapters.lookup((IFoo, iface), IView, name='')
+ self.failUnless(wrapper)
+ self.failIf(hasattr(wrapper, '__call_permissive__'))
def test_request_type_ashttpmethod(self):
+ from zope.interface import Interface
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRequest
context = DummyContext()
- class IFoo:
+ class IFoo(Interface):
pass
view = lambda *arg: None
self._callFUT(context, 'repoze.view', IFoo, view=view,
request_type='GET')
actions = context.actions
- from repoze.bfg.interfaces import IView
- from repoze.bfg.interfaces import IGETRequest
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- self.assertEqual(permission['args'][2], (IFoo, IGETRequest))
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', IDummy, IView)
- self.assertEqual(regadapt['args'][2], (IFoo, IGETRequest))
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, 'GET', None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ request.method = 'GET'
+ self.assertEqual(wrapper.__predicated__(None, request), True)
+ request.method = 'POST'
+ self.assertEqual(wrapper.__predicated__(None, request), False)
+
def test_request_type_asinterfacestring(self):
- context = DummyContext()
- class IFoo:
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IViewPermission
+ class IFoo(Interface):
+ pass
+ class IRequest(Interface):
pass
+ context = DummyContext(IRequest)
view = lambda *arg: None
self._callFUT(context, 'repoze.view', IFoo, view=view,
request_type='whatever')
actions = context.actions
- from repoze.bfg.interfaces import IView
- self.assertEqual(len(actions), 2)
+ self.assertEqual(len(actions), 1)
- permission = actions[0]
- self.assertEqual(permission['args'][2], (IFoo, DummyModule))
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', DummyModule, IView)
- self.assertEqual(regadapt['args'][2], (IFoo, DummyModule))
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(actions[0]['discriminator'], discrim)
+ register = actions[0]['callable']
+ register()
+ sm = getSiteManager()
+ regview = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ self.assertEqual(view, regview)
+ self.failIf(hasattr(view, '__call_permissive__'))
+
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, None)
def test_with_route_name(self):
+ from zope.interface import Interface
+ from zope.interface import implementedBy
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+ class IFoo(Interface):
+ pass
+ context = DummyContext()
+ view = lambda *arg: '123'
+ self._callFUT(context, 'repoze.view', IFoo, view=view, route_name='foo')
+ actions = context.actions
+
+ self.assertEqual(len(actions), 1)
+
+ action = actions[0]
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ factory = sm.getUtility(IRouteRequest, 'foo')
+ request_type = implementedBy(factory)
+ discrim = ('view', IFoo, '', request_type, IView, None, None, None,
+ 'foo')
+ self.assertEqual(action['discriminator'], discrim)
+ the_view = sm.adapters.lookup((IFoo, request_type), IView, name='')
+ request = factory({})
+ self.assertEqual(the_view(None, request), '123')
+
+ def test_with_request_method_true(self):
from zope.component import getSiteManager
- from repoze.bfg.interfaces import IRequestFactories
- class IFoo:
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ context = DummyContext()
+ class IFoo(Interface):
pass
- class IDummyRequest:
+ view = lambda *arg: None
+ sm = getSiteManager()
+ def view(context, request):
+ return '123'
+ self._callFUT(context, None, IFoo, view=view, request_method='POST')
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, 'POST', None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ request.method = 'POST'
+ self.assertEqual(wrapper(None, request), '123')
+
+ def test_with_request_method_false(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.view import NotFound
+ context = DummyContext()
+ class IFoo(Interface):
pass
+ view = lambda *arg: None
+ sm = getSiteManager()
+ def view(context, request):
+ """ """
+ self._callFUT(context, None, IFoo, view=view, request_method='POST')
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, 'POST', None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ request.method = 'GET'
+ self.assertRaises(NotFound, wrapper, None, request)
+
+ def test_with_request_param_noval_true(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
context = DummyContext()
- factories = {None:{'interface':IDummyRequest}}
+ class IFoo(Interface):
+ pass
+ view = lambda *arg: None
sm = getSiteManager()
- sm.registerUtility(factories, IRequestFactories, name='foo')
+ def view(context, request):
+ return '123'
+ self._callFUT(context, None, IFoo, view=view, request_param='abc')
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, 'abc', None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ request.params = {'abc':''}
+ self.assertEqual(wrapper(None, request), '123')
+
+ def test_with_request_param_noval_false(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.view import NotFound
+ context = DummyContext()
+ class IFoo(Interface):
+ pass
view = lambda *arg: None
- self._callFUT(context, 'repoze.view', IFoo, view=view, route_name='foo')
+ sm = getSiteManager()
+ def view(context, request):
+ """ """
+ self._callFUT(context, None, IFoo, view=view, request_param='abc')
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, 'abc', None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ request.params = {}
+ self.assertRaises(NotFound, wrapper, None, request)
+
+ def test_with_request_paramoval_true(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ context = DummyContext()
+ class IFoo(Interface):
+ pass
+ view = lambda *arg: None
+ sm = getSiteManager()
+ def view(context, request):
+ return '123'
+ self._callFUT(context, None, IFoo, view=view, request_param='abc=123')
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, 'abc', None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ request.params = {'abc':'123'}
+ self.assertEqual(wrapper(None, request), '123')
+
+ def test_with_request_param_val_false(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.view import NotFound
+ context = DummyContext()
+ class IFoo(Interface):
+ pass
+ view = lambda *arg: None
+ sm = getSiteManager()
+ def view(context, request):
+ """ """
+ self._callFUT(context, None, IFoo, view=view, request_param='abc=123')
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, 'abc', None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ request.params = {'abc':'456'}
+ self.assertRaises(NotFound, wrapper, None, request)
+
+ def test_with_containment_true(self):
+ from zope.component import getSiteManager
+ from zope.interface import directlyProvides
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ context = DummyContext()
+ class IFoo(Interface):
+ pass
+ view = lambda *arg: None
+ sm = getSiteManager()
+ def view(context, request):
+ return '123'
+ sm.registerAdapter(view, (IFoo, IRequest), IView, name='')
+ self._callFUT(context, None, IFoo, view=view, containment=IFoo)
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, IFoo, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ context = Dummy()
+ directlyProvides(context, IFoo)
+ self.assertEqual(wrapper(context, request), '123')
+
+ def test_with_containment_false(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.view import NotFound
+ context = DummyContext()
+ class IFoo(Interface):
+ pass
+ view = lambda *arg: None
+ sm = getSiteManager()
+ def view(context, request):
+ """ """
+ self._callFUT(context, None, IFoo, view=view, containment=IFoo)
actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, IFoo, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ request = DummyRequest()
+ context = Dummy()
+ self.assertRaises(NotFound, wrapper, context, request)
+
+ def test_multiview_replaces_traditional_view(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from repoze.bfg.interfaces import IRequest
from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IMultiView
from repoze.bfg.interfaces import IViewPermission
- from repoze.bfg.security import ViewPermissionFactory
- from repoze.bfg.zcml import handler
-
- self.assertEqual(len(actions), 2)
-
- permission = actions[0]
- permission_discriminator = ('permission', IFoo, '', IDummyRequest,
- 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, IDummyRequest))
- self.assertEqual(permission['args'][3], IViewPermission)
- self.assertEqual(permission['args'][4], '')
- self.assertEqual(permission['args'][5], None)
-
- regadapt = actions[1]
- regadapt_discriminator = ('view', IFoo, '', IDummyRequest, 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, IDummyRequest))
- self.assertEqual(regadapt['args'][3], IView)
- self.assertEqual(regadapt['args'][4], '')
- self.assertEqual(regadapt['args'][5], None)
-
- def test_with_route_name_bad_order(self):
context = DummyContext()
- context.request_factories = {}
+ class IFoo(Interface):
+ pass
view = lambda *arg: None
- from zope.configuration.exceptions import ConfigurationError
- self.assertRaises(ConfigurationError, self._callFUT, context,
- 'repoze.view', None, view, '', None, 'foo')
+ sm = getSiteManager()
+ def view(context, request):
+ return '123'
+ sm.registerAdapter(view, (IFoo, IRequest), IView, name='')
+ self._callFUT(context, 'repoze.view', IFoo, view=view)
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ self.failUnless(IMultiView.providedBy(wrapper))
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, wrapper.__permitted__)
+ self.assertEqual(wrapper(None, None), '123')
+
+ def test_multiview_replaces_multiview(self):
+ from zope.component import getSiteManager
+ from zope.interface import Interface
+ from zope.interface import implements
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IMultiView
+ from repoze.bfg.interfaces import IViewPermission
+ context = DummyContext()
+ class IFoo(Interface):
+ pass
+ view = lambda *arg: None
+ sm = getSiteManager()
+ class DummyMultiView:
+ implements(IMultiView)
+ def __init__(self):
+ self.views = []
+ self.name = 'name'
+ def add(self, view, score):
+ self.views.append(view)
+ def __call__(self, context, request):
+ return '123'
+ def __permitted__(self, context, request):
+ """ """
+ view = DummyMultiView()
+ sm.registerAdapter(view, (IFoo, IRequest), IMultiView, name='')
+ def view2(context, request):
+ """ """
+ self._callFUT(context, None, IFoo, view=view2)
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', IFoo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ wrapper = sm.adapters.lookup((IFoo, IRequest), IView, name='')
+ perm = sm.adapters.lookup((IFoo, IRequest), IViewPermission, name='')
+ self.assertEqual(perm, wrapper.__permitted__)
+ self.failUnless(IMultiView.providedBy(wrapper))
+ self.assertEqual(wrapper(None, None), '123')
+ self.assertEqual(wrapper.views, [view2])
+
+ def test_for_as_class(self):
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
+ from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
+ context = DummyContext()
+ class Foo:
+ pass
+ sm = getSiteManager()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'repoze.view', Foo, view=view)
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+ action = actions[0]
+ discrim = ('view', Foo, '', IRequest, IView, None, None, None, None)
+ self.assertEqual(action['discriminator'], discrim)
+ register = action['callable']
+ register()
+ foo = implementedBy(Foo)
+ wrapper = sm.adapters.lookup((foo, IRequest), IView, name='')
+ self.assertEqual(wrapper, view)
class TestNotFoundDirective(unittest.TestCase):
def _callFUT(self, context, view):
@@ -530,27 +755,24 @@ class TestNotFoundDirective(unittest.TestCase):
return notfound(context, view)
def test_it(self):
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import INotFoundView
+
context = DummyContext()
def view(request):
return 'OK'
self._callFUT(context, view)
actions = context.actions
- from repoze.bfg.interfaces import INotFoundView
- from repoze.bfg.zcml import handler
-
self.assertEqual(len(actions), 1)
regadapt = actions[0]
- regadapt_discriminator = ('notfound_view',)
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- derived_view = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], INotFoundView)
+ register = regadapt['callable']
+ register()
+ sm = getSiteManager()
+ derived_view = sm.getUtility(INotFoundView)
self.assertEqual(derived_view(None, None), 'OK')
self.assertEqual(derived_view.__name__, view.__name__)
- self.assertEqual(regadapt['args'][2], INotFoundView)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
class TestForbiddenDirective(unittest.TestCase):
def _callFUT(self, context, view):
@@ -558,155 +780,143 @@ class TestForbiddenDirective(unittest.TestCase):
return forbidden(context, view)
def test_it(self):
+ from zope.component import getSiteManager
context = DummyContext()
def view(request):
return 'OK'
self._callFUT(context, view)
actions = context.actions
from repoze.bfg.interfaces import IForbiddenView
- from repoze.bfg.zcml import handler
self.assertEqual(len(actions), 1)
regadapt = actions[0]
- regadapt_discriminator = ('notfound_view',)
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- derived_view = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], IForbiddenView)
+ register = regadapt['callable']
+ register()
+ sm = getSiteManager()
+ derived_view = sm.getUtility(IForbiddenView)
self.assertEqual(derived_view(None, None), 'OK')
self.assertEqual(derived_view.__name__, view.__name__)
- self.assertEqual(regadapt['args'][2], IForbiddenView)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
class TestRepozeWho1AuthenticationPolicyDirective(unittest.TestCase):
+ def setUp(self):
+ cleanUp()
+
+ def tearDown(self):
+ cleanUp()
+
def _callFUT(self, context, **kw):
from repoze.bfg.zcml import repozewho1authenticationpolicy
return repozewho1authenticationpolicy(context, **kw)
def test_it_defaults(self):
+ from zope.component import getUtility
+ from repoze.bfg.interfaces import IAuthenticationPolicy
context = DummyContext()
self._callFUT(context)
actions = context.actions
- from repoze.bfg.interfaces import IAuthenticationPolicy
- from repoze.bfg.zcml import handler
-
self.assertEqual(len(actions), 1)
-
regadapt = actions[0]
- regadapt_discriminator = 'authentication_policy'
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- policy = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy)
+ self.assertEqual(regadapt['callable'], None)
+ self.assertEqual(regadapt['args'], ())
+ policy = getUtility(IAuthenticationPolicy)
self.assertEqual(policy.callback, None)
self.assertEqual(policy.identifier_name, 'auth_tkt')
- self.assertEqual(regadapt['args'][2], IAuthenticationPolicy)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
def test_it(self):
+ from zope.component import getUtility
+ from repoze.bfg.interfaces import IAuthenticationPolicy
context = DummyContext()
def callback(identity, request):
""" """
self._callFUT(context, identifier_name='something', callback=callback)
actions = context.actions
- from repoze.bfg.interfaces import IAuthenticationPolicy
- from repoze.bfg.zcml import handler
-
self.assertEqual(len(actions), 1)
-
regadapt = actions[0]
- regadapt_discriminator = 'authentication_policy'
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- policy = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy)
+ self.assertEqual(regadapt['callable'], None)
+ self.assertEqual(regadapt['args'], ())
+ policy = getUtility(IAuthenticationPolicy)
self.assertEqual(policy.callback, callback)
self.assertEqual(policy.identifier_name, 'something')
- self.assertEqual(regadapt['args'][2], IAuthenticationPolicy)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
class TestRemoteUserAuthenticationPolicyDirective(unittest.TestCase):
+ def setUp(self):
+ cleanUp()
+
+ def tearDown(self):
+ cleanUp()
+
def _callFUT(self, context, **kw):
from repoze.bfg.zcml import remoteuserauthenticationpolicy
return remoteuserauthenticationpolicy(context, **kw)
def test_defaults(self):
+ from repoze.bfg.interfaces import IAuthenticationPolicy
+ from zope.component import getUtility
context = DummyContext()
def callback(identity, request):
""" """
self._callFUT(context)
actions = context.actions
- from repoze.bfg.interfaces import IAuthenticationPolicy
- from repoze.bfg.zcml import handler
-
self.assertEqual(len(actions), 1)
-
regadapt = actions[0]
regadapt_discriminator = 'authentication_policy'
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- policy = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy)
+ self.assertEqual(regadapt['callable'], None)
+ self.assertEqual(regadapt['args'], ())
+ policy = getUtility(IAuthenticationPolicy)
self.assertEqual(policy.environ_key, 'REMOTE_USER')
self.assertEqual(policy.callback, None)
- self.assertEqual(regadapt['args'][2], IAuthenticationPolicy)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
def test_it(self):
+ from zope.component import getUtility
+ from repoze.bfg.interfaces import IAuthenticationPolicy
context = DummyContext()
def callback(identity, request):
""" """
self._callFUT(context, environ_key='BLAH', callback=callback)
actions = context.actions
- from repoze.bfg.interfaces import IAuthenticationPolicy
- from repoze.bfg.zcml import handler
-
self.assertEqual(len(actions), 1)
-
regadapt = actions[0]
- regadapt_discriminator = 'authentication_policy'
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- policy = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy)
+ self.assertEqual(regadapt['callable'], None)
+ self.assertEqual(regadapt['args'], ())
+ policy = getUtility(IAuthenticationPolicy)
self.assertEqual(policy.environ_key, 'BLAH')
self.assertEqual(policy.callback, callback)
- self.assertEqual(regadapt['args'][2], IAuthenticationPolicy)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
class TestAuthTktAuthenticationPolicyDirective(unittest.TestCase):
+ def setUp(self):
+ cleanUp()
+
+ def tearDown(self):
+ cleanUp()
+
def _callFUT(self, context, secret, **kw):
from repoze.bfg.zcml import authtktauthenticationpolicy
return authtktauthenticationpolicy(context, secret, **kw)
def test_it_defaults(self):
+ from zope.component import getUtility
+ from repoze.bfg.interfaces import IAuthenticationPolicy
context = DummyContext()
self._callFUT(context, 'sosecret')
actions = context.actions
- from repoze.bfg.interfaces import IAuthenticationPolicy
- from repoze.bfg.zcml import handler
-
self.assertEqual(len(actions), 1)
-
regadapt = actions[0]
- regadapt_discriminator = 'authentication_policy'
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- policy = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy)
+ self.assertEqual(regadapt['callable'], None)
+ self.assertEqual(regadapt['args'], ())
+ policy = getUtility(IAuthenticationPolicy)
self.assertEqual(policy.cookie.secret, 'sosecret')
self.assertEqual(policy.callback, None)
- self.assertEqual(regadapt['args'][2], IAuthenticationPolicy)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
def test_it_noconfigerror(self):
+ from zope.component import getUtility
+ from repoze.bfg.interfaces import IAuthenticationPolicy
context = DummyContext()
def callback(identity, request):
""" """
@@ -715,22 +925,14 @@ class TestAuthTktAuthenticationPolicyDirective(unittest.TestCase):
secure=True, include_ip=True, timeout=100,
reissue_time=60)
actions = context.actions
- from repoze.bfg.interfaces import IAuthenticationPolicy
- from repoze.bfg.zcml import handler
-
self.assertEqual(len(actions), 1)
-
regadapt = actions[0]
- regadapt_discriminator = 'authentication_policy'
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- policy = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy)
+ self.assertEqual(regadapt['callable'], None)
+ self.assertEqual(regadapt['args'], ())
+ policy = getUtility(IAuthenticationPolicy)
self.assertEqual(policy.cookie.secret, 'sosecret')
self.assertEqual(policy.callback, callback)
- self.assertEqual(regadapt['args'][2], IAuthenticationPolicy)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
def test_it_configerror(self):
from zope.configuration.exceptions import ConfigurationError
@@ -745,43 +947,74 @@ class TestAuthTktAuthenticationPolicyDirective(unittest.TestCase):
reissue_time=500)
class TestACLAuthorizationPolicyDirective(unittest.TestCase):
+ def setUp(self):
+ cleanUp()
+
+ def tearDown(self):
+ cleanUp()
+
def _callFUT(self, context, **kw):
from repoze.bfg.zcml import aclauthorizationpolicy
return aclauthorizationpolicy(context, **kw)
def test_it(self):
+ from zope.component import getUtility
from repoze.bfg.authorization import ACLAuthorizationPolicy
from repoze.bfg.interfaces import IAuthorizationPolicy
- from repoze.bfg.zcml import handler
context = DummyContext()
def callback(identity, request):
""" """
self._callFUT(context)
actions = context.actions
-
self.assertEqual(len(actions), 1)
-
regadapt = actions[0]
- regadapt_discriminator = 'authorization_policy'
- self.assertEqual(regadapt['discriminator'], regadapt_discriminator)
- self.assertEqual(regadapt['callable'], handler)
- self.assertEqual(regadapt['args'][0], 'registerUtility')
- policy = regadapt['args'][1]
+ self.assertEqual(regadapt['discriminator'], IAuthorizationPolicy)
+ self.assertEqual(regadapt['callable'], None)
+ self.assertEqual(regadapt['args'], ())
+ policy = getUtility(IAuthorizationPolicy)
self.assertEqual(policy.__class__, ACLAuthorizationPolicy)
- self.assertEqual(regadapt['args'][2], IAuthorizationPolicy)
- self.assertEqual(regadapt['args'][3], '')
- self.assertEqual(regadapt['args'][4], None)
class TestDeriveView(unittest.TestCase):
- def _callFUT(self, view):
+ def setUp(self):
+ cleanUp()
+
+ def tearDown(self):
+ cleanUp()
+
+ def _callFUT(self, view, *arg, **kw):
from repoze.bfg.zcml import derive_view
- return derive_view(view)
+ return derive_view(view, *arg, **kw)
+
+ def _registerLogger(self):
+ from repoze.bfg.interfaces import ILogger
+ from zope.component import getSiteManager
+ logger = DummyLogger()
+ sm = getSiteManager()
+ sm.registerUtility(logger, ILogger, 'repoze.bfg.debug')
+ return logger
+
+ def _registerSettings(self, **d):
+ from repoze.bfg.interfaces import ISettings
+ from zope.component import getSiteManager
+ settings = DummySettings(d)
+ sm = getSiteManager()
+ sm.registerUtility(settings, ISettings)
+
+ def _registerSecurityPolicy(self, permissive):
+ from repoze.bfg.interfaces import IAuthenticationPolicy
+ from repoze.bfg.interfaces import IAuthorizationPolicy
+ from zope.component import getSiteManager
+ policy = DummySecurityPolicy(permissive)
+ sm = getSiteManager()
+ sm.registerUtility(policy, IAuthenticationPolicy)
+ sm.registerUtility(policy, IAuthorizationPolicy)
def test_view_as_function_context_and_request(self):
def view(context, request):
return 'OK'
result = self._callFUT(view)
self.failUnless(result is view)
+ self.failIf(hasattr(result, '__call_permissive__'))
self.assertEqual(view(None, None), 'OK')
def test_view_as_function_requestonly(self):
@@ -792,6 +1025,7 @@ class TestDeriveView(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
+ self.failIf(hasattr(result, '__call_permissive__'))
self.assertEqual(result(None, None), 'OK')
def test_view_as_newstyle_class_context_and_request(self):
@@ -805,6 +1039,7 @@ class TestDeriveView(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
+ self.failIf(hasattr(result, '__call_permissive__'))
self.assertEqual(result(None, None), 'OK')
def test_view_as_newstyle_class_requestonly(self):
@@ -818,6 +1053,7 @@ class TestDeriveView(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
+ self.failIf(hasattr(result, '__call_permissive__'))
self.assertEqual(result(None, None), 'OK')
def test_view_as_oldstyle_class_context_and_request(self):
@@ -831,6 +1067,7 @@ class TestDeriveView(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
+ self.failIf(hasattr(result, '__call_permissive__'))
self.assertEqual(result(None, None), 'OK')
def test_view_as_oldstyle_class_requestonly(self):
@@ -844,6 +1081,7 @@ class TestDeriveView(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.assertEqual(view.__name__, result.__name__)
+ self.failIf(hasattr(result, '__call_permissive__'))
self.assertEqual(result(None, None), 'OK')
def test_view_as_instance_context_and_request(self):
@@ -853,6 +1091,7 @@ class TestDeriveView(unittest.TestCase):
view = View()
result = self._callFUT(view)
self.failUnless(result is view)
+ self.failIf(hasattr(result, '__call_permissive__'))
self.assertEqual(result(None, None), 'OK')
def test_view_as_instance_requestonly(self):
@@ -865,8 +1104,158 @@ class TestDeriveView(unittest.TestCase):
self.assertEqual(view.__module__, result.__module__)
self.assertEqual(view.__doc__, result.__doc__)
self.failUnless('instance' in result.__name__)
+ self.failIf(hasattr(result, '__call_permissive__'))
self.assertEqual(result(None, None), 'OK')
+ def test_view_with_debug_authorization_no_authpol(self):
+ def view(context, request):
+ return 'OK'
+ self._registerSettings(debug_authorization=True)
+ logger = self._registerLogger()
+ result = self._callFUT(view, permission='view')
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.failIf(hasattr(result, '__call_permissive__'))
+ request = DummyRequest()
+ request.view_name = 'view_name'
+ request.url = 'url'
+ self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(len(logger.messages), 1)
+ self.assertEqual(logger.messages[0],
+ "debug_authorization of url url (view name "
+ "'view_name' against context None): Allowed "
+ "(no authorization policy in use)")
+
+ def test_view_with_debug_authorization_no_permission(self):
+ def view(context, request):
+ return 'OK'
+ self._registerSettings(debug_authorization=True)
+ self._registerSecurityPolicy(True)
+ logger = self._registerLogger()
+ result = self._callFUT(view)
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.failIf(hasattr(result, '__call_permissive__'))
+ request = DummyRequest()
+ request.view_name = 'view_name'
+ request.url = 'url'
+ self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(len(logger.messages), 1)
+ self.assertEqual(logger.messages[0],
+ "debug_authorization of url url (view name "
+ "'view_name' against context None): Allowed ("
+ "no permission registered)")
+
+ def test_view_with_debug_authorization_permission_authpol_permitted(self):
+ def view(context, request):
+ return 'OK'
+ self._registerSettings(debug_authorization=True)
+ logger = self._registerLogger()
+ self._registerSecurityPolicy(True)
+ result = self._callFUT(view, permission='view')
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.assertEqual(result.__call_permissive__, view)
+ request = DummyRequest()
+ request.view_name = 'view_name'
+ request.url = 'url'
+ self.assertEqual(result(None, request), 'OK')
+ self.assertEqual(len(logger.messages), 1)
+ self.assertEqual(logger.messages[0],
+ "debug_authorization of url url (view name "
+ "'view_name' against context None): True")
+
+ def test_view_with_debug_authorization_permission_authpol_denied(self):
+ from repoze.bfg.security import Unauthorized
+ def view(context, request):
+ """ """
+ self._registerSettings(debug_authorization=True)
+ logger = self._registerLogger()
+ self._registerSecurityPolicy(False)
+ result = self._callFUT(view, permission='view')
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ self.assertEqual(result.__call_permissive__, view)
+ request = DummyRequest()
+ request.view_name = 'view_name'
+ request.url = 'url'
+ self.assertRaises(Unauthorized, result, None, request)
+ self.assertEqual(len(logger.messages), 1)
+ self.assertEqual(logger.messages[0],
+ "debug_authorization of url url (view name "
+ "'view_name' against context None): False")
+
+ def test_view_with_debug_authorization_permission_authpol_denied2(self):
+ def view(context, request):
+ """ """
+ self._registerSettings(debug_authorization=True)
+ logger = self._registerLogger()
+ self._registerSecurityPolicy(False)
+ result = self._callFUT(view, permission='view')
+ self.assertEqual(view.__module__, result.__module__)
+ self.assertEqual(view.__doc__, result.__doc__)
+ self.assertEqual(view.__name__, result.__name__)
+ request = DummyRequest()
+ request.view_name = 'view_name'
+ request.url = 'url'
+ permitted = result.__permitted__(None, None)
+ self.assertEqual(permitted, False)
+
+ def test_view_with_predicates_all(self):
+ def view(context, request):
+ return '123'
+ predicates = []
+ def predicate1(context, request):
+ predicates.append(True)
+ return True
+ def predicate2(context, request):
+ predicates.append(True)
+ return True
+ result = self._callFUT(view, predicates=[predicate1, predicate2])
+ request = DummyRequest()
+ request.method = 'POST'
+ next = result(None, None)
+ self.assertEqual(next, '123')
+ self.assertEqual(predicates, [True, True])
+
+ def test_view_with_predicates_notall(self):
+ from repoze.bfg.view import NotFound
+ def view(context, request):
+ """ """
+ predicates = []
+ def predicate1(context, request):
+ predicates.append(True)
+ return True
+ def predicate2(context, request):
+ predicates.append(True)
+ return False
+ result = self._callFUT(view, predicates=[predicate1, predicate2])
+ request = DummyRequest()
+ request.method = 'POST'
+ self.assertRaises(NotFound, result, None, None)
+ self.assertEqual(predicates, [True, True])
+
+ def test_view_with_predicates_checker(self):
+ def view(context, request):
+ """ """
+ predicates = []
+ def predicate1(context, request):
+ predicates.append(True)
+ return True
+ def predicate2(context, request):
+ predicates.append(True)
+ return True
+ result = self._callFUT(view, predicates=[predicate1, predicate2])
+ request = DummyRequest()
+ request.method = 'POST'
+ next = result.__predicated__(None, None)
+ self.assertEqual(next, True)
+ self.assertEqual(predicates, [True, True])
+
class TestConnectRouteFunction(unittest.TestCase):
def setUp(self):
cleanUp()
@@ -903,103 +1292,119 @@ class TestRouteDirective(unittest.TestCase):
return route(*arg, **kw)
def test_defaults(self):
- from zope.component import getUtility
- from repoze.bfg.interfaces import IRequestFactories
+ from repoze.bfg.zcml import connect_route
context = DummyContext()
self._callFUT(context, 'name', 'path')
- self.failUnless(getUtility(IRequestFactories, name='name'))
+ actions = context.actions
+ self.assertEqual(len(actions), 1)
+
+ route_action = actions[0]
+ route_callable = route_action['callable']
+ route_discriminator = route_action['discriminator']
+ route_args = route_action['args']
+ self.assertEqual(route_callable, connect_route)
+ self.assertEqual(len(route_discriminator), 2)
+ self.assertEqual(route_discriminator[0], 'route')
+ self.assertEqual(route_discriminator[1], 'name')
+ self.assertEqual(route_args, ('path', 'name', None))
def test_with_view(self):
- from zope.component import getUtility
- from repoze.bfg.interfaces import IRequestFactories
- from repoze.bfg.zcml import handler
+ from zope.interface import Interface
+ from zope.interface import implementedBy
+ from zope.component import getSiteManager
+ from repoze.bfg.interfaces import IRouteRequest
from repoze.bfg.zcml import connect_route
from repoze.bfg.interfaces import IView
context = DummyContext()
- view = Dummy()
+ def view(context, request):
+ return '123'
self._callFUT(context, 'name', 'path', view=view)
actions = context.actions
self.assertEqual(len(actions), 2)
- factories = getUtility(IRequestFactories, name='name')
- request_iface = factories[None]['interface']
-
view_action = actions[0]
- view_callable = view_action['callable']
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
view_discriminator = view_action['discriminator']
- view_args = view_action['args']
- self.assertEqual(view_callable, handler)
- self.assertEqual(len(view_discriminator), 5)
+ self.assertEqual(len(view_discriminator), 9)
self.assertEqual(view_discriminator[0], 'view')
self.assertEqual(view_discriminator[1], None)
self.assertEqual(view_discriminator[2],'')
- self.assertEqual(view_discriminator[3], request_iface)
+ self.assertEqual(view_discriminator[3], request_type)
self.assertEqual(view_discriminator[4], IView)
- self.assertEqual(view_args, ('registerAdapter', view,
- (None, request_iface), IView,
- '', None))
+ self.assertEqual(view_discriminator[5], None)
+ self.assertEqual(view_discriminator[6], None)
+ self.assertEqual(view_discriminator[7], None)
+ self.assertEqual(view_discriminator[8], 'name')
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ wrapped = sm.adapters.lookup((Interface, request_type), IView, name='')
+ request = DummyRequest()
+ self.assertEqual(wrapped(None, request), '123')
route_action = actions[1]
route_callable = route_action['callable']
route_discriminator = route_action['discriminator']
route_args = route_action['args']
self.assertEqual(route_callable, connect_route)
- self.assertEqual(len(route_discriminator), 4)
+ self.assertEqual(len(route_discriminator), 2)
self.assertEqual(route_discriminator[0], 'route')
self.assertEqual(route_discriminator[1], 'name')
- self.assertEqual(route_discriminator[2], None)
- self.assertEqual(route_discriminator[3], None)
self.assertEqual(route_args, ('path', 'name', None))
def test_with_view_and_view_for(self):
- from zope.component import getUtility
- from repoze.bfg.interfaces import IRequestFactories
- from repoze.bfg.zcml import handler
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
from repoze.bfg.zcml import connect_route
from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
context = DummyContext()
- view = Dummy()
+ def view(context, request):
+ return '123'
self._callFUT(context, 'name', 'path', view=view, view_for=IDummy)
actions = context.actions
self.assertEqual(len(actions), 2)
- factories = getUtility(IRequestFactories, 'name')
- request_iface = factories[None]['interface']
-
view_action = actions[0]
- view_callable = view_action['callable']
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
view_discriminator = view_action['discriminator']
- view_args = view_action['args']
- self.assertEqual(view_callable, handler)
- self.assertEqual(len(view_discriminator), 5)
+ self.assertEqual(len(view_discriminator), 9)
self.assertEqual(view_discriminator[0], 'view')
self.assertEqual(view_discriminator[1], IDummy)
self.assertEqual(view_discriminator[2],'')
- self.assertEqual(view_discriminator[3], request_iface)
- self.assertEqual(view_discriminator[4], IView)
- self.assertEqual(view_args, ('registerAdapter', view,
- (IDummy, request_iface), IView,
- '', None))
+ self.assertEqual(view_discriminator[3], request_type)
+ self.assertEqual(view_discriminator[4], IView)
+ self.assertEqual(view_discriminator[5], None)
+ self.assertEqual(view_discriminator[6], None)
+ self.assertEqual(view_discriminator[7], None)
+ self.assertEqual(view_discriminator[8], 'name')
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ request = DummyRequest()
+ self.assertEqual(wrapped(None, request), '123')
route_action = actions[1]
route_callable = route_action['callable']
route_discriminator = route_action['discriminator']
route_args = route_action['args']
self.assertEqual(route_callable, connect_route)
- self.assertEqual(len(route_discriminator), 4)
+ self.assertEqual(len(route_discriminator), 2)
self.assertEqual(route_discriminator[0], 'route')
self.assertEqual(route_discriminator[1], 'name')
- self.assertEqual(route_discriminator[2], IDummy)
- self.assertEqual(route_discriminator[3], None)
self.assertEqual(route_args, ('path', 'name', None,))
def test_without_view(self):
from repoze.bfg.zcml import connect_route
-
context = DummyContext()
- view = Dummy()
self._callFUT(context, 'name', 'path')
actions = context.actions
self.assertEqual(len(actions), 1)
@@ -1009,32 +1414,275 @@ class TestRouteDirective(unittest.TestCase):
route_discriminator = route_action['discriminator']
route_args = route_action['args']
self.assertEqual(route_callable, connect_route)
- self.assertEqual(len(route_discriminator), 4)
+ self.assertEqual(len(route_discriminator), 2)
self.assertEqual(route_discriminator[0], 'route')
self.assertEqual(route_discriminator[1], 'name')
- self.assertEqual(route_discriminator[2], None)
- self.assertEqual(route_discriminator[3], None)
self.assertEqual(route_args, ('path', 'name', None))
- def test_with_request_type(self):
+ def test_with_view_request_type(self):
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
context = DummyContext()
- view = Dummy()
- self._callFUT(context, 'name', 'path', request_type="GET")
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ view_request_type="GET")
actions = context.actions
- self.assertEqual(len(actions), 1)
+ self.assertEqual(len(actions), 2)
- route_action = actions[0]
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ view_discriminator = view_action['discriminator']
+ self.assertEqual(len(view_discriminator), 9)
+ self.assertEqual(view_discriminator[0], 'view')
+ self.assertEqual(view_discriminator[1], None)
+ self.assertEqual(view_discriminator[2],'')
+ self.assertEqual(view_discriminator[3], request_type)
+ self.assertEqual(view_discriminator[4], IView)
+ self.assertEqual(view_discriminator[5], None)
+ self.assertEqual(view_discriminator[6], None)
+ self.assertEqual(view_discriminator[7], 'GET')
+ self.assertEqual(view_discriminator[8], 'name')
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ route_action = actions[1]
+ route_callable = route_action['callable']
+ route_discriminator = route_action['discriminator']
+ route_args = route_action['args']
+ self.assertEqual(route_callable, connect_route)
+ self.assertEqual(len(route_discriminator), 2)
+ self.assertEqual(route_discriminator[0], 'route')
+ self.assertEqual(route_discriminator[1], 'name')
+ self.assertEqual(route_args, ('path', 'name', None))
+
+ def test_with_view_request_type_alias(self):
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view, request_type="GET")
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ view_discriminator = view_action['discriminator']
+ self.assertEqual(len(view_discriminator), 9)
+ self.assertEqual(view_discriminator[0], 'view')
+ self.assertEqual(view_discriminator[1], None)
+ self.assertEqual(view_discriminator[2],'')
+ self.assertEqual(view_discriminator[3], request_type)
+ self.assertEqual(view_discriminator[4], IView)
+ self.assertEqual(view_discriminator[5], None)
+ self.assertEqual(view_discriminator[6], None)
+ self.assertEqual(view_discriminator[7], 'GET')
+ self.assertEqual(view_discriminator[8], 'name')
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ route_action = actions[1]
+ route_callable = route_action['callable']
+ route_discriminator = route_action['discriminator']
+ route_args = route_action['args']
+ self.assertEqual(route_callable, connect_route)
+ self.assertEqual(len(route_discriminator), 2)
+ self.assertEqual(route_discriminator[0], 'route')
+ self.assertEqual(route_discriminator[1], 'name')
+ self.assertEqual(route_args, ('path', 'name', None))
+
+ def test_with_view_request_method(self):
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view,
+ view_request_method="GET")
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ view_discriminator = view_action['discriminator']
+ self.assertEqual(len(view_discriminator), 9)
+ self.assertEqual(view_discriminator[0], 'view')
+ self.assertEqual(view_discriminator[1], None)
+ self.assertEqual(view_discriminator[2],'')
+ self.assertEqual(view_discriminator[3], request_type)
+ self.assertEqual(view_discriminator[4], IView)
+ self.assertEqual(view_discriminator[5], None)
+ self.assertEqual(view_discriminator[6], None)
+ self.assertEqual(view_discriminator[7], 'GET')
+ self.assertEqual(view_discriminator[8], 'name')
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ route_action = actions[1]
+ route_callable = route_action['callable']
+ route_discriminator = route_action['discriminator']
+ route_args = route_action['args']
+ self.assertEqual(route_callable, connect_route)
+ self.assertEqual(len(route_discriminator), 2)
+ self.assertEqual(route_discriminator[0], 'route')
+ self.assertEqual(route_discriminator[1], 'name')
+ self.assertEqual(route_args, ('path', 'name', None))
+
+ def test_with_view_request_method_alias(self):
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view, request_method="GET")
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ view_discriminator = view_action['discriminator']
+ self.assertEqual(len(view_discriminator), 9)
+ self.assertEqual(view_discriminator[0], 'view')
+ self.assertEqual(view_discriminator[1], None)
+ self.assertEqual(view_discriminator[2],'')
+ self.assertEqual(view_discriminator[3], request_type)
+ self.assertEqual(view_discriminator[4], IView)
+ self.assertEqual(view_discriminator[5], None)
+ self.assertEqual(view_discriminator[6], None)
+ self.assertEqual(view_discriminator[7], 'GET')
+ self.assertEqual(view_discriminator[8], 'name')
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ route_action = actions[1]
+ route_callable = route_action['callable']
+ route_discriminator = route_action['discriminator']
+ route_args = route_action['args']
+ self.assertEqual(route_callable, connect_route)
+ self.assertEqual(len(route_discriminator), 2)
+ self.assertEqual(route_discriminator[0], 'route')
+ self.assertEqual(route_discriminator[1], 'name')
+ self.assertEqual(route_args, ('path', 'name', None))
+
+ def test_with_view_containment(self):
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view, view_containment=True)
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ view_discriminator = view_action['discriminator']
+ self.assertEqual(len(view_discriminator), 9)
+ self.assertEqual(view_discriminator[0], 'view')
+ self.assertEqual(view_discriminator[1], None)
+ self.assertEqual(view_discriminator[2],'')
+ self.assertEqual(view_discriminator[3], request_type)
+ self.assertEqual(view_discriminator[4], IView)
+ self.assertEqual(view_discriminator[5], True)
+ self.assertEqual(view_discriminator[6], None)
+ self.assertEqual(view_discriminator[7], None)
+ self.assertEqual(view_discriminator[8], 'name')
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ route_action = actions[1]
route_callable = route_action['callable']
route_discriminator = route_action['discriminator']
route_args = route_action['args']
self.assertEqual(route_callable, connect_route)
- self.assertEqual(len(route_discriminator), 4)
+ self.assertEqual(len(route_discriminator), 2)
+ self.assertEqual(route_discriminator[0], 'route')
+ self.assertEqual(route_discriminator[1], 'name')
+ self.assertEqual(route_args, ('path', 'name', None))
+
+ def test_with_view_containment_alias(self):
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
+
+ context = DummyContext()
+ def view(context, request):
+ """ """
+ self._callFUT(context, 'name', 'path', view=view, containment=True)
+ actions = context.actions
+ self.assertEqual(len(actions), 2)
+
+ view_action = actions[0]
+ register = view_action['callable']
+ register()
+ sm = getSiteManager()
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ view_discriminator = view_action['discriminator']
+ self.assertEqual(len(view_discriminator), 9)
+ self.assertEqual(view_discriminator[0], 'view')
+ self.assertEqual(view_discriminator[1], None)
+ self.assertEqual(view_discriminator[2],'')
+ self.assertEqual(view_discriminator[3], request_type)
+ self.assertEqual(view_discriminator[4], IView)
+ self.assertEqual(view_discriminator[5], True)
+ self.assertEqual(view_discriminator[6], None)
+ self.assertEqual(view_discriminator[7], None)
+ self.assertEqual(view_discriminator[8], 'name')
+ wrapped = sm.adapters.lookup((IDummy, request_type), IView, name='')
+ self.failUnless(wrapped)
+
+ route_action = actions[1]
+ route_callable = route_action['callable']
+ route_discriminator = route_action['discriminator']
+ route_args = route_action['args']
+ self.assertEqual(route_callable, connect_route)
+ self.assertEqual(len(route_discriminator), 2)
self.assertEqual(route_discriminator[0], 'route')
self.assertEqual(route_discriminator[1], 'name')
- self.assertEqual(route_discriminator[2], None)
- self.assertEqual(route_discriminator[3], 'GET')
self.assertEqual(route_args, ('path', 'name', None))
class TestStaticDirective(unittest.TestCase):
@@ -1049,65 +1697,87 @@ class TestStaticDirective(unittest.TestCase):
return static(*arg, **kw)
def test_absolute(self):
+ from paste.urlparser import StaticURLParser
+ from zope.interface import implementedBy
+ from zope.component import getSiteManager
+ from repoze.bfg.zcml import connect_route
+ from repoze.bfg.zcml import StaticRootFactory
+ from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
import os
here = os.path.dirname(__file__)
static_path = os.path.join(here, 'fixtures', 'static')
- from repoze.bfg.zcml import handler
- from repoze.bfg.zcml import connect_route
- from repoze.bfg.interfaces import IView
context = DummyContext()
self._callFUT(context, 'name', static_path)
actions = context.actions
self.assertEqual(len(actions), 2)
action = actions[0]
- callable = action['callable']
discriminator = action['discriminator']
- args = action['args']
- self.assertEqual(callable, handler)
- self.assertEqual(discriminator[:3], ('view', None, ''))
+ self.assertEqual(discriminator[:3], ('view', StaticRootFactory, ''))
self.assertEqual(discriminator[4], IView)
- self.assertEqual(args[1].app.directory, static_path)
+ sm = getSiteManager()
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ iface = implementedBy(StaticRootFactory)
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ wrapped = sm.adapters.lookup((iface, request_type), IView, name='')
+ request = DummyRequest()
+ self.assertEqual(wrapped(None, request).__class__, StaticURLParser)
action = actions[1]
callable = action['callable']
discriminator = action['discriminator']
args = action['args']
self.assertEqual(callable, connect_route)
- self.assertEqual(discriminator, ('route', 'name', None, None))
+ self.assertEqual(discriminator, ('route', 'name'))
self.assertEqual(args[0], 'name*subpath')
def test_package_relative(self):
- from repoze.bfg.zcml import handler
+ from repoze.bfg.static import PackageURLParser
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
from repoze.bfg.zcml import connect_route
+ from repoze.bfg.zcml import StaticRootFactory
from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
context = DummyContext()
self._callFUT(context, 'name', 'repoze.bfg.tests:fixtures/static')
actions = context.actions
self.assertEqual(len(actions), 2)
action = actions[0]
- callable = action['callable']
discriminator = action['discriminator']
- args = action['args']
- self.assertEqual(callable, handler)
- self.assertEqual(discriminator[:3], ('view', None, ''))
+ self.assertEqual(discriminator[:3], ('view', StaticRootFactory, ''))
self.assertEqual(discriminator[4], IView)
- self.assertEqual(args[1].app.package_name, 'repoze.bfg.tests')
- self.assertEqual(args[1].app.resource_name, 'fixtures/static')
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ iface = implementedBy(StaticRootFactory)
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ view = sm.adapters.lookup((iface, request_type), IView, name='')
+ request = DummyRequest()
+ self.assertEqual(view(None, request).__class__, PackageURLParser)
action = actions[1]
callable = action['callable']
discriminator = action['discriminator']
args = action['args']
self.assertEqual(callable, connect_route)
- self.assertEqual(discriminator, ('route', 'name', None, None))
+ self.assertEqual(discriminator, ('route', 'name'))
self.assertEqual(args[0], 'name*subpath')
def test_here_relative(self):
- from repoze.bfg.zcml import handler
+ from repoze.bfg.static import PackageURLParser
+ from zope.component import getSiteManager
+ from zope.interface import implementedBy
from repoze.bfg.zcml import connect_route
+ from repoze.bfg.zcml import StaticRootFactory
from repoze.bfg.interfaces import IView
+ from repoze.bfg.interfaces import IRouteRequest
import repoze.bfg.tests
context = DummyContext(repoze.bfg.tests)
self._callFUT(context, 'name', 'fixtures/static')
@@ -1115,21 +1785,25 @@ class TestStaticDirective(unittest.TestCase):
self.assertEqual(len(actions), 2)
action = actions[0]
- callable = action['callable']
discriminator = action['discriminator']
- args = action['args']
- self.assertEqual(callable, handler)
- self.assertEqual(discriminator[:3], ('view', None, ''))
+ self.assertEqual(discriminator[:3], ('view', StaticRootFactory, ''))
self.assertEqual(discriminator[4], IView)
- self.assertEqual(args[1].app.package_name, 'repoze.bfg.tests')
- self.assertEqual(args[1].app.resource_name, 'fixtures/static')
+ register = action['callable']
+ register()
+ sm = getSiteManager()
+ iface = implementedBy(StaticRootFactory)
+ request_factory = sm.getUtility(IRouteRequest, 'name')
+ request_type = implementedBy(request_factory)
+ wrapped = sm.adapters.lookup((iface, request_type), IView, name='')
+ request = DummyRequest()
+ self.assertEqual(wrapped(None, request).__class__, PackageURLParser)
action = actions[1]
callable = action['callable']
discriminator = action['discriminator']
args = action['args']
self.assertEqual(callable, connect_route)
- self.assertEqual(discriminator, ('route', 'name', None, None))
+ self.assertEqual(discriminator, ('route', 'name'))
self.assertEqual(args[0], 'name*subpath')
class TestResourceDirective(unittest.TestCase):
@@ -1372,22 +2046,36 @@ class TestBFGViewFunctionGrokker(unittest.TestCase):
return self._getTargetClass()(*arg, **kw)
def test_grok_is_bfg_view(self):
+ from zope.component import getSiteManager
from repoze.bfg.interfaces import IRequest
+ from repoze.bfg.interfaces import IView
from zope.interface import Interface
grokker = self._makeOne()
class obj:
- pass
+ def __init__(self, context, request):
+ pass
+ def __call__(self):
+ return 'OK'
obj.__is_bfg_view__ = True
obj.__permission__ = 'foo'
obj.__for__ = Interface
obj.__view_name__ = 'foo.html'
obj.__request_type__ = IRequest
obj.__route_name__ = None
+ obj.__request_method__ = None
+ obj.__request_param__ = None
+ obj.__containment__ = None
context = DummyContext()
result = grokker.grok('name', obj, context=context)
self.assertEqual(result, True)
actions = context.actions
- self.assertEqual(len(actions), 2)
+ 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_grok_is_not_bfg_view(self):
grokker = self._makeOne()
@@ -1436,152 +2124,17 @@ class TestExcludeFunction(unittest.TestCase):
self.assertEqual(self._callFUT('.foo'), True)
self.assertEqual(self._callFUT('foo'), False)
-class TestRequestOnly(unittest.TestCase):
- def _callFUT(self, arg):
- from repoze.bfg.zcml import requestonly
- return requestonly(arg)
-
- def test_newstyle_class_no_init(self):
- class foo(object):
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_newstyle_class_init_toomanyargs(self):
- class foo(object):
- def __init__(self, context, request):
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_newstyle_class_init_onearg_named_request(self):
- class foo(object):
- def __init__(self, request):
- """ """
- self.assertTrue(self._callFUT(foo))
-
- def test_newstyle_class_init_onearg_named_somethingelse(self):
- class foo(object):
- def __init__(self, req):
- """ """
- self.assertTrue(self._callFUT(foo))
-
- def test_newstyle_class_init_defaultargs_firstname_not_request(self):
- class foo(object):
- def __init__(self, context, request=None):
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_newstyle_class_init_defaultargs_firstname_request(self):
- class foo(object):
- def __init__(self, request, foo=1, bar=2):
- """ """
- self.assertTrue(self._callFUT(foo))
-
- def test_newstyle_class_init_noargs(self):
- class foo(object):
- def __init__():
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_oldstyle_class_no_init(self):
- class foo:
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_oldstyle_class_init_toomanyargs(self):
- class foo:
- def __init__(self, context, request):
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_oldstyle_class_init_onearg_named_request(self):
- class foo:
- def __init__(self, request):
- """ """
- self.assertTrue(self._callFUT(foo))
-
- def test_oldstyle_class_init_onearg_named_somethingelse(self):
- class foo:
- def __init__(self, req):
- """ """
- self.assertTrue(self._callFUT(foo))
-
- def test_oldstyle_class_init_defaultargs_firstname_not_request(self):
- class foo:
- def __init__(self, context, request=None):
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_oldstyle_class_init_defaultargs_firstname_request(self):
- class foo:
- def __init__(self, request, foo=1, bar=2):
- """ """
- self.assertTrue(self._callFUT(foo), True)
-
- def test_oldstyle_class_init_noargs(self):
- class foo:
- def __init__():
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_function_toomanyargs(self):
- def foo(context, request):
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_function_onearg_named_request(self):
- def foo(request):
- """ """
- self.assertTrue(self._callFUT(foo))
-
- def test_function_onearg_named_somethingelse(self):
- def foo(req):
- """ """
- self.assertTrue(self._callFUT(foo))
-
- def test_function_defaultargs_firstname_not_request(self):
- def foo(context, request=None):
- """ """
- self.assertFalse(self._callFUT(foo))
-
- def test_function_defaultargs_firstname_request(self):
- def foo(request, foo=1, bar=2):
- """ """
- self.assertTrue(self._callFUT(foo), True)
-
- def test_instance_toomanyargs(self):
- class Foo:
- def __call__(self, context, request):
- """ """
- foo = Foo()
- self.assertFalse(self._callFUT(foo))
-
- def test_instance_defaultargs_onearg_named_request(self):
- class Foo:
- def __call__(self, request):
- """ """
- foo = Foo()
- self.assertTrue(self._callFUT(foo))
-
- def test_instance_defaultargs_onearg_named_somethingelse(self):
- class Foo:
- def __call__(self, req):
- """ """
- foo = Foo()
- self.assertTrue(self._callFUT(foo))
-
- def test_instance_defaultargs_firstname_not_request(self):
- class Foo:
- def __call__(self, context, request=None):
- """ """
- foo = Foo()
- self.assertFalse(self._callFUT(foo))
+class TestAll(unittest.TestCase):
+ def test_it(self):
+ from repoze.bfg.zcml import all
+ self.assertEqual(all([True, True]), True)
+ self.assertEqual(all([False, False]), False)
+ self.assertEqual(all([False, True]), False)
- def test_instance_defaultargs_firstname_request(self):
- class Foo:
- def __call__(self, request, foo=1, bar=2):
- """ """
- foo = Foo()
- self.assertTrue(self._callFUT(foo), True)
+class TestStaticRootFactory(unittest.TestCase):
+ def test_it(self):
+ from repoze.bfg.zcml import StaticRootFactory
+ StaticRootFactory({}) # it just needs construction
class DummyModule:
__path__ = "foo"
@@ -1612,7 +2165,7 @@ class DummyContext:
self.info = None
self.resolved = resolved
- def action(self, discriminator, callable, args):
+ def action(self, discriminator, callable=None, args=(), kw={}, order=0):
self.actions.append(
{'discriminator':discriminator,
'callable':callable,
@@ -1639,9 +2192,6 @@ from zope.interface import Interface
class IDummy(Interface):
pass
-class DummySecurityPolicy:
- pass
-
class DummyLogger:
def __init__(self):
self.messages = []
@@ -1651,9 +2201,18 @@ class DummyLogger:
debug = info
class DummyRequest:
+ subpath = ()
+ def __init__(self, environ=None):
+ if environ is None:
+ environ = {}
+ self.environ = environ
+
def get_response(self, app):
return app
-
+
+ def copy(self):
+ return self
+
class DummyOverrides:
def __init__(self, package):
self.package = package
@@ -1666,3 +2225,17 @@ class DummyPackage:
def __init__(self, name):
self.__name__ = name
+class DummySettings(dict):
+ def __getattr__(self, name):
+ return self[name]
+
+class DummySecurityPolicy:
+ def __init__(self, permitted=True):
+ self.permitted = permitted
+
+ def effective_principals(self, request):
+ return []
+
+ def permits(self, context, principals, permission):
+ return self.permitted
+