summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2010-01-24 08:45:35 +0000
committerChris McDonough <chrism@agendaless.com>2010-01-24 08:45:35 +0000
commit333bd06861e55f97dfcaeebff100657734829add (patch)
tree495b62d5b297a52f29f042adca5d54a319d413c2 /repoze/bfg/tests
parentcc6a44df0a8535d2bc91944ae34a2521c12c7a07 (diff)
downloadpyramid-333bd06861e55f97dfcaeebff100657734829add.tar.gz
pyramid-333bd06861e55f97dfcaeebff100657734829add.tar.bz2
pyramid-333bd06861e55f97dfcaeebff100657734829add.zip
Merge reversepolarity branch.
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/hybridapp/__init__.py1
-rw-r--r--repoze/bfg/tests/hybridapp/configure.zcml42
-rw-r--r--repoze/bfg/tests/hybridapp/views.py13
-rw-r--r--repoze/bfg/tests/test_configuration.py79
-rw-r--r--repoze/bfg/tests/test_integration.py25
-rw-r--r--repoze/bfg/tests/test_router.py12
-rw-r--r--repoze/bfg/tests/test_view.py5
-rw-r--r--repoze/bfg/tests/test_zcml.py42
8 files changed, 145 insertions, 74 deletions
diff --git a/repoze/bfg/tests/hybridapp/__init__.py b/repoze/bfg/tests/hybridapp/__init__.py
new file mode 100644
index 000000000..5bb534f79
--- /dev/null
+++ b/repoze/bfg/tests/hybridapp/__init__.py
@@ -0,0 +1 @@
+# package
diff --git a/repoze/bfg/tests/hybridapp/configure.zcml b/repoze/bfg/tests/hybridapp/configure.zcml
new file mode 100644
index 000000000..80e9e4fe5
--- /dev/null
+++ b/repoze/bfg/tests/hybridapp/configure.zcml
@@ -0,0 +1,42 @@
+<configure xmlns="http://namespaces.repoze.org/bfg">
+
+ <include package="repoze.bfg.includes" />
+
+ <!-- we want this view to "win" -->
+ <route
+ view=".views.route_view"
+ path="abc"
+ name="route" />
+
+ <!-- .. even though this one has a more specific context -->
+ <view
+ view=".views.global_view"
+ context="repoze.bfg.traversal.DefaultRootFactory"
+ />
+
+ <route
+ path="def"
+ name="route2"
+ />
+
+ <!-- we want this view to win for route2 even though global view with
+ context is more specific -->
+ <view
+ route_name="route2"
+ view=".views.route2_view"
+ />
+
+ <!-- the global view should be found for this route -->
+ <route
+ path="ghi"
+ name="route3"
+ use_global_views="True"
+ />
+
+ <!-- the global view should not be found for this route -->
+ <route
+ path="jkl"
+ name="route4"
+ />
+
+</configure>
diff --git a/repoze/bfg/tests/hybridapp/views.py b/repoze/bfg/tests/hybridapp/views.py
new file mode 100644
index 000000000..06423da83
--- /dev/null
+++ b/repoze/bfg/tests/hybridapp/views.py
@@ -0,0 +1,13 @@
+from webob import Response
+
+def route_view(request):
+ """ """
+ return Response('route')
+
+def global_view(request):
+ """ """
+ return Response('global')
+
+def route2_view(request):
+ """ """
+ return Response('route2')
diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py
index 3ddaedd70..2e4ba3a18 100644
--- a/repoze/bfg/tests/test_configuration.py
+++ b/repoze/bfg/tests/test_configuration.py
@@ -30,7 +30,7 @@ class ConfiguratorTests(unittest.TestCase):
if request_iface is None:
request_iface = IRequest
return config.registry.adapters.lookup(
- (ctx_iface, request_iface), IView, name=name,
+ (request_iface, ctx_iface), IView, name=name,
default=None)
def _getRouteRequestIface(self, config, name):
@@ -563,7 +563,7 @@ class ConfiguratorTests(unittest.TestCase):
config = self._makeOne()
config.add_view(view=view)
wrapper = config.registry.adapters.lookup(
- (Interface, IRequest), ISecuredView, name='', default=None)
+ (IRequest, Interface), ISecuredView, name='', default=None)
self.assertEqual(wrapper, view)
def test_add_view_multiview_replaces_existing_view(self):
@@ -574,7 +574,7 @@ class ConfiguratorTests(unittest.TestCase):
view = lambda *arg: 'OK'
config = self._makeOne()
config.registry.registerAdapter(
- view, (Interface, IRequest), IView, name='')
+ view, (IRequest, Interface), IView, name='')
config.add_view(view=view)
wrapper = self._getViewCallable(config)
self.failUnless(IMultiView.providedBy(wrapper))
@@ -588,7 +588,7 @@ class ConfiguratorTests(unittest.TestCase):
view = lambda *arg: 'OK'
config = self._makeOne()
config.registry.registerAdapter(
- view, (Interface, IRequest), ISecuredView, name='')
+ view, (IRequest, Interface), ISecuredView, name='')
config.add_view(view=view)
wrapper = self._getViewCallable(config)
self.failUnless(IMultiView.providedBy(wrapper))
@@ -605,7 +605,7 @@ class ConfiguratorTests(unittest.TestCase):
return 'OK2'
config = self._makeOne()
config.registry.registerAdapter(
- view, (Interface, IRequest), IView, name='')
+ view, (IRequest, Interface), IView, name='')
config.add_view(view=view2, accept='text/html')
wrapper = self._getViewCallable(config)
self.failUnless(IMultiView.providedBy(wrapper))
@@ -628,7 +628,7 @@ class ConfiguratorTests(unittest.TestCase):
view.__accept__ = 'text/html'
config = self._makeOne()
config.registry.registerAdapter(
- view, (Interface, IRequest), IView, name='')
+ view, (IRequest, Interface), IView, name='')
config.add_view(view=view2)
wrapper = self._getViewCallable(config)
self.failUnless(IMultiView.providedBy(wrapper))
@@ -645,7 +645,7 @@ class ConfiguratorTests(unittest.TestCase):
from repoze.bfg.interfaces import IMultiView
view = DummyMultiView()
config = self._makeOne()
- config.registry.registerAdapter(view, (Interface, IRequest),
+ config.registry.registerAdapter(view, (IRequest, Interface),
IMultiView, name='')
view2 = lambda *arg: 'OK2'
config.add_view(view=view2)
@@ -667,7 +667,7 @@ class ConfiguratorTests(unittest.TestCase):
view2 = lambda *arg: 'OK2'
config = self._makeOne()
config.registry.registerAdapter(
- view, (ISuper, IRequest), IView, name='')
+ view, (IRequest, ISuper), IView, name='')
config.add_view(view=view2, for_=ISub)
wrapper = self._getViewCallable(config, ISuper, IRequest)
self.failIf(IMultiView.providedBy(wrapper))
@@ -676,26 +676,6 @@ class ConfiguratorTests(unittest.TestCase):
self.failIf(IMultiView.providedBy(wrapper))
self.assertEqual(wrapper(None, None), 'OK2')
- def test_add_view_multiview_request_superclass_then_subclass(self):
- from zope.interface import Interface
- from repoze.bfg.interfaces import IRequest
- from repoze.bfg.interfaces import IView
- from repoze.bfg.interfaces import IMultiView
- class ISubRequest(IRequest):
- pass
- view = lambda *arg: 'OK'
- view2 = lambda *arg: 'OK2'
- config = self._makeOne()
- config.registry.registerAdapter(
- view, (Interface, IRequest), IView, name='')
- config.add_view(view=view2, request_type=ISubRequest)
- wrapper = self._getViewCallable(config, Interface, IRequest)
- self.failIf(IMultiView.providedBy(wrapper))
- self.assertEqual(wrapper(None, None), 'OK')
- wrapper = self._getViewCallable(config, Interface, ISubRequest)
- self.failIf(IMultiView.providedBy(wrapper))
- self.assertEqual(wrapper(None, None), 'OK2')
-
def test_add_view_multiview_call_ordering(self):
from zope.interface import directlyProvides
def view1(context, request): return 'view1'
@@ -801,31 +781,44 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(renderer.path, 'repoze.bfg.tests:fixtures/minimal.txt')
def test_add_view_with_request_type_as_iface(self):
+ from zope.interface import directlyProvides
def view(context, request):
return 'OK'
config = self._makeOne()
config.add_view(request_type=IDummy, view=view)
- wrapper = self._getViewCallable(config, None, IDummy)
- result = wrapper(None, None)
+ wrapper = self._getViewCallable(config, None)
+ request = self._makeRequest(config)
+ directlyProvides(request, IDummy)
+ result = wrapper(None, request)
self.assertEqual(result, 'OK')
def test_add_view_with_request_type_as_noniface(self):
- from zope.interface import providedBy
- def view(context, request):
- return 'OK'
+ from repoze.bfg.exceptions import ConfigurationError
+ view = lambda *arg: 'OK'
config = self._makeOne()
- config.add_view(request_type=object, view=view)
- request_iface = providedBy(object)
- wrapper = self._getViewCallable(config, None, request_iface)
- result = wrapper(None, None)
- self.assertEqual(result, 'OK')
+ self.assertRaises(ConfigurationError,
+ config.add_view, view, '', None, None, object)
def test_add_view_with_route_name(self):
+ from zope.component import ComponentLookupError
view = lambda *arg: 'OK'
config = self._makeOne()
config.add_view(view=view, route_name='foo')
- request_type = self._getRouteRequestIface(config, 'foo')
- wrapper = self._getViewCallable(config, None, request_type)
+ self.assertEqual(len(config.registry.deferred_route_views), 1)
+ infos = config.registry.deferred_route_views['foo']
+ self.assertEqual(len(infos), 1)
+ info = infos[0]
+ self.assertEqual(info['route_name'], 'foo')
+ self.assertEqual(info['view'], view)
+ self.assertRaises(ComponentLookupError,
+ self._getRouteRequestIface, config, 'foo')
+ wrapper = self._getViewCallable(config, None)
+ self.assertEqual(wrapper, None)
+ config.add_route('foo', '/a/b')
+ request_iface = self._getRouteRequestIface(config, 'foo')
+ self.failIfEqual(request_iface, None)
+ wrapper = self._getViewCallable(config, request_iface=request_iface)
+ self.failIfEqual(wrapper, None)
self.assertEqual(wrapper(None, None), 'OK')
def test_add_view_with_request_method_true(self):
@@ -1363,7 +1356,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(route.factory.__class__, StaticRootFactory)
iface = implementedBy(StaticRootFactory)
wrapped = config.registry.adapters.lookup(
- (iface, request_type), IView, name='')
+ (request_type, iface), IView, name='')
request = self._makeRequest(config)
self.assertEqual(wrapped(None, request).__class__, PackageURLParser)
@@ -1379,7 +1372,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(route.factory.__class__, StaticRootFactory)
iface = implementedBy(StaticRootFactory)
wrapped = config.registry.adapters.lookup(
- (iface, request_type), IView, name='')
+ (request_type, iface), IView, name='')
request = self._makeRequest(config)
self.assertEqual(wrapped(None, request).__class__, PackageURLParser)
@@ -1398,7 +1391,7 @@ class ConfiguratorTests(unittest.TestCase):
self.assertEqual(route.factory.__class__, StaticRootFactory)
iface = implementedBy(StaticRootFactory)
wrapped = config.registry.adapters.lookup(
- (iface, request_type), IView, name='')
+ (request_type, iface), IView, name='')
request = self._makeRequest(config)
self.assertEqual(wrapped(None, request).__class__, StaticURLParser)
diff --git a/repoze/bfg/tests/test_integration.py b/repoze/bfg/tests/test_integration.py
index 1c6fdd01e..6affe24e1 100644
--- a/repoze/bfg/tests/test_integration.py
+++ b/repoze/bfg/tests/test_integration.py
@@ -36,7 +36,7 @@ class WGSIAppPlusBFGViewTests(unittest.TestCase):
config = Configurator()
config.scan(test_integration)
reg = config.registry
- view = reg.adapters.lookup((INothing, IRequest), IView, name='')
+ view = reg.adapters.lookup((IRequest, INothing), IView, name='')
self.assertEqual(view, wsgiapptest)
here = os.path.dirname(__file__)
@@ -113,6 +113,29 @@ class TestCCBug(TwillBase):
self.assertEqual(browser.get_code(), 200)
self.assertEqual(browser.get_html(), 'juri')
+class TestHybridApp(TwillBase):
+ # make sure views registered for a route "win" over views registered
+ # without one, even though the context of the non-route view may
+ # be more specific than the route view.
+ config = 'repoze.bfg.tests.hybridapp:configure.zcml'
+ def test_it(self):
+ import twill.commands
+ browser = twill.commands.get_browser()
+ browser.go('http://localhost:6543/')
+ self.assertEqual(browser.get_code(), 200)
+ self.assertEqual(browser.get_html(), 'global')
+ browser.go('http://localhost:6543/abc')
+ self.assertEqual(browser.get_code(), 200)
+ self.assertEqual(browser.get_html(), 'route')
+ browser.go('http://localhost:6543/def')
+ self.assertEqual(browser.get_code(), 200)
+ self.assertEqual(browser.get_html(), 'route2')
+ browser.go('http://localhost:6543/ghi')
+ self.assertEqual(browser.get_code(), 200)
+ self.assertEqual(browser.get_html(), 'global')
+ browser.go('http://localhost:6543/jkl')
+ self.assertEqual(browser.get_code(), 404)
+
class DummyContext(object):
pass
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index c1d60ae9a..0d7bee720 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -354,7 +354,7 @@ class TestRouter(unittest.TestCase):
response.app_iter = ['Hello world']
view = DummyView(response)
environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
+ self._registerView(view, '', IRequest, IContext)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -381,7 +381,7 @@ class TestRouter(unittest.TestCase):
response = DummyResponse()
view = DummyView(response)
environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
+ self._registerView(view, '', IRequest, IContext)
router = self._makeOne()
start_response = DummyStartResponse()
result = router(environ, start_response)
@@ -400,7 +400,7 @@ class TestRouter(unittest.TestCase):
response = DummyResponse()
view = DummyView(response, raise_unauthorized=True)
environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
+ self._registerView(view, '', IRequest, IContext)
router = self._makeOne()
start_response = DummyStartResponse()
response = router(environ, start_response)
@@ -419,7 +419,7 @@ class TestRouter(unittest.TestCase):
response = DummyResponse()
view = DummyView(response, raise_notfound=True)
environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
+ self._registerView(view, '', IRequest, IContext)
router = self._makeOne()
start_response = DummyStartResponse()
response = router(environ, start_response)
@@ -441,7 +441,7 @@ class TestRouter(unittest.TestCase):
request.global_response_headers = [('b', 2)]
return response
environ = self._makeEnviron()
- self._registerView(view, '', IContext, IRequest)
+ self._registerView(view, '', IRequest, IContext)
router = self._makeOne()
start_response = DummyStartResponse()
router(environ, start_response)
@@ -519,7 +519,6 @@ class TestRouter(unittest.TestCase):
self.assertEqual(environ['bfg.routes.matchdict'], routing_args)
self.assertEqual(environ['bfg.routes.route'].name, 'foo')
self.assertEqual(request.matchdict, routing_args)
- self.failUnless(req_iface.providedBy(request))
def test_call_route_matches_doesnt_overwrite_subscriber_iface(self):
from repoze.bfg.interfaces import INewRequest
@@ -560,7 +559,6 @@ class TestRouter(unittest.TestCase):
self.assertEqual(environ['bfg.routes.matchdict'], routing_args)
self.assertEqual(environ['bfg.routes.route'].name, 'foo')
self.assertEqual(request.matchdict, routing_args)
- self.failUnless(req_iface.providedBy(request))
self.failUnless(IFoo.providedBy(request))
def test_root_factory_raises_notfound(self):
diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py
index 94b896893..994eb8c66 100644
--- a/repoze/bfg/tests/test_view.py
+++ b/repoze/bfg/tests/test_view.py
@@ -9,10 +9,9 @@ class BaseTest(object):
def tearDown(self):
cleanUp()
- def _registerView(self, reg, app, name, *for_):
+ def _registerView(self, reg, app, name):
from repoze.bfg.interfaces import IRequest
- if not for_:
- for_ = (IContext, IRequest)
+ for_ = (IRequest, IContext)
from repoze.bfg.interfaces import IView
reg.registerAdapter(app, for_, IView, name)
diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py
index abcf8863e..4d29c8373 100644
--- a/repoze/bfg/tests/test_zcml.py
+++ b/repoze/bfg/tests/test_zcml.py
@@ -37,7 +37,7 @@ class TestViewDirective(unittest.TestCase):
register = action['callable']
register()
reg = get_current_registry()
- wrapper = reg.adapters.lookup((IDummy, IRequest), IView, name='')
+ wrapper = reg.adapters.lookup((IRequest, IDummy), IView, name='')
request = DummyRequest()
request.method = 'GET'
self.assertEqual(wrapper.__predicated__(None, request), True)
@@ -45,12 +45,12 @@ class TestViewDirective(unittest.TestCase):
self.assertEqual(wrapper.__predicated__(None, request), False)
def test_request_type_asinterfacestring(self):
+ from zope.interface import directlyProvides
from repoze.bfg.threadlocal import get_current_registry
from repoze.bfg.interfaces import IView
- from repoze.bfg.interfaces import IViewPermission
from repoze.bfg.interfaces import IRequest
context = DummyContext(IDummy)
- view = lambda *arg: None
+ view = lambda *arg: 'OK'
self._callFUT(context, 'repoze.view', IDummy, view=view,
request_type='whatever')
actions = context.actions
@@ -61,11 +61,13 @@ class TestViewDirective(unittest.TestCase):
register = actions[0]['callable']
register()
reg = get_current_registry()
- regview = reg.adapters.lookup((IDummy, IDummy), IView, name='')
- self.assertEqual(view, regview)
+ regview = reg.adapters.lookup((IRequest, IDummy), IView, name='')
+ self.assertNotEqual(view, regview)
+ request = DummyRequest()
+ directlyProvides(request, IDummy)
+ result = regview(None, request)
+ self.assertEqual(result, 'OK')
self.failIf(hasattr(view, '__call_permissive__'))
- perm = reg.adapters.lookup((IDummy, IRequest), IViewPermission, name='')
- self.assertEqual(perm, None)
def test_with_dotted_renderer(self):
from repoze.bfg.threadlocal import get_current_registry
@@ -89,7 +91,7 @@ class TestViewDirective(unittest.TestCase):
self.assertEqual(actions[0]['discriminator'], discrim)
register = actions[0]['callable']
register()
- regview = reg.adapters.lookup((IDummy, IRequest), IView, name='')
+ regview = reg.adapters.lookup((IRequest, IDummy), IView, name='')
self.assertEqual(regview(None, None).body, 'OK')
def test_with_custom_predicates(self):
@@ -114,7 +116,7 @@ class TestViewDirective(unittest.TestCase):
self.assertEqual(actions[0]['discriminator'], discrim)
register = actions[0]['callable']
register()
- regview = reg.adapters.lookup((IDummy, IRequest), IView, name='')
+ regview = reg.adapters.lookup((IRequest, IDummy), IView, name='')
self.assertEqual(regview(None, None), 'OK')
def test_context_trumps_for(self):
@@ -135,7 +137,7 @@ class TestViewDirective(unittest.TestCase):
self.assertEqual(actions[0]['discriminator'], discrim)
register = actions[0]['callable']
register()
- regview = reg.adapters.lookup((IDummy, IRequest), IView, name='')
+ regview = reg.adapters.lookup((IRequest, IDummy), IView, name='')
self.assertEqual(regview(None, None), 'OK')
def test_with_for(self):
@@ -155,7 +157,7 @@ class TestViewDirective(unittest.TestCase):
self.assertEqual(actions[0]['discriminator'], discrim)
register = actions[0]['callable']
register()
- regview = reg.adapters.lookup((IDummy, IRequest), IView, name='')
+ regview = reg.adapters.lookup((IRequest, IDummy), IView, name='')
self.assertEqual(regview(None, None), 'OK')
class TestNotFoundDirective(unittest.TestCase):
@@ -510,10 +512,10 @@ class TestRouteDirective(unittest.TestCase):
reg = get_current_registry()
request_type = reg.getUtility(IRouteRequest, 'name')
view_discriminator = view_action['discriminator']
- discrim = ('view', None, '', request_type, IView, None, None, None,
+ discrim = ('view', None, '', None, IView, None, None, None,
'name', None, False, None, None, None)
self.assertEqual(view_discriminator, discrim)
- wrapped = reg.adapters.lookup((Interface, request_type), IView, name='')
+ wrapped = reg.adapters.lookup((request_type, Interface), IView, name='')
self.failUnless(wrapped)
def test_with_view_and_view_context(self):
@@ -537,10 +539,10 @@ class TestRouteDirective(unittest.TestCase):
reg = get_current_registry()
request_type = reg.getUtility(IRouteRequest, 'name')
view_discriminator = view_action['discriminator']
- discrim = ('view', IDummy, '', request_type, IView, None, None, None,
+ discrim = ('view', IDummy, '', None, IView, None, None, None,
'name', None, False, None, None, None)
self.assertEqual(view_discriminator, discrim)
- wrapped = reg.adapters.lookup((IDummy, request_type), IView, name='')
+ wrapped = reg.adapters.lookup((request_type, IDummy), IView, name='')
self.failUnless(wrapped)
def test_with_view_context_trumps_view_for(self):
@@ -567,10 +569,10 @@ class TestRouteDirective(unittest.TestCase):
reg = get_current_registry()
request_type = reg.getUtility(IRouteRequest, 'name')
view_discriminator = view_action['discriminator']
- discrim = ('view', IDummy, '', request_type, IView, None, None, None,
+ discrim = ('view', IDummy, '', None, IView, None, None, None,
'name', None, False, None, None, None)
self.assertEqual(view_discriminator, discrim)
- wrapped = reg.adapters.lookup((IDummy, request_type), IView, name='')
+ wrapped = reg.adapters.lookup((request_type, IDummy), IView, name='')
self.failUnless(wrapped)
def test_with_dotted_renderer(self):
@@ -604,10 +606,10 @@ class TestRouteDirective(unittest.TestCase):
view_action = actions[1]
request_type = reg.getUtility(IRouteRequest, 'name')
view_discriminator = view_action['discriminator']
- discrim = ('view', None, '', request_type, IView, None, None, None,
+ discrim = ('view', None, '', None, IView, None, None, None,
'name', None, False, None, None, None)
self.assertEqual(view_discriminator, discrim)
- wrapped = reg.adapters.lookup((Interface, request_type), IView, name='')
+ wrapped = reg.adapters.lookup((request_type, Interface), IView, name='')
self.failUnless(wrapped)
request = DummyRequest()
result = wrapped(None, request)
@@ -674,7 +676,7 @@ class TestStaticDirective(unittest.TestCase):
self.assertEqual(discriminator[4], IView)
iface = implementedBy(StaticRootFactory)
request_type = reg.getUtility(IRouteRequest, 'name')
- view = reg.adapters.lookup((iface, request_type), IView, name='')
+ view = reg.adapters.lookup((request_type, iface), IView, name='')
request = DummyRequest()
self.assertEqual(view(None, request).__class__, PackageURLParser)