From b0a24149ffc4dd3b945b496e5cdb01111c8cf29a Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sun, 11 Jan 2009 22:43:27 +0000 Subject: - Improve test coverage. - Remove old cold which attempts to recover from trying to unpickle a ``z3c.pt`` template; Chameleon has been the templating engine for a good long time now. Running repoze.bfg against a sandbox that has pickled ``z3c.pt`` templates it will now just fail with an unpickling error, but can be fixed by deleting the template cache files. --- repoze/bfg/tests/test_location.py | 22 ++++++++++++++ repoze/bfg/tests/test_security.py | 38 ++++++++++++++++++++++++ repoze/bfg/tests/test_templating.py | 59 +++++++++++++++++++++++++++++++++++++ repoze/bfg/tests/test_testing.py | 7 ++++- repoze/bfg/tests/test_wsgi.py | 13 ++++++++ 5 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 repoze/bfg/tests/test_templating.py (limited to 'repoze/bfg/tests') diff --git a/repoze/bfg/tests/test_location.py b/repoze/bfg/tests/test_location.py index fc8f8c621..f297a9d6c 100644 --- a/repoze/bfg/tests/test_location.py +++ b/repoze/bfg/tests/test_location.py @@ -75,6 +75,28 @@ class TestLocation(unittest.TestCase): result = list(lineage(o1)) self.assertEqual(result, [o1]) +class TestClassAndInstanceDescr(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.location import ClassAndInstanceDescr + return ClassAndInstanceDescr + + def _makeOne(self, *arg): + return self._getTargetClass()(*arg) + + def test__get__noinst(self): + def f(ob): + return ob + ob = self._makeOne(f, f) + result = ob.__get__(None, 1) + self.assertEqual(result, 1) + + def test__get__withinst(self): + def f(ob): + return ob + ob = self._makeOne(f, f) + result = ob.__get__(1, 2) + self.assertEqual(result, 1) + from repoze.bfg.interfaces import ILocation from zope.interface import implements class Location(object): diff --git a/repoze/bfg/tests/test_security.py b/repoze/bfg/tests/test_security.py index 5fa554629..449933c7e 100644 --- a/repoze/bfg/tests/test_security.py +++ b/repoze/bfg/tests/test_security.py @@ -343,6 +343,13 @@ class TestRemoteUserACLSecurityPolicy(unittest.TestCase, PlacelessSetup): result = policy.authenticated_userid(request) self.assertEqual(result, 'fred') + def test_authenticated_userid_no_remote_user(self): + context = DummyContext() + request = DummyRequest({}) + policy = self._makeOne() + result = policy.authenticated_userid(request) + self.assertEqual(result, None) + def test_effective_principals(self): context = DummyContext() request = DummyRequest({'REMOTE_USER':'fred'}) @@ -352,6 +359,13 @@ class TestRemoteUserACLSecurityPolicy(unittest.TestCase, PlacelessSetup): from repoze.bfg.security import Authenticated self.assertEqual(result, [Everyone, Authenticated, 'fred']) + def test_effective_principals_no_remote_user(self): + context = DummyContext() + request = DummyRequest({}) + policy = self._makeOne() + result = policy.effective_principals(request) + from repoze.bfg.security import Everyone + self.assertEqual(result, [Everyone]) class TestRepozeWhoIdentityACLSecurityPolicy(unittest.TestCase, PlacelessSetup): def _getTargetClass(self): @@ -381,6 +395,13 @@ class TestRepozeWhoIdentityACLSecurityPolicy(unittest.TestCase, PlacelessSetup): result = policy.authenticated_userid(request) self.assertEqual(result, 'fred') + def test_authenticated_userid_no_who_ident(self): + context = DummyContext() + request = DummyRequest({}) + policy = self._makeOne() + result = policy.authenticated_userid(request) + self.assertEqual(result, None) + def test_effective_principals(self): context = DummyContext() identity = {'repoze.who.identity':{'repoze.who.userid':'fred'}} @@ -391,6 +412,13 @@ class TestRepozeWhoIdentityACLSecurityPolicy(unittest.TestCase, PlacelessSetup): from repoze.bfg.security import Authenticated self.assertEqual(result, [Everyone, Authenticated, 'fred']) + def test_effective_principals_no_who_ident(self): + context = DummyContext() + request = DummyRequest({}) + policy = self._makeOne() + result = policy.effective_principals(request) + from repoze.bfg.security import Everyone + self.assertEqual(result, [Everyone]) class TestAPIFunctions(unittest.TestCase, PlacelessSetup): def setUp(self): @@ -472,6 +500,16 @@ class TestViewPermission(unittest.TestCase): self.assertEqual(result, True) self.assertEqual(secpol.checked, (context, request, 'repoze.view')) + def test_repr(self): + context = DummyContext() + request = DummyRequest({}) + request.view_name = 'viewname' + secpol = DummySecurityPolicy(True) + permission = self._makeOne(context, request, 'repoze.view') + result = repr(permission) + self.failUnless(result.startswith('")) + class TestViewPermissionFactory(unittest.TestCase): def _getTargetClass(self): from repoze.bfg.security import ViewPermissionFactory diff --git a/repoze/bfg/tests/test_templating.py b/repoze/bfg/tests/test_templating.py new file mode 100644 index 000000000..3429b0839 --- /dev/null +++ b/repoze/bfg/tests/test_templating.py @@ -0,0 +1,59 @@ +import unittest +from zope.testing.cleanup import cleanUp + +from repoze.bfg import testing + +class TestRendererFromCache(unittest.TestCase): + def setUp(self): + cleanUp() + + def tearDown(self): + cleanUp() + + def _callFUT(self, path, factory, level=3, **kw): + from repoze.bfg.templating import renderer_from_cache + return renderer_from_cache(path, factory, level, **kw) + + def test_relpath_found(self): + renderer = {} + from repoze.bfg.interfaces import ITemplateRenderer + testing.registerUtility(renderer, ITemplateRenderer, name='foo/bar') + result = self._callFUT('foo/bar', None) + self.failUnless(renderer is result) + + def test_abspath_found(self): + import os + here = os.path.dirname(__file__) + abspath = os.path.join(here, 'foo/bar') + from repoze.bfg.interfaces import ITemplateRenderer + renderer = {} + testing.registerUtility(renderer, ITemplateRenderer, name=abspath) + result = self._callFUT('foo/bar', None) + self.failUnless(renderer is result) + + def test_notfound_missing(self): + import os + here = os.path.dirname(__file__) + abspath = os.path.join(here, 'foo/bar') + renderer = {} + self.assertRaises(ValueError, self._callFUT, 'foo/bar', None) + + def test_withfactory(self): + renderer = {} + factory = DummyFactory(renderer) + import os + here = os.path.dirname(__file__) + abspath = os.path.join(here, 'pp.pt') + from repoze.bfg.interfaces import ITemplateRenderer + testing.registerUtility(renderer, ITemplateRenderer, name=abspath) + result = self._callFUT('pp.pt', factory) + self.failUnless(renderer is result) + +class DummyFactory: + def __init__(self, renderer): + self.renderer = renderer + + def __call__(self, path, **kw): + self.path = path + self.kw = kw + return self.renderer diff --git a/repoze/bfg/tests/test_testing.py b/repoze/bfg/tests/test_testing.py index 38d41be06..a92e340fc 100644 --- a/repoze/bfg/tests/test_testing.py +++ b/repoze/bfg/tests/test_testing.py @@ -311,7 +311,7 @@ class TestDummyModel(unittest.TestCase): self.assertEqual(clone.__parent__, 'parent2') self.assertEqual(clone.foo, 1) - def test_keys_items_values(self): + def test_keys_items_values_len(self): class Dummy: pass model = self._makeOne() @@ -320,6 +320,11 @@ class TestDummyModel(unittest.TestCase): self.assertEqual(model.values(), model.subs.values()) self.assertEqual(model.items(), model.subs.items()) self.assertEqual(model.keys(), model.subs.keys()) + self.assertEqual(len(model), 2) + + def test_nonzero(self): + model = self._makeOne() + self.assertEqual(model.__nonzero__(), True) class TestDummyRequest(unittest.TestCase): def _getTargetClass(self): diff --git a/repoze/bfg/tests/test_wsgi.py b/repoze/bfg/tests/test_wsgi.py index d905350d6..4c36850b6 100644 --- a/repoze/bfg/tests/test_wsgi.py +++ b/repoze/bfg/tests/test_wsgi.py @@ -18,6 +18,19 @@ class WSGIAppTests(unittest.TestCase): self.assertEqual(response.headerlist, headerlist) self.assertEqual(response.app_iter, [body]) + def test_decorator_startresponse_uncalled(self): + body = 'Unauthorized' + headerlist = [ ('Content-Type', 'text/plain'), + ('Content-Length', len(body)) ] + status = '401 Unauthorized' + def real_wsgiapp(environ, start_response): + return [body] + from repoze.bfg.wsgi import wsgiapp + wrapped = wsgiapp(real_wsgiapp) + context = DummyContext() + request = DummyRequest({}) + self.assertRaises(RuntimeError, wrapped, context, request) + class DummyContext: pass -- cgit v1.2.3