import unittest from zope.interface import implementer from pyramid.compat import text_ from pyramid.security import AuthenticationAPIMixin, AuthorizationAPIMixin from . import IDummy class TestingConfiguratorMixinTests(unittest.TestCase): def _makeOne(self, *arg, **kw): from pyramid.config import Configurator config = Configurator(*arg, **kw) return config def test_testing_securitypolicy(self): from pyramid.testing import DummySecurityPolicy config = self._makeOne(autocommit=True) config.testing_securitypolicy( 'user', ('group1', 'group2'), permissive=False ) from pyramid.interfaces import IAuthenticationPolicy from pyramid.interfaces import IAuthorizationPolicy ut = config.registry.getUtility(IAuthenticationPolicy) self.assertTrue(isinstance(ut, DummySecurityPolicy)) ut = config.registry.getUtility(IAuthorizationPolicy) self.assertEqual(ut.userid, 'user') self.assertEqual(ut.groupids, ('group1', 'group2')) self.assertEqual(ut.permissive, False) def test_testing_securitypolicy_remember_result(self): from pyramid.security import remember config = self._makeOne(autocommit=True) pol = config.testing_securitypolicy( 'user', ('group1', 'group2'), permissive=False, remember_result=True, ) request = DummyRequest() request.registry = config.registry val = remember(request, 'fred') self.assertEqual(pol.remembered, 'fred') self.assertEqual(val, True) def test_testing_securitypolicy_forget_result(self): from pyramid.security import forget config = self._makeOne(autocommit=True) pol = config.testing_securitypolicy( 'user', ('group1', 'group2'), permissive=False, forget_result=True ) request = DummyRequest() request.registry = config.registry val = forget(request) self.assertEqual(pol.forgotten, True) self.assertEqual(val, True) def test_testing_resources(self): from pyramid.traversal import find_resource from pyramid.interfaces import ITraverser ob1 = object() ob2 = object() resources = {'/ob1': ob1, '/ob2': ob2} config = self._makeOne(autocommit=True) config.testing_resources(resources) adapter = config.registry.getAdapter(None, ITraverser) result = adapter(DummyRequest({'PATH_INFO': '/ob1'})) self.assertEqual(result['context'], ob1) self.assertEqual(result['view_name'], '') self.assertEqual(result['subpath'], ()) self.assertEqual(result['traversed'], (text_('ob1'),)) self.assertEqual(result['virtual_root'], ob1) self.assertEqual(result['virtual_root_path'], ()) result = adapter(DummyRequest({'PATH_INFO': '/ob2'})) self.assertEqual(result['context'], ob2) self.assertEqual(result['view_name'], '') self.assertEqual(result['subpath'], ()) self.assertEqual(result['traversed'], (text_('ob2'),)) self.assertEqual(result['virtual_root'], ob2) self.assertEqual(result['virtual_root_path'], ()) self.assertRaises( KeyError, adapter, DummyRequest({'PATH_INFO': '/ob3'}) ) try: config.begin() self.assertEqual(find_resource(None, '/ob1'), ob1) finally: config.end() def test_testing_add_subscriber_single(self): config = self._makeOne(autocommit=True) L = config.testing_add_subscriber(IDummy) event = DummyEvent() config.registry.notify(event) self.assertEqual(len(L), 1) self.assertEqual(L[0], event) config.registry.notify(object()) self.assertEqual(len(L), 1) def test_testing_add_subscriber_dottedname(self): config = self._makeOne(autocommit=True) L = config.testing_add_subscriber('tests.test_config.IDummy') event = DummyEvent() config.registry.notify(event) self.assertEqual(len(L), 1) self.assertEqual(L[0], event) config.registry.notify(object()) self.assertEqual(len(L), 1) def test_testing_add_subscriber_multiple(self): from zope.interface import Interface config = self._makeOne(autocommit=True) L = config.testing_add_subscriber((Interface, IDummy)) event = DummyEvent() event.object = 'foo' # the below is the equivalent of z.c.event.objectEventNotify(event) config.registry.subscribers((event.object, event), None) self.assertEqual(len(L), 2) self.assertEqual(L[0], 'foo') self.assertEqual(L[1], event) def test_testing_add_subscriber_defaults(self): config = self._makeOne(autocommit=True) L = config.testing_add_subscriber() event = object() config.registry.notify(event) self.assertEqual(L[-1], event) event2 = object() config.registry.notify(event2) self.assertEqual(L[-1], event2) def test_testing_add_renderer(self): config = self._makeOne(autocommit=True) renderer = config.testing_add_renderer('templates/foo.pt') from pyramid.testing import DummyTemplateRenderer self.assertTrue(isinstance(renderer, DummyTemplateRenderer)) from pyramid.renderers import render_to_response # must provide request to pass in registry (this is a functest) request = DummyRequest() request.registry = config.registry render_to_response( 'templates/foo.pt', {'foo': 1, 'bar': 2}, request=request ) renderer.assert_(foo=1) renderer.assert_(bar=2) renderer.assert_(request=request) def test_testing_add_renderer_twice(self): config = self._makeOne(autocommit=True) renderer1 = config.testing_add_renderer('templates/foo.pt') renderer2 = config.testing_add_renderer('templates/bar.pt') from pyramid.testing import DummyTemplateRenderer self.assertTrue(isinstance(renderer1, DummyTemplateRenderer)) self.assertTrue(isinstance(renderer2, DummyTemplateRenderer)) from pyramid.renderers import render_to_response # must provide request to pass in registry (this is a functest) request = DummyRequest() request.registry = config.registry render_to_response( 'templates/foo.pt', {'foo': 1, 'bar': 2}, request=request ) renderer1.assert_(foo=1) renderer1.assert_(bar=2) renderer1.assert_(request=request) render_to_response( 'templates/bar.pt', {'foo': 1, 'bar': 2}, request=request ) renderer2.assert_(foo=1) renderer2.assert_(bar=2) renderer2.assert_(request=request) def test_testing_add_renderer_explicitrenderer(self): config = self._makeOne(autocommit=True) class E(Exception): pass def renderer(kw, system): self.assertEqual(kw, {'foo': 1, 'bar': 2}) raise E renderer = config.testing_add_renderer('templates/foo.pt', renderer) from pyramid.renderers import render_to_response # must provide request to pass in registry (this is a functest) request = DummyRequest() request.registry = config.registry try: render_to_response( 'templates/foo.pt', {'foo': 1, 'bar': 2}, request=request ) except E: pass else: # pragma: no cover raise AssertionError def test_testing_add_template(self): config = self._makeOne(autocommit=True) renderer = config.testing_add_template('templates/foo.pt') from pyramid.testing import DummyTemplateRenderer self.assertTrue(isinstance(renderer, DummyTemplateRenderer)) from pyramid.renderers import render_to_response # must provide request to pass in registry (this is a functest) request = DummyRequest() request.registry = config.registry render_to_response( 'templates/foo.pt', dict(foo=1, bar=2), request=request ) renderer.assert_(foo=1) renderer.assert_(bar=2) renderer.assert_(request=request) @implementer(IDummy) class DummyEvent: pass class DummyRequest(AuthenticationAPIMixin, AuthorizationAPIMixin): def __init__(self, environ=None): if environ is None: environ = {} self.environ = environ