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 |