summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-01-11 02:20:52 +0000
committerChris McDonough <chrism@agendaless.com>2009-01-11 02:20:52 +0000
commit358dc276d28fb395a9a742ff53dc66ee115c58ad (patch)
treec92dd9bdd24f4b473a7e56a7a498aac046dd4ed4 /repoze/bfg/tests
parentbe268487581bf94086ecc18904113d71237612e1 (diff)
downloadpyramid-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')
-rw-r--r--repoze/bfg/tests/test_registry.py129
-rw-r--r--repoze/bfg/tests/test_router.py111
-rw-r--r--repoze/bfg/tests/test_settings.py121
-rw-r--r--repoze/bfg/tests/test_template.py80
-rw-r--r--repoze/bfg/tests/test_traversal.py20
5 files changed, 245 insertions, 216 deletions
diff --git a/repoze/bfg/tests/test_registry.py b/repoze/bfg/tests/test_registry.py
index 9bf09399f..0d051c131 100644
--- a/repoze/bfg/tests/test_registry.py
+++ b/repoze/bfg/tests/test_registry.py
@@ -23,144 +23,15 @@ class TestMakeRegistry(unittest.TestCase, PlacelessSetup):
old = repoze.bfg.registry.setRegistryManager(dummyregmgr)
registry = makeRegistry('configure.zcml',
fixtureapp,
- options={'reload_templates':True,
- 'debug_authorization':True},
lock=dummylock)
from zope.component.registry import Components
self.failUnless(isinstance(registry, Components))
self.assertEqual(dummylock.acquired, True)
self.assertEqual(dummylock.released, True)
self.assertEqual(dummyregmgr.registry, registry)
- from zope.component import getUtility
- from repoze.bfg.interfaces import ISettings
- from repoze.bfg.interfaces import ILogger
- settings = getUtility(ISettings)
- logger = getUtility(ILogger, name='repoze.bfg.debug')
- self.assertEqual(logger.name, 'repoze.bfg.debug')
- self.assertEqual(settings.reload_templates, True)
- self.assertEqual(settings.debug_authorization, True)
finally:
repoze.bfg.registry.setRegistryManager(old)
-class TestGetOptions(unittest.TestCase):
- def _getFUT(self):
- from repoze.bfg.registry import get_options
- return get_options
-
- def test_reload_templates(self):
- get_options = self._getFUT()
- result = get_options({})
- self.assertEqual(result['reload_templates'], False)
- result = get_options({'reload_templates':'false'})
- self.assertEqual(result['reload_templates'], False)
- result = get_options({'reload_templates':'t'})
- self.assertEqual(result['reload_templates'], True)
- result = get_options({'reload_templates':'1'})
- self.assertEqual(result['reload_templates'], True)
- result = get_options({}, {'BFG_RELOAD_TEMPLATES':'1'})
- self.assertEqual(result['reload_templates'], True)
- result = get_options({'reload_templates':'false'},
- {'BFG_RELOAD_TEMPLATES':'1'})
- self.assertEqual(result['reload_templates'], True)
-
- def test_debug_authorization(self):
- get_options = self._getFUT()
- result = get_options({})
- self.assertEqual(result['debug_authorization'], False)
- result = get_options({'debug_authorization':'false'})
- self.assertEqual(result['debug_authorization'], False)
- result = get_options({'debug_authorization':'t'})
- self.assertEqual(result['debug_authorization'], True)
- result = get_options({'debug_authorization':'1'})
- self.assertEqual(result['debug_authorization'], True)
- result = get_options({}, {'BFG_DEBUG_AUTHORIZATION':'1'})
- self.assertEqual(result['debug_authorization'], True)
- result = get_options({'debug_authorization':'false'},
- {'BFG_DEBUG_AUTHORIZATION':'1'})
- self.assertEqual(result['debug_authorization'], True)
-
- def test_debug_notfound(self):
- get_options = self._getFUT()
- result = get_options({})
- self.assertEqual(result['debug_notfound'], False)
- result = get_options({'debug_notfound':'false'})
- self.assertEqual(result['debug_notfound'], False)
- result = get_options({'debug_notfound':'t'})
- self.assertEqual(result['debug_notfound'], True)
- result = get_options({'debug_notfound':'1'})
- self.assertEqual(result['debug_notfound'], True)
- result = get_options({}, {'BFG_DEBUG_NOTFOUND':'1'})
- self.assertEqual(result['debug_notfound'], True)
- result = get_options({'debug_notfound':'false'},
- {'BFG_DEBUG_NOTFOUND':'1'})
- self.assertEqual(result['debug_notfound'], True)
-
- def test_debug_all(self):
- get_options = self._getFUT()
- result = get_options({})
- self.assertEqual(result['debug_notfound'], False)
- self.assertEqual(result['debug_authorization'], False)
- result = get_options({'debug_all':'false'})
- self.assertEqual(result['debug_notfound'], False)
- self.assertEqual(result['debug_authorization'], False)
- result = get_options({'debug_all':'t'})
- self.assertEqual(result['debug_notfound'], True)
- self.assertEqual(result['debug_authorization'], True)
- result = get_options({'debug_all':'1'})
- self.assertEqual(result['debug_notfound'], True)
- self.assertEqual(result['debug_authorization'], True)
- result = get_options({}, {'BFG_DEBUG_ALL':'1'})
- self.assertEqual(result['debug_notfound'], True)
- self.assertEqual(result['debug_authorization'], True)
- result = get_options({'debug_all':'false'},
- {'BFG_DEBUG_ALL':'1'})
- self.assertEqual(result['debug_notfound'], True)
- self.assertEqual(result['debug_authorization'], True)
-
- def test_unicode_path_segments(self):
- get_options = self._getFUT()
- result = get_options({})
- self.assertEqual(result['unicode_path_segments'], False)
- result = get_options({'unicode_path_segments':'false'})
- self.assertEqual(result['unicode_path_segments'], False)
- result = get_options({'unicode_path_segments':'t'})
- self.assertEqual(result['unicode_path_segments'], True)
- result = get_options({'unicode_path_segments':'1'})
- self.assertEqual(result['unicode_path_segments'], True)
- result = get_options({}, {'BFG_UNICODE_PATH_SEGMENTS':'1'})
- self.assertEqual(result['unicode_path_segments'], True)
- result = get_options({'unicode_path_segments':'false'},
- {'BFG_UNICODE_PATH_SEGMENTS':'1'})
- self.assertEqual(result['unicode_path_segments'], True)
-
- def test_originals_kept(self):
- get_options = self._getFUT()
- result = get_options({'a':'i am so a'})
- self.assertEqual(result['a'], 'i am so a')
-
-class TestSettings(unittest.TestCase):
- def _getTargetClass(self):
- from repoze.bfg.registry import Settings
- return Settings
-
- def _makeOne(self, **options):
- klass = self._getTargetClass()
- return klass(options)
-
- def test_no_options(self):
- settings = self._makeOne()
- self.assertEqual(settings.reload_templates, False)
- self.assertEqual(settings.debug_notfound, False)
- self.assertEqual(settings.debug_authorization, False)
- self.assertEqual(settings.unicode_path_segments, True)
-
- def test_with_option(self):
- settings = self._makeOne(reload_templates=True)
- self.assertEqual(settings.reload_templates, True)
- self.assertEqual(settings.debug_notfound, False)
- self.assertEqual(settings.debug_authorization, False)
- self.assertEqual(settings.unicode_path_segments, True)
-
class TestThreadLocalRegistryManager(unittest.TestCase, PlacelessSetup):
def setUp(self):
PlacelessSetup.setUp(self)
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
diff --git a/repoze/bfg/tests/test_settings.py b/repoze/bfg/tests/test_settings.py
new file mode 100644
index 000000000..1d1eb08ea
--- /dev/null
+++ b/repoze/bfg/tests/test_settings.py
@@ -0,0 +1,121 @@
+import unittest
+
+class TestSettings(unittest.TestCase):
+ def _getTargetClass(self):
+ from repoze.bfg.settings import Settings
+ return Settings
+
+ def _makeOne(self, **options):
+ klass = self._getTargetClass()
+ return klass(options)
+
+ def test_no_options(self):
+ settings = self._makeOne()
+ self.assertEqual(settings.reload_templates, False)
+ self.assertEqual(settings.debug_notfound, False)
+ self.assertEqual(settings.debug_authorization, False)
+ self.assertEqual(settings.unicode_path_segments, True)
+
+ def test_with_option(self):
+ settings = self._makeOne(reload_templates=True)
+ self.assertEqual(settings.reload_templates, True)
+ self.assertEqual(settings.debug_notfound, False)
+ self.assertEqual(settings.debug_authorization, False)
+ self.assertEqual(settings.unicode_path_segments, True)
+
+class TestGetOptions(unittest.TestCase):
+ def _getFUT(self):
+ from repoze.bfg.settings import get_options
+ return get_options
+
+ def test_reload_templates(self):
+ get_options = self._getFUT()
+ result = get_options({})
+ self.assertEqual(result['reload_templates'], False)
+ result = get_options({'reload_templates':'false'})
+ self.assertEqual(result['reload_templates'], False)
+ result = get_options({'reload_templates':'t'})
+ self.assertEqual(result['reload_templates'], True)
+ result = get_options({'reload_templates':'1'})
+ self.assertEqual(result['reload_templates'], True)
+ result = get_options({}, {'BFG_RELOAD_TEMPLATES':'1'})
+ self.assertEqual(result['reload_templates'], True)
+ result = get_options({'reload_templates':'false'},
+ {'BFG_RELOAD_TEMPLATES':'1'})
+ self.assertEqual(result['reload_templates'], True)
+
+ def test_debug_authorization(self):
+ get_options = self._getFUT()
+ result = get_options({})
+ self.assertEqual(result['debug_authorization'], False)
+ result = get_options({'debug_authorization':'false'})
+ self.assertEqual(result['debug_authorization'], False)
+ result = get_options({'debug_authorization':'t'})
+ self.assertEqual(result['debug_authorization'], True)
+ result = get_options({'debug_authorization':'1'})
+ self.assertEqual(result['debug_authorization'], True)
+ result = get_options({}, {'BFG_DEBUG_AUTHORIZATION':'1'})
+ self.assertEqual(result['debug_authorization'], True)
+ result = get_options({'debug_authorization':'false'},
+ {'BFG_DEBUG_AUTHORIZATION':'1'})
+ self.assertEqual(result['debug_authorization'], True)
+
+ def test_debug_notfound(self):
+ get_options = self._getFUT()
+ result = get_options({})
+ self.assertEqual(result['debug_notfound'], False)
+ result = get_options({'debug_notfound':'false'})
+ self.assertEqual(result['debug_notfound'], False)
+ result = get_options({'debug_notfound':'t'})
+ self.assertEqual(result['debug_notfound'], True)
+ result = get_options({'debug_notfound':'1'})
+ self.assertEqual(result['debug_notfound'], True)
+ result = get_options({}, {'BFG_DEBUG_NOTFOUND':'1'})
+ self.assertEqual(result['debug_notfound'], True)
+ result = get_options({'debug_notfound':'false'},
+ {'BFG_DEBUG_NOTFOUND':'1'})
+ self.assertEqual(result['debug_notfound'], True)
+
+ def test_debug_all(self):
+ get_options = self._getFUT()
+ result = get_options({})
+ self.assertEqual(result['debug_notfound'], False)
+ self.assertEqual(result['debug_authorization'], False)
+ result = get_options({'debug_all':'false'})
+ self.assertEqual(result['debug_notfound'], False)
+ self.assertEqual(result['debug_authorization'], False)
+ result = get_options({'debug_all':'t'})
+ self.assertEqual(result['debug_notfound'], True)
+ self.assertEqual(result['debug_authorization'], True)
+ result = get_options({'debug_all':'1'})
+ self.assertEqual(result['debug_notfound'], True)
+ self.assertEqual(result['debug_authorization'], True)
+ result = get_options({}, {'BFG_DEBUG_ALL':'1'})
+ self.assertEqual(result['debug_notfound'], True)
+ self.assertEqual(result['debug_authorization'], True)
+ result = get_options({'debug_all':'false'},
+ {'BFG_DEBUG_ALL':'1'})
+ self.assertEqual(result['debug_notfound'], True)
+ self.assertEqual(result['debug_authorization'], True)
+
+ def test_unicode_path_segments(self):
+ get_options = self._getFUT()
+ result = get_options({})
+ self.assertEqual(result['unicode_path_segments'], True)
+ result = get_options({'unicode_path_segments':'false'})
+ self.assertEqual(result['unicode_path_segments'], False)
+ result = get_options({'unicode_path_segments':'t'})
+ self.assertEqual(result['unicode_path_segments'], True)
+ result = get_options({'unicode_path_segments':'1'})
+ self.assertEqual(result['unicode_path_segments'], True)
+ result = get_options({}, {'BFG_UNICODE_PATH_SEGMENTS':'1'})
+ self.assertEqual(result['unicode_path_segments'], True)
+ result = get_options({'unicode_path_segments':'false'},
+ {'BFG_UNICODE_PATH_SEGMENTS':'1'})
+ self.assertEqual(result['unicode_path_segments'], True)
+
+ def test_originals_kept(self):
+ get_options = self._getFUT()
+ result = get_options({'a':'i am so a'})
+ self.assertEqual(result['a'], 'i am so a')
+
diff --git a/repoze/bfg/tests/test_template.py b/repoze/bfg/tests/test_template.py
index 31aa074d8..8d16972b8 100644
--- a/repoze/bfg/tests/test_template.py
+++ b/repoze/bfg/tests/test_template.py
@@ -1,18 +1,18 @@
import unittest
-from zope.component.testing import PlacelessSetup
+from zope.testing.cleanup import cleanUp
-class Base(PlacelessSetup):
+class Base(object):
def setUp(self):
- from zope.deprecation import __show__
- __show__.off()
- PlacelessSetup.setUp(self)
+ cleanUp()
+ import warnings
+ warnings.simplefilter('ignore')
def tearDown(self):
- from zope.deprecation import __show__
- __show__.on()
- PlacelessSetup.tearDown(self)
-
+ cleanUp()
+ import warnings
+ warnings.resetwarnings()
+
def _zcmlConfigure(self):
import repoze.bfg.includes
import zope.configuration.xmlconfig
@@ -24,42 +24,28 @@ class Base(PlacelessSetup):
here = os.path.abspath(os.path.dirname(__file__))
return os.path.join(here, 'fixtures', name)
-class RenderTemplateTests(unittest.TestCase, Base):
- def setUp(self):
- Base.setUp(self)
-
- def tearDown(self):
- Base.tearDown(self)
-
- def _getFUT(self):
+class RenderTemplateTests(Base, unittest.TestCase):
+ def _callFUT(self, *arg, **kw):
from repoze.bfg.template import render_template
- return render_template
+ return render_template(*arg, **kw)
def test_it(self):
self._zcmlConfigure()
minimal = self._getTemplatePath('minimal.pt')
- render = self._getFUT()
- result = render(minimal)
+ result = self._callFUT(minimal)
self.failUnless(isinstance(result, str))
self.assertEqual(result,
'<div xmlns="http://www.w3.org/1999/xhtml">\n</div>')
-class RenderTemplateToResponseTests(unittest.TestCase, Base):
- def setUp(self):
- Base.setUp(self)
-
- def tearDown(self):
- Base.tearDown(self)
-
- def _getFUT(self):
+class RenderTemplateToResponseTests(Base, unittest.TestCase):
+ def _callFUT(self, *arg, **kw):
from repoze.bfg.template import render_template_to_response
- return render_template_to_response
+ return render_template_to_response(*arg, **kw)
def test_it(self):
self._zcmlConfigure()
minimal = self._getTemplatePath('minimal.pt')
- render = self._getFUT()
- result = render(minimal)
+ result = self._callFUT(minimal)
from webob import Response
self.failUnless(isinstance(result, Response))
self.assertEqual(result.app_iter,
@@ -67,45 +53,37 @@ class RenderTemplateToResponseTests(unittest.TestCase, Base):
self.assertEqual(result.status, '200 OK')
self.assertEqual(len(result.headerlist), 2)
-class GetTemplateTests(unittest.TestCase, Base):
- def setUp(self):
- Base.setUp(self)
-
- def tearDown(self):
- Base.tearDown(self)
-
- def _getFUT(self):
+class GetTemplateTests(Base, unittest.TestCase):
+ def _callFUT(self, *arg, **kw):
from repoze.bfg.template import get_template
- return get_template
+ return get_template(*arg, **kw)
def test_nonabs_registered(self):
self._zcmlConfigure()
from zope.component import getGlobalSiteManager
from zope.component import queryUtility
from repoze.bfg.chameleon_zpt import ZPTTemplateFactory
- from repoze.bfg.interfaces import ITemplate
+ from repoze.bfg.interfaces import ITemplateRenderer
minimal = self._getTemplatePath('minimal.pt')
utility = ZPTTemplateFactory(minimal)
gsm = getGlobalSiteManager()
- gsm.registerUtility(utility, ITemplate, name=minimal)
- get = self._getFUT()
- result = get(minimal)
+ gsm.registerUtility(utility, ITemplateRenderer, name=minimal)
+ result = self._callFUT(minimal)
self.assertEqual(result.filename, minimal)
- self.assertEqual(queryUtility(ITemplate, minimal), utility)
+ self.assertEqual(queryUtility(ITemplateRenderer, minimal), utility)
def test_nonabs_unregistered(self):
self._zcmlConfigure()
from zope.component import getGlobalSiteManager
from zope.component import queryUtility
from repoze.bfg.chameleon_zpt import ZPTTemplateFactory
- from repoze.bfg.interfaces import ITemplate
+ from repoze.bfg.interfaces import ITemplateRenderer
minimal = self._getTemplatePath('minimal.pt')
- self.assertEqual(queryUtility(ITemplate, minimal), None)
+ self.assertEqual(queryUtility(ITemplateRenderer, minimal), None)
utility = ZPTTemplateFactory(minimal)
gsm = getGlobalSiteManager()
- gsm.registerUtility(utility, ITemplate, name=minimal)
- get = self._getFUT()
- result = get(minimal)
+ gsm.registerUtility(utility, ITemplateRenderer, name=minimal)
+ result = self._callFUT(minimal)
self.assertEqual(result.filename, minimal)
- self.assertEqual(queryUtility(ITemplate, minimal), utility)
+ self.assertEqual(queryUtility(ITemplateRenderer, minimal), utility)
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py
index dcb47e6ed..12c7d3741 100644
--- a/repoze/bfg/tests/test_traversal.py
+++ b/repoze/bfg/tests/test_traversal.py
@@ -292,6 +292,24 @@ class FindModelTests(unittest.TestCase):
self.assertRaises(KeyError, self._callFUT, baz, '/')
self.assertEqual(dummy.wascontext, True)
+ def test_unicode_pathinfo_converted_to_utf8(self):
+ la = unicode('LaPe\xc3\xb1a', 'utf-8')
+
+ dummy = DummyContext()
+ dummy.__parent__ = None
+ dummy.__name__ = None
+ baz = DummyContext()
+ baz.__parent__ = dummy
+ baz.__name__ = la
+
+ traverser = make_traverser(baz, '', [])
+ self._registerTraverserFactory(traverser)
+ path = '/' + la
+ result = self._callFUT(baz, path)
+ self.assertEqual(result, baz)
+ self.assertEqual(dummy.wascontext, True)
+ self.assertEqual(dummy.environ['PATH_INFO'], path.encode('utf-8'))
+
class ModelPathTests(unittest.TestCase):
def _callFUT(self, model, *elements):
from repoze.bfg.traversal import model_path
@@ -335,8 +353,10 @@ class ModelPathTests(unittest.TestCase):
def make_traverser(*args):
class DummyTraverser(object):
def __init__(self, context):
+ self.context = context
context.wascontext = True
def __call__(self, environ):
+ self.context.environ = environ
return args
return DummyTraverser