From b606d97195187bdb33e334a7a40df501b30e2f48 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Fri, 19 Jun 2009 09:24:49 +0000 Subject: - A new ZCML directive was added named ``notfound``. This ZCML directive can be used to name a view that should be invoked when the request can't otherwise be resolved to a view callable. For example:: - A new ZCML directive was added named ``forbidden``. This ZCML directive can be used to name a view that should be invoked when a view callable for a request is found, but cannot be invoked due to an authorization failure. For example:: --- repoze/bfg/tests/test_router.py | 2 +- repoze/bfg/tests/test_zcml.py | 60 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 3 deletions(-) (limited to 'repoze/bfg/tests') diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index 195d1bba7..1049fa752 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -184,7 +184,7 @@ class RouterTests(unittest.TestCase): self.registry.registerUtility(factory, INotFoundAppFactory) router = self._makeOne() self.assertEqual(len(logger.messages), 1) - self.failUnless('INotFoundView' in logger.messages[0]) + self.failUnless('notfound_view' in logger.messages[0]) class DummyRequest: def get_response(self, app): return app diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index d537cf581..7fe33e56b 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -520,6 +520,62 @@ class TestViewDirective(unittest.TestCase): self.assertRaises(ConfigurationError, self._callFUT, context, 'repoze.view', None, view, '', None, 'foo') +class TestNotFoundDirective(unittest.TestCase): + def _callFUT(self, context, view): + from repoze.bfg.zcml import notfound + return notfound(context, view) + + def test_it(self): + 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(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): + from repoze.bfg.zcml import forbidden + return forbidden(context, view) + + def test_it(self): + 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(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 TestDeriveView(unittest.TestCase): def _callFUT(self, view): from repoze.bfg.zcml import derive_view @@ -787,7 +843,7 @@ class TestConnectRouteFunction(unittest.TestCase): 'conditions':{'sub_domain':['a', 'b']} }) -class TestRoute(unittest.TestCase): +class TestRouteDirective(unittest.TestCase): def setUp(self): cleanUp() @@ -978,7 +1034,7 @@ class TestBFGViewFunctionGrokker(unittest.TestCase): actions = context.actions self.assertEqual(len(actions), 0) -class TestZCMLScanFunction(unittest.TestCase): +class TestZCMLScanDirective(unittest.TestCase): def setUp(self): cleanUp() -- cgit v1.2.3