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