Michael Merickel
2018-10-26 4149922e64aecf2a213f8efb120cd2d61fed3eb7
commit | author | age
eb6144 1 import unittest
10ddb6 2 from zope.interface import implementer
eb6144 3
7975a1 4 from pyramid.compat import text_
3c2f95 5 from pyramid.security import AuthenticationAPIMixin, AuthorizationAPIMixin
dd3cc8 6 from . import IDummy
eb6144 7
0c29cf 8
eb6144 9 class TestingConfiguratorMixinTests(unittest.TestCase):
CM 10     def _makeOne(self, *arg, **kw):
11         from pyramid.config import Configurator
0c29cf 12
eb6144 13         config = Configurator(*arg, **kw)
CM 14         return config
15
16     def test_testing_securitypolicy(self):
17         from pyramid.testing import DummySecurityPolicy
0c29cf 18
eb6144 19         config = self._makeOne(autocommit=True)
0c29cf 20         config.testing_securitypolicy(
MM 21             'user', ('group1', 'group2'), permissive=False
22         )
eb6144 23         from pyramid.interfaces import IAuthenticationPolicy
CM 24         from pyramid.interfaces import IAuthorizationPolicy
0c29cf 25
eb6144 26         ut = config.registry.getUtility(IAuthenticationPolicy)
CM 27         self.assertTrue(isinstance(ut, DummySecurityPolicy))
28         ut = config.registry.getUtility(IAuthorizationPolicy)
29         self.assertEqual(ut.userid, 'user')
30         self.assertEqual(ut.groupids, ('group1', 'group2'))
31         self.assertEqual(ut.permissive, False)
32
1273d5 33     def test_testing_securitypolicy_remember_result(self):
0dcd56 34         from pyramid.security import remember
0c29cf 35
1273d5 36         config = self._makeOne(autocommit=True)
CM 37         pol = config.testing_securitypolicy(
0c29cf 38             'user',
MM 39             ('group1', 'group2'),
40             permissive=False,
41             remember_result=True,
42         )
1273d5 43         request = DummyRequest()
CM 44         request.registry = config.registry
0dcd56 45         val = remember(request, 'fred')
1273d5 46         self.assertEqual(pol.remembered, 'fred')
CM 47         self.assertEqual(val, True)
48
49     def test_testing_securitypolicy_forget_result(self):
0dcd56 50         from pyramid.security import forget
0c29cf 51
1273d5 52         config = self._makeOne(autocommit=True)
CM 53         pol = config.testing_securitypolicy(
0c29cf 54             'user', ('group1', 'group2'), permissive=False, forget_result=True
MM 55         )
1273d5 56         request = DummyRequest()
CM 57         request.registry = config.registry
0dcd56 58         val = forget(request)
1273d5 59         self.assertEqual(pol.forgotten, True)
0dcd56 60         self.assertEqual(val, True)
1273d5 61
eb6144 62     def test_testing_resources(self):
CM 63         from pyramid.traversal import find_resource
64         from pyramid.interfaces import ITraverser
0c29cf 65
eb6144 66         ob1 = object()
CM 67         ob2 = object()
0c29cf 68         resources = {'/ob1': ob1, '/ob2': ob2}
eb6144 69         config = self._makeOne(autocommit=True)
CM 70         config.testing_resources(resources)
71         adapter = config.registry.getAdapter(None, ITraverser)
0c29cf 72         result = adapter(DummyRequest({'PATH_INFO': '/ob1'}))
eb6144 73         self.assertEqual(result['context'], ob1)
CM 74         self.assertEqual(result['view_name'], '')
75         self.assertEqual(result['subpath'], ())
7975a1 76         self.assertEqual(result['traversed'], (text_('ob1'),))
eb6144 77         self.assertEqual(result['virtual_root'], ob1)
CM 78         self.assertEqual(result['virtual_root_path'], ())
0c29cf 79         result = adapter(DummyRequest({'PATH_INFO': '/ob2'}))
eb6144 80         self.assertEqual(result['context'], ob2)
CM 81         self.assertEqual(result['view_name'], '')
82         self.assertEqual(result['subpath'], ())
7975a1 83         self.assertEqual(result['traversed'], (text_('ob2'),))
eb6144 84         self.assertEqual(result['virtual_root'], ob2)
CM 85         self.assertEqual(result['virtual_root_path'], ())
0c29cf 86         self.assertRaises(
MM 87             KeyError, adapter, DummyRequest({'PATH_INFO': '/ob3'})
88         )
eb6144 89         try:
CM 90             config.begin()
91             self.assertEqual(find_resource(None, '/ob1'), ob1)
92         finally:
93             config.end()
94
95     def test_testing_add_subscriber_single(self):
96         config = self._makeOne(autocommit=True)
97         L = config.testing_add_subscriber(IDummy)
98         event = DummyEvent()
99         config.registry.notify(event)
100         self.assertEqual(len(L), 1)
101         self.assertEqual(L[0], event)
102         config.registry.notify(object())
103         self.assertEqual(len(L), 1)
104
105     def test_testing_add_subscriber_dottedname(self):
106         config = self._makeOne(autocommit=True)
e4c057 107         L = config.testing_add_subscriber('tests.test_config.IDummy')
eb6144 108         event = DummyEvent()
CM 109         config.registry.notify(event)
110         self.assertEqual(len(L), 1)
111         self.assertEqual(L[0], event)
112         config.registry.notify(object())
113         self.assertEqual(len(L), 1)
114
115     def test_testing_add_subscriber_multiple(self):
116         from zope.interface import Interface
0c29cf 117
eb6144 118         config = self._makeOne(autocommit=True)
CM 119         L = config.testing_add_subscriber((Interface, IDummy))
120         event = DummyEvent()
121         event.object = 'foo'
122         # the below is the equivalent of z.c.event.objectEventNotify(event)
123         config.registry.subscribers((event.object, event), None)
124         self.assertEqual(len(L), 2)
125         self.assertEqual(L[0], 'foo')
126         self.assertEqual(L[1], event)
127
128     def test_testing_add_subscriber_defaults(self):
129         config = self._makeOne(autocommit=True)
130         L = config.testing_add_subscriber()
131         event = object()
132         config.registry.notify(event)
133         self.assertEqual(L[-1], event)
134         event2 = object()
135         config.registry.notify(event2)
136         self.assertEqual(L[-1], event2)
137
138     def test_testing_add_renderer(self):
139         config = self._makeOne(autocommit=True)
140         renderer = config.testing_add_renderer('templates/foo.pt')
141         from pyramid.testing import DummyTemplateRenderer
0c29cf 142
eb6144 143         self.assertTrue(isinstance(renderer, DummyTemplateRenderer))
CM 144         from pyramid.renderers import render_to_response
0c29cf 145
eb6144 146         # must provide request to pass in registry (this is a functest)
CM 147         request = DummyRequest()
148         request.registry = config.registry
149         render_to_response(
0c29cf 150             'templates/foo.pt', {'foo': 1, 'bar': 2}, request=request
MM 151         )
eb6144 152         renderer.assert_(foo=1)
CM 153         renderer.assert_(bar=2)
154         renderer.assert_(request=request)
155
156     def test_testing_add_renderer_twice(self):
157         config = self._makeOne(autocommit=True)
158         renderer1 = config.testing_add_renderer('templates/foo.pt')
159         renderer2 = config.testing_add_renderer('templates/bar.pt')
160         from pyramid.testing import DummyTemplateRenderer
0c29cf 161
eb6144 162         self.assertTrue(isinstance(renderer1, DummyTemplateRenderer))
CM 163         self.assertTrue(isinstance(renderer2, DummyTemplateRenderer))
164         from pyramid.renderers import render_to_response
0c29cf 165
eb6144 166         # must provide request to pass in registry (this is a functest)
CM 167         request = DummyRequest()
168         request.registry = config.registry
169         render_to_response(
0c29cf 170             'templates/foo.pt', {'foo': 1, 'bar': 2}, request=request
MM 171         )
eb6144 172         renderer1.assert_(foo=1)
CM 173         renderer1.assert_(bar=2)
174         renderer1.assert_(request=request)
175         render_to_response(
0c29cf 176             'templates/bar.pt', {'foo': 1, 'bar': 2}, request=request
MM 177         )
eb6144 178         renderer2.assert_(foo=1)
CM 179         renderer2.assert_(bar=2)
180         renderer2.assert_(request=request)
181
182     def test_testing_add_renderer_explicitrenderer(self):
183         config = self._makeOne(autocommit=True)
0c29cf 184
MM 185         class E(Exception):
186             pass
187
eb6144 188         def renderer(kw, system):
0c29cf 189             self.assertEqual(kw, {'foo': 1, 'bar': 2})
eb6144 190             raise E
0c29cf 191
eb6144 192         renderer = config.testing_add_renderer('templates/foo.pt', renderer)
CM 193         from pyramid.renderers import render_to_response
0c29cf 194
eb6144 195         # must provide request to pass in registry (this is a functest)
CM 196         request = DummyRequest()
197         request.registry = config.registry
198         try:
199             render_to_response(
0c29cf 200                 'templates/foo.pt', {'foo': 1, 'bar': 2}, request=request
MM 201             )
eb6144 202         except E:
CM 203             pass
0c29cf 204         else:  # pragma: no cover
eb6144 205             raise AssertionError
CM 206
207     def test_testing_add_template(self):
208         config = self._makeOne(autocommit=True)
209         renderer = config.testing_add_template('templates/foo.pt')
210         from pyramid.testing import DummyTemplateRenderer
0c29cf 211
eb6144 212         self.assertTrue(isinstance(renderer, DummyTemplateRenderer))
CM 213         from pyramid.renderers import render_to_response
0c29cf 214
eb6144 215         # must provide request to pass in registry (this is a functest)
CM 216         request = DummyRequest()
217         request.registry = config.registry
0c29cf 218         render_to_response(
MM 219             'templates/foo.pt', dict(foo=1, bar=2), request=request
220         )
eb6144 221         renderer.assert_(foo=1)
CM 222         renderer.assert_(bar=2)
223         renderer.assert_(request=request)
0c29cf 224
MM 225
3b7334 226 @implementer(IDummy)
eb6144 227 class DummyEvent:
3b7334 228     pass
0c29cf 229
eb6144 230
3c2f95 231 class DummyRequest(AuthenticationAPIMixin, AuthorizationAPIMixin):
eb6144 232     def __init__(self, environ=None):
CM 233         if environ is None:
234             environ = {}
235         self.environ = environ