diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-01-11 02:20:52 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-01-11 02:20:52 +0000 |
| commit | 358dc276d28fb395a9a742ff53dc66ee115c58ad (patch) | |
| tree | c92dd9bdd24f4b473a7e56a7a498aac046dd4ed4 /repoze/bfg/tests/test_router.py | |
| parent | be268487581bf94086ecc18904113d71237612e1 (diff) | |
| download | pyramid-358dc276d28fb395a9a742ff53dc66ee115c58ad.tar.gz pyramid-358dc276d28fb395a9a742ff53dc66ee115c58ad.tar.bz2 pyramid-358dc276d28fb395a9a742ff53dc66ee115c58ad.zip | |
Merge router-simplify branch. Changelog below.
Bug Fixes
---------
- Fix a bug where the Paste configuration's ``unicode_path_segments``
(and os.environ's ``BFG_UNICODE_PATH_SEGMENTS``) may have been
defaulting to false in some circumstances. It now always defaults
to true, matching the documentation and intent.
- The ``repoze.bfg.traversal.find_model`` API did not work properly
when passed a ``path`` argument which was unicode and contained
high-order bytes when the ``unicode_path_segments`` or
``BFG_UNICODE_PATH_SEGMENTS`` configuration variables were "true".
- A new module was added: ``repoze.bfg.settings``. This contains
deployment-settings-related code.
Behavior Changes
----------------
- The ``make_app`` callable within ``repoze.bfg.router`` now registers
the ``root_policy`` argument as a utility (unnamed, using the new
``repoze.bfg.interfaces.IRootFactory`` as a provides interface)
rather than passing it as the first argument to the
``repoze.bfg.router.Router`` class. As a result the
``repoze.bfg.router.Router`` router class only accepts a single
argument: ``registry``. The ``repoze.bfg.router.Router`` class
retrieves the root policy via a utility lookup now. The
``repoze.bfg.router.make_app`` API also now performs some important
application registrations that were previously handled inside
``repoze.bfg.registry.makeRegistry``.
- The ``repoze.bfg.settings.Settings`` class (an instance of which is
registered as a utility providing
``repoze.bfg.interfaces.ISettings`` when any application is started)
now automatically calls ``repoze.bfg.settings.get_options`` on the
options passed to its constructor. This means that usage of
``get_options`` within an application's ``make_app`` function is no
longer required (the "raw" ``options`` dict or None may be passed).
Deprecations
------------
- Moved the ``repoze.bfg.registry.Settings`` class. This has been
moved to ``repoze.bfg.settings.Settings``. A deprecation warning is
issued when it is imported from the older location.
- Moved the ``repoze.bfg.registry.get_options`` function This has been
moved to ``repoze.bfg.settings.get_options``. A deprecation warning
is issued when it is imported from the older location.
- The ``repoze.bfg.interfaces.IRootPolicy`` interface was renamed
within the interfaces package. It has been renamed to
``IRootFactory``. A deprecation warning is issued when it is
imported from the older location.
Diffstat (limited to 'repoze/bfg/tests/test_router.py')
| -rw-r--r-- | repoze/bfg/tests/test_router.py | 111 |
1 files changed, 75 insertions, 36 deletions
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py index 43dc98176..3f52bd9cd 100644 --- a/repoze/bfg/tests/test_router.py +++ b/repoze/bfg/tests/test_router.py @@ -65,6 +65,12 @@ class RouterTests(unittest.TestCase, PlacelessSetup): gsm = zope.component.getGlobalSiteManager() gsm.registerHandler(listener, (iface,)) + def _registerRootFactory(self, root_factory): + import zope.component + gsm = zope.component.getGlobalSiteManager() + from repoze.bfg.interfaces import IRootFactory + gsm.registerUtility(root_factory, IRootFactory) + def _getTargetClass(self): from repoze.bfg.router import Router return Router @@ -84,13 +90,14 @@ class RouterTests(unittest.TestCase, PlacelessSetup): return environ def test_call_no_view_registered_no_isettings(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) environ = self._makeEnviron() context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) self._registerTraverserFactory(traversalfactory, '', None) logger = self._registerLogger() - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) headers = start_response.headers @@ -102,14 +109,15 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(len(logger.messages), 0) def test_call_no_view_registered_debug_notfound_false(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) environ = self._makeEnviron() context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) self._registerTraverserFactory(traversalfactory, '', None) logger = self._registerLogger() self._registerSettings(debug_notfound=False) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) headers = start_response.headers @@ -121,14 +129,15 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(len(logger.messages), 0) def test_call_no_view_registered_debug_notfound_true(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) environ = self._makeEnviron() context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) self._registerTraverserFactory(traversalfactory, '', None) self._registerSettings(debug_notfound=True) logger = self._registerLogger() - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) headers = start_response.headers @@ -150,7 +159,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.failUnless("subpath: []" in message) def test_call_view_registered_nonspecific_default_path(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) response = DummyResponse() @@ -159,7 +168,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): environ = self._makeEnviron() self._registerTraverserFactory(traversalfactory, '', None) self._registerView(view, '', None, None) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -171,7 +181,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(environ['webob.adhoc_attrs']['root'], None) def test_call_view_registered_nonspecific_nondefault_path_and_subpath(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) context = DummyContext() traversalfactory = make_traversal_factory(context, 'foo', ['bar']) response = DummyResponse() @@ -180,7 +190,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): environ = self._makeEnviron() self._registerTraverserFactory(traversalfactory, '', None) self._registerView(view, 'foo', None, None) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -192,7 +203,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(environ['webob.adhoc_attrs']['root'], None) def test_call_view_registered_specific_success(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -207,7 +218,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): environ = self._makeEnviron() self._registerTraverserFactory(traversalfactory, '', None) self._registerView(view, '', IContext, IRequest) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(result, ['Hello world']) @@ -219,7 +231,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(environ['webob.adhoc_attrs']['root'], None) def test_call_view_registered_specific_fail(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -235,14 +247,15 @@ class RouterTests(unittest.TestCase, PlacelessSetup): environ = self._makeEnviron() self._registerTraverserFactory(traversalfactory, '', None) self._registerView(view, '', IContext, IRequest) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '404 Not Found') self.failUnless('404' in result[0]) def test_call_view_registered_security_policy_permission_none(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -258,13 +271,14 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerView(view, '', IContext, IRequest) secpol = DummySecurityPolicy() self._registerSecurityPolicy(secpol) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '200 OK') def test_call_view_registered_security_policy_permission_succeeds(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -282,14 +296,15 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerView(view, '', IContext, IRequest) self._registerSecurityPolicy(secpol) self._registerPermission(permissionfactory, '', IContext, IRequest) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '200 OK') self.assertEqual(permissionfactory.checked_with, secpol) def test_call_view_permission_fails_nosettings(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -310,7 +325,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerView(view, '', IContext, IRequest) self._registerSecurityPolicy(secpol) self._registerPermission(permissionfactory, '', IContext, IRequest) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '401 Unauthorized') @@ -319,7 +335,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(permissionfactory.checked_with, secpol) def test_call_view_permission_fails_no_debug_auth(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -341,7 +357,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerSecurityPolicy(secpol) self._registerPermission(permissionfactory, '', IContext, IRequest) self._registerSettings(debug_authorization=False) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '401 Unauthorized') @@ -350,7 +367,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self.assertEqual(permissionfactory.checked_with, secpol) def test_call_view_permission_fails_with_debug_auth(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) from zope.interface import Interface from zope.interface import directlyProvides class IContext(Interface): @@ -373,7 +390,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): self._registerPermission(permissionfactory, '', IContext, IRequest) self._registerSettings(debug_authorization=True) logger = self._registerLogger() - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(start_response.status, '401 Unauthorized') @@ -395,7 +413,7 @@ class RouterTests(unittest.TestCase, PlacelessSetup): "for principals ['principals']" in logged) def test_call_eventsends(self): - rootpolicy = make_rootpolicy(None) + rootfactory = make_rootfactory(None) context = DummyContext() traversalfactory = make_traversal_factory(context, '', []) response = DummyResponse() @@ -414,7 +432,8 @@ class RouterTests(unittest.TestCase, PlacelessSetup): response_events.append(event) self._registerEventListener(handle_request, INewRequest) self._registerEventListener(handle_response, INewResponse) - router = self._makeOne(rootpolicy, None) + self._registerRootFactory(rootfactory) + router = self._makeOne(None) start_response = DummyStartResponse() result = router(environ, start_response) self.assertEqual(len(request_events), 1) @@ -429,17 +448,15 @@ class MakeAppTests(unittest.TestCase, PlacelessSetup): def tearDown(self): PlacelessSetup.tearDown(self) - def _getFUT(self): + def _callFUT(self, *arg, **kw): from repoze.bfg.router import make_app - return make_app + return make_app(*arg, **kw) def test_fixtureapp(self): from repoze.bfg.tests import fixtureapp - make_app = self._getFUT() - rootpolicy = make_rootpolicy(None) - app = make_app(rootpolicy, fixtureapp) + rootpolicy = make_rootfactory(None) + app = self._callFUT(rootpolicy, fixtureapp) self.assertEqual(app.registry.__name__, 'repoze.bfg.tests.fixtureapp') - self.assertEqual(app.root_policy, rootpolicy) def test_event(self): def subscriber(event): @@ -455,13 +472,35 @@ class MakeAppTests(unittest.TestCase, PlacelessSetup): ) try: from repoze.bfg.tests import fixtureapp - make_app = self._getFUT() - rootpolicy = make_rootpolicy(None) - app = make_app(rootpolicy, fixtureapp) + rootpolicy = make_rootfactory(None) + app = self._callFUT(rootpolicy, fixtureapp) assert app.created is True finally: repoze.bfg.router.registry_manager = old_registry_manager + def test_registrations(self): + options= {'reload_templates':True, + 'debug_authorization':True} + import repoze.bfg.router + old_registry_manager = repoze.bfg.router.registry_manager + repoze.bfg.router.registry_manager = DummyRegistryManager() + try: + from repoze.bfg.tests import fixtureapp + rootpolicy = make_rootfactory(None) + app = self._callFUT(rootpolicy, fixtureapp, options=options) + from repoze.bfg.interfaces import ISettings + from repoze.bfg.interfaces import ILogger + from repoze.bfg.interfaces import IRootFactory + settings = app.registry.getUtility(ISettings) + logger = app.registry.getUtility(ILogger, name='repoze.bfg.debug') + rootfactory = app.registry.getUtility(IRootFactory) + self.assertEqual(logger.name, 'repoze.bfg.debug') + self.assertEqual(settings.reload_templates, True) + self.assertEqual(settings.debug_authorization, True) + self.assertEqual(rootfactory, rootpolicy) + finally: + repoze.bfg.router.registry_manager = old_registry_manager + class DummyRegistryManager: def set(self, registry): pass @@ -516,7 +555,7 @@ def make_permission_factory(result): return 'permission' return DummyPermissionFactory -def make_rootpolicy(root): +def make_rootfactory(root): def rootpolicy(environ): return root return rootpolicy |
