Michael Merickel
2018-10-15 0c29cf2df41600d3906d521c72991c7686018b71
commit | author | age
deb0dc 1 import unittest
6c3f4f 2 from zope.component import getSiteManager
54533f 3 from pyramid import testing
e8b295 4
0c29cf 5
927acd 6 class TestDummyRootFactory(unittest.TestCase):
CM 7     def _makeOne(self, environ):
b60bdb 8         from pyramid.testing import DummyRootFactory
0c29cf 9
927acd 10         return DummyRootFactory(environ)
CM 11
12     def test_it(self):
0c29cf 13         environ = {'bfg.routes.matchdict': {'a': 1}}
927acd 14         factory = self._makeOne(environ)
CM 15         self.assertEqual(factory.a, 1)
0c29cf 16
927acd 17
a1a9fb 18 class TestDummySecurityPolicy(unittest.TestCase):
deb0dc 19     def _getTargetClass(self):
b60bdb 20         from pyramid.testing import DummySecurityPolicy
0c29cf 21
a1a9fb 22         return DummySecurityPolicy
deb0dc 23
a1a9fb 24     def _makeOne(self, userid=None, groupids=(), permissive=True):
deb0dc 25         klass = self._getTargetClass()
a1a9fb 26         return klass(userid, groupids, permissive)
deb0dc 27
CM 28     def test_authenticated_userid(self):
29         policy = self._makeOne('user')
7ec9e7 30         self.assertEqual(policy.authenticated_userid(None), 'user')
2526d8 31
CM 32     def test_unauthenticated_userid(self):
33         policy = self._makeOne('user')
34         self.assertEqual(policy.unauthenticated_userid(None), 'user')
35
deb0dc 36     def test_effective_principals_userid(self):
CM 37         policy = self._makeOne('user', ('group1',))
b60bdb 38         from pyramid.security import Everyone
CM 39         from pyramid.security import Authenticated
0c29cf 40
MM 41         self.assertEqual(
42             policy.effective_principals(None),
43             [Everyone, Authenticated, 'user', 'group1'],
44         )
deb0dc 45
CM 46     def test_effective_principals_nouserid(self):
47         policy = self._makeOne()
b60bdb 48         from pyramid.security import Everyone
0c29cf 49
7ec9e7 50         self.assertEqual(policy.effective_principals(None), [Everyone])
deb0dc 51
CM 52     def test_permits(self):
53         policy = self._makeOne()
54         self.assertEqual(policy.permits(None, None, None), True)
0c29cf 55
deb0dc 56     def test_principals_allowed_by_permission(self):
CM 57         policy = self._makeOne('user', ('group1',))
b60bdb 58         from pyramid.security import Everyone
CM 59         from pyramid.security import Authenticated
0c29cf 60
a1a9fb 61         result = policy.principals_allowed_by_permission(None, None)
CM 62         self.assertEqual(result, [Everyone, Authenticated, 'user', 'group1'])
deb0dc 63
a1a9fb 64     def test_forget(self):
deb0dc 65         policy = self._makeOne()
7ec9e7 66         self.assertEqual(policy.forget(None), [])
0c29cf 67
a1a9fb 68     def test_remember(self):
deb0dc 69         policy = self._makeOne()
7ec9e7 70         self.assertEqual(policy.remember(None, None), [])
0c29cf 71
a1a9fb 72
3e2f12 73 class TestDummyResource(unittest.TestCase):
deb0dc 74     def _getTargetClass(self):
3e2f12 75         from pyramid.testing import DummyResource
0c29cf 76
3e2f12 77         return DummyResource
deb0dc 78
6a7914 79     def _makeOne(self, name=None, parent=None, **kw):
deb0dc 80         klass = self._getTargetClass()
6a7914 81         return klass(name, parent, **kw)
deb0dc 82
0c29cf 83     def test__setitem__and__getitem__and__delitem__and__contains__and_get(
MM 84         self
85     ):
deb0dc 86         class Dummy:
CM 87             pass
0c29cf 88
deb0dc 89         dummy = Dummy()
3e2f12 90         resource = self._makeOne()
CM 91         resource['abc'] = dummy
deb0dc 92         self.assertEqual(dummy.__name__, 'abc')
3e2f12 93         self.assertEqual(dummy.__parent__, resource)
CM 94         self.assertEqual(resource['abc'], dummy)
95         self.assertEqual(resource.get('abc'), dummy)
96         self.assertRaises(KeyError, resource.__getitem__, 'none')
a1d395 97         self.assertTrue('abc' in resource)
3e2f12 98         del resource['abc']
a1d395 99         self.assertFalse('abc' in resource)
3e2f12 100         self.assertEqual(resource.get('abc', 'foo'), 'foo')
CM 101         self.assertEqual(resource.get('abc'), None)
deb0dc 102
6a7914 103     def test_extra_params(self):
3e2f12 104         resource = self._makeOne(foo=1)
CM 105         self.assertEqual(resource.foo, 1)
0c29cf 106
6a7914 107     def test_clone(self):
3e2f12 108         resource = self._makeOne('name', 'parent', foo=1, bar=2)
CM 109         clone = resource.clone('name2', 'parent2', bar=1)
6a7914 110         self.assertEqual(clone.bar, 1)
CM 111         self.assertEqual(clone.__name__, 'name2')
112         self.assertEqual(clone.__parent__, 'parent2')
113         self.assertEqual(clone.foo, 1)
114
b0a241 115     def test_keys_items_values_len(self):
e8ebc2 116         class Dummy:
CM 117             pass
0c29cf 118
3e2f12 119         resource = self._makeOne()
CM 120         resource['abc'] = Dummy()
121         resource['def'] = Dummy()
475532 122         L = list
CM 123         self.assertEqual(L(resource.values()), L(resource.subs.values()))
124         self.assertEqual(L(resource.items()), L(resource.subs.items()))
125         self.assertEqual(L(resource.keys()), L(resource.subs.keys()))
3e2f12 126         self.assertEqual(len(resource), 2)
b0a241 127
CM 128     def test_nonzero(self):
3e2f12 129         resource = self._makeOne()
CM 130         self.assertEqual(resource.__nonzero__(), True)
e8ebc2 131
050b71 132     def test_bool(self):
CM 133         resource = self._makeOne()
134         self.assertEqual(resource.__bool__(), True)
0c29cf 135
ab4e7b 136     def test_ctor_with__provides__(self):
3e2f12 137         resource = self._makeOne(__provides__=IDummy)
a1d395 138         self.assertTrue(IDummy.providedBy(resource))
ab4e7b 139
0c29cf 140
a9a8a2 141 class TestDummyRequest(unittest.TestCase):
CM 142     def _getTargetClass(self):
b60bdb 143         from pyramid.testing import DummyRequest
0c29cf 144
a9a8a2 145         return DummyRequest
CM 146
147     def _makeOne(self, *arg, **kw):
148         return self._getTargetClass()(*arg, **kw)
149
3ede8b 150     def test_params(self):
0c29cf 151         request = self._makeOne(
MM 152             params={'say': 'Hello'},
153             environ={'PATH_INFO': '/foo'},
154             headers={'X-Foo': 'YUP'},
155         )
a9a8a2 156         self.assertEqual(request.params['say'], 'Hello')
CM 157         self.assertEqual(request.GET['say'], 'Hello')
158         self.assertEqual(request.POST['say'], 'Hello')
159         self.assertEqual(request.headers['X-Foo'], 'YUP')
160         self.assertEqual(request.environ['PATH_INFO'], '/foo')
3ede8b 161
TS 162     def test_defaults(self):
b60bdb 163         from pyramid.threadlocal import get_current_registry
51b2e8 164         from pyramid.testing import DummySession
0c29cf 165
3ede8b 166         request = self._makeOne()
TS 167         self.assertEqual(request.method, 'GET')
168         self.assertEqual(request.application_url, 'http://example.com')
169         self.assertEqual(request.host_url, 'http://example.com')
170         self.assertEqual(request.path_url, 'http://example.com')
171         self.assertEqual(request.url, 'http://example.com')
172         self.assertEqual(request.host, 'example.com:80')
173         self.assertEqual(request.content_length, 0)
174         self.assertEqual(request.environ.get('PATH_INFO'), None)
175         self.assertEqual(request.headers.get('X-Foo'), None)
176         self.assertEqual(request.params.get('foo'), None)
177         self.assertEqual(request.GET.get('foo'), None)
178         self.assertEqual(request.POST.get('foo'), None)
179         self.assertEqual(request.cookies.get('type'), None)
180         self.assertEqual(request.path, '/')
181         self.assertEqual(request.path_info, '/')
182         self.assertEqual(request.script_name, '')
183         self.assertEqual(request.path_qs, '')
184         self.assertEqual(request.view_name, '')
1cd598 185         self.assertEqual(request.subpath, ())
3ede8b 186         self.assertEqual(request.context, None)
1cd598 187         self.assertEqual(request.root, None)
CM 188         self.assertEqual(request.virtual_root, None)
189         self.assertEqual(request.virtual_root_path, ())
44b16b 190         self.assertEqual(request.registry, get_current_registry())
51b2e8 191         self.assertEqual(request.session.__class__, DummySession)
3ede8b 192
6801b5 193     def test_params_explicit(self):
0c29cf 194         request = self._makeOne(params={'foo': 'bar'})
6801b5 195         self.assertEqual(request.params['foo'], 'bar')
TS 196         self.assertEqual(request.GET['foo'], 'bar')
197         self.assertEqual(request.POST['foo'], 'bar')
198
3ede8b 199     def test_environ_explicit(self):
0c29cf 200         request = self._makeOne(environ={'PATH_INFO': '/foo'})
3ede8b 201         self.assertEqual(request.environ['PATH_INFO'], '/foo')
TS 202
203     def test_headers_explicit(self):
0c29cf 204         request = self._makeOne(headers={'X-Foo': 'YUP'})
3ede8b 205         self.assertEqual(request.headers['X-Foo'], 'YUP')
TS 206
207     def test_path_explicit(self):
0c29cf 208         request = self._makeOne(path='/abc')
3ede8b 209         self.assertEqual(request.path, '/abc')
TS 210
211     def test_cookies_explicit(self):
0c29cf 212         request = self._makeOne(cookies={'type': 'gingersnap'})
3ede8b 213         self.assertEqual(request.cookies['type'], 'gingersnap')
TS 214
6801b5 215     def test_post_explicit(self):
3ede8b 216         POST = {'foo': 'bar', 'baz': 'qux'}
TS 217         request = self._makeOne(post=POST)
218         self.assertEqual(request.method, 'POST')
219         self.assertEqual(request.POST, POST)
6801b5 220         # N.B.:  Unlike a normal request, passing 'post' should *not* put
TS 221         #        explict POST data into params: doing so masks a possible
222         #        XSS bug in the app.  Tests for apps which don't care about
223         #        the distinction should just use 'params'.
3ede8b 224         self.assertEqual(request.params, {})
TS 225
6801b5 226     def test_post_empty_shadows_params(self):
TS 227         request = self._makeOne(params={'foo': 'bar'}, post={})
228         self.assertEqual(request.method, 'POST')
229         self.assertEqual(request.params.get('foo'), 'bar')
230         self.assertEqual(request.POST.get('foo'), None)
231
232     def test_kwargs(self):
0c29cf 233         request = self._makeOne(water=1)
6801b5 234         self.assertEqual(request.water, 1)
TS 235
844e98 236     def test_add_response_callback(self):
CM 237         request = self._makeOne()
238         request.add_response_callback(1)
39a03e 239         self.assertEqual(list(request.response_callbacks), [1])
8af47b 240
CM 241     def test_registry_is_config_registry_when_setup_is_called_after_ctor(self):
242         # see https://github.com/Pylons/pyramid/issues/165
243         from pyramid.registry import Registry
244         from pyramid.config import Configurator
0c29cf 245
8af47b 246         request = self._makeOne()
CM 247         try:
248             registry = Registry('this_test')
249             config = Configurator(registry=registry)
250             config.begin()
a1d395 251             self.assertTrue(request.registry is registry)
8af47b 252         finally:
CM 253             config.end()
844e98 254
a7b1a9 255     def test_set_registry(self):
CM 256         request = self._makeOne()
257         request.registry = 'abc'
258         self.assertEqual(request.registry, 'abc')
259
260     def test_del_registry(self):
261         # see https://github.com/Pylons/pyramid/issues/165
262         from pyramid.registry import Registry
263         from pyramid.config import Configurator
0c29cf 264
a7b1a9 265         request = self._makeOne()
CM 266         request.registry = 'abc'
267         self.assertEqual(request.registry, 'abc')
268         del request.registry
269         try:
270             registry = Registry('this_test')
271             config = Configurator(registry=registry)
272             config.begin()
a1d395 273             self.assertTrue(request.registry is registry)
a7b1a9 274         finally:
CM 275             config.end()
276
277     def test_response_with_responsefactory(self):
278         from pyramid.registry import Registry
279         from pyramid.interfaces import IResponseFactory
0c29cf 280
a7b1a9 281         registry = Registry('this_test')
0c29cf 282
a7b1a9 283         class ResponseFactory(object):
CM 284             pass
0c29cf 285
MM 286         registry.registerUtility(lambda r: ResponseFactory(), IResponseFactory)
a7b1a9 287         request = self._makeOne()
CM 288         request.registry = registry
289         resp = request.response
290         self.assertEqual(resp.__class__, ResponseFactory)
0c29cf 291         self.assertTrue(request.response is resp)  # reified
a7b1a9 292
CM 293     def test_response_without_responsefactory(self):
294         from pyramid.registry import Registry
295         from pyramid.response import Response
0c29cf 296
a7b1a9 297         registry = Registry('this_test')
CM 298         request = self._makeOne()
299         request.registry = registry
300         resp = request.response
301         self.assertEqual(resp.__class__, Response)
0c29cf 302         self.assertTrue(request.response is resp)  # reified
MM 303
a7b1a9 304
7d32df 305 class TestDummyTemplateRenderer(unittest.TestCase):
0c29cf 306     def _getTargetClass(self,):
b60bdb 307         from pyramid.testing import DummyTemplateRenderer
0c29cf 308
7d32df 309         return DummyTemplateRenderer
CM 310
e02ba1 311     def _makeOne(self, string_response=''):
CM 312         return self._getTargetClass()(string_response=string_response)
7d32df 313
CM 314     def test_implementation(self):
315         renderer = self._makeOne()
6eca54 316         impl = renderer.implementation()
CM 317         impl(a=1, b=2)
250c02 318         self.assertEqual(renderer._implementation._received['a'], 1)
CM 319         self.assertEqual(renderer._implementation._received['b'], 2)
7d32df 320
CM 321     def test_getattr(self):
322         renderer = self._makeOne()
0c29cf 323         renderer({'a': 1})
7d32df 324         self.assertEqual(renderer.a, 1)
CM 325         self.assertRaises(AttributeError, renderer.__getattr__, 'b')
326
327     def test_assert_(self):
328         renderer = self._makeOne()
0c29cf 329         renderer({'a': 1, 'b': 2})
7d32df 330         self.assertRaises(AssertionError, renderer.assert_, c=1)
CM 331         self.assertRaises(AssertionError, renderer.assert_, b=3)
a1d395 332         self.assertTrue(renderer.assert_(a=1, b=2))
0c29cf 333
e02ba1 334     def test_nondefault_string_response(self):
CM 335         renderer = self._makeOne('abc')
0c29cf 336         result = renderer({'a': 1, 'b': 2})
e02ba1 337         self.assertEqual(result, 'abc')
0c29cf 338
d322ac 339
d0b398 340 class Test_setUp(unittest.TestCase):
CM 341     def _callFUT(self, **kw):
b60bdb 342         from pyramid.testing import setUp
0c29cf 343
d0b398 344         return setUp(**kw)
d322ac 345
d97398 346     def tearDown(self):
CM 347         from pyramid.threadlocal import manager
0c29cf 348
d97398 349         manager.clear()
6c3f4f 350         getSiteManager.reset()
d97398 351
CM 352     def _assertSMHook(self, hook):
6c3f4f 353         result = getSiteManager.sethook(None)
MM 354         self.assertEqual(result, hook)
d97398 355
d0b398 356     def test_it_defaults(self):
b60bdb 357         from pyramid.threadlocal import manager
CM 358         from pyramid.threadlocal import get_current_registry
359         from pyramid.registry import Registry
0c29cf 360
d0b398 361         old = True
CM 362         manager.push(old)
d97398 363         config = self._callFUT()
CM 364         current = manager.get()
365         self.assertFalse(current is old)
366         self.assertEqual(config.registry, current['registry'])
367         self.assertEqual(current['registry'].__class__, Registry)
368         self.assertEqual(current['request'], None)
dd3cc8 369         self.assertEqual(config.package.__name__, 'tests')
d97398 370         self._assertSMHook(get_current_registry)
d322ac 371
d0b398 372     def test_it_with_registry(self):
c0d4a1 373         from pyramid.registry import Registry
b60bdb 374         from pyramid.threadlocal import manager
0c29cf 375
c0d4a1 376         registry = Registry()
d97398 377         self._callFUT(registry=registry)
CM 378         current = manager.get()
379         self.assertEqual(current['registry'], registry)
0c29cf 380
d0b398 381     def test_it_with_request(self):
b60bdb 382         from pyramid.threadlocal import manager
0c29cf 383
d0b398 384         request = object()
d97398 385         self._callFUT(request=request)
CM 386         current = manager.get()
387         self.assertEqual(current['request'], request)
d0b398 388
d24055 389     def test_it_with_package(self):
MM 390         config = self._callFUT(package='pyramid')
391         self.assertEqual(config.package.__name__, 'pyramid')
392
d0b398 393     def test_it_with_hook_zca_false(self):
c0d4a1 394         from pyramid.registry import Registry
0c29cf 395
c0d4a1 396         registry = Registry()
d97398 397         self._callFUT(registry=registry, hook_zca=False)
6c3f4f 398         sm = getSiteManager()
MM 399         self.assertFalse(sm is registry)
d0b398 400
2a13b0 401     def test_it_with_settings_passed_explicit_registry(self):
CM 402         from pyramid.registry import Registry
0c29cf 403
2a13b0 404         registry = Registry()
d97398 405         self._callFUT(registry=registry, hook_zca=False, settings=dict(a=1))
CM 406         self.assertEqual(registry.settings['a'], 1)
0c29cf 407
2a13b0 408     def test_it_with_settings_passed_implicit_registry(self):
d97398 409         config = self._callFUT(hook_zca=False, settings=dict(a=1))
CM 410         self.assertEqual(config.registry.settings['a'], 1)
2a13b0 411
0c29cf 412
d0b398 413 class Test_cleanUp(Test_setUp):
CM 414     def _callFUT(self, *arg, **kw):
b60bdb 415         from pyramid.testing import cleanUp
0c29cf 416
d0b398 417         return cleanUp(*arg, **kw)
0c29cf 418
MM 419
d0b398 420 class Test_tearDown(unittest.TestCase):
CM 421     def _callFUT(self, **kw):
b60bdb 422         from pyramid.testing import tearDown
0c29cf 423
d0b398 424         return tearDown(**kw)
d322ac 425
d97398 426     def tearDown(self):
CM 427         from pyramid.threadlocal import manager
0c29cf 428
d97398 429         manager.clear()
6c3f4f 430         getSiteManager.reset()
d97398 431
CM 432     def _assertSMHook(self, hook):
6c3f4f 433         result = getSiteManager.sethook(None)
MM 434         self.assertEqual(result, hook)
d97398 435
CM 436     def _setSMHook(self, hook):
6c3f4f 437         getSiteManager.sethook(hook)
d97398 438
d0b398 439     def test_defaults(self):
b60bdb 440         from pyramid.threadlocal import manager
0c29cf 441
d0b398 442         registry = DummyRegistry()
0c29cf 443         old = {'registry': registry}
d0b398 444         hook = lambda *arg: None
CM 445         try:
d97398 446             self._setSMHook(hook)
d0b398 447             manager.push(old)
CM 448             self._callFUT()
449             current = manager.get()
450             self.assertNotEqual(current, old)
451             self.assertEqual(registry.inited, 2)
452         finally:
6c3f4f 453             result = getSiteManager.sethook(None)
MM 454             self.assertNotEqual(result, hook)
d0b398 455
7ac5aa 456     def test_registry_cannot_be_inited(self):
b60bdb 457         from pyramid.threadlocal import manager
0c29cf 458
7ac5aa 459         registry = DummyRegistry()
0c29cf 460
7ac5aa 461         def raiseit(name):
CM 462             raise TypeError
0c29cf 463
7ac5aa 464         registry.__init__ = raiseit
0c29cf 465         old = {'registry': registry}
7ac5aa 466         try:
CM 467             manager.push(old)
0c29cf 468             self._callFUT()  # doesn't blow up
7ac5aa 469             current = manager.get()
CM 470             self.assertNotEqual(current, old)
471             self.assertEqual(registry.inited, 1)
472         finally:
473             manager.clear()
474
d0b398 475     def test_unhook_zc_false(self):
CM 476         hook = lambda *arg: None
477         try:
d97398 478             self._setSMHook(hook)
d0b398 479             self._callFUT(unhook_zca=False)
CM 480         finally:
d97398 481             self._assertSMHook(hook)
d0b398 482
0c29cf 483
250c02 484 class TestDummyRendererFactory(unittest.TestCase):
CM 485     def _makeOne(self, name, factory):
b60bdb 486         from pyramid.testing import DummyRendererFactory
0c29cf 487
250c02 488         return DummyRendererFactory(name, factory)
CM 489
490     def test_add_no_colon(self):
491         f = self._makeOne('name', None)
492         f.add('spec', 'renderer')
493         self.assertEqual(f.renderers['spec'], 'renderer')
494
495     def test_add_with_colon(self):
496         f = self._makeOne('name', None)
497         f.add('spec:spec2', 'renderer')
498         self.assertEqual(f.renderers['spec:spec2'], 'renderer')
499         self.assertEqual(f.renderers['spec2'], 'renderer')
500
501     def test_call(self):
502         f = self._makeOne('name', None)
503         f.renderers['spec'] = 'renderer'
0c29cf 504         info = DummyRendererInfo({'name': 'spec'})
3d9dd0 505         self.assertEqual(f(info), 'renderer')
0c29cf 506
250c02 507     def test_call2(self):
CM 508         f = self._makeOne('name', None)
509         f.renderers['spec'] = 'renderer'
0c29cf 510         info = DummyRendererInfo({'name': 'spec:spec'})
3d9dd0 511         self.assertEqual(f(info), 'renderer')
250c02 512
CM 513     def test_call3(self):
514         def factory(spec):
515             return 'renderer'
0c29cf 516
250c02 517         f = self._makeOne('name', factory)
0c29cf 518         info = DummyRendererInfo({'name': 'spec'})
3d9dd0 519         self.assertEqual(f(info), 'renderer')
250c02 520
CM 521     def test_call_miss(self):
522         f = self._makeOne('name', None)
0c29cf 523         info = DummyRendererInfo({'name': 'spec'})
3d9dd0 524         self.assertRaises(KeyError, f, info)
0c29cf 525
250c02 526
CM 527 class TestMockTemplate(unittest.TestCase):
528     def _makeOne(self, response):
b60bdb 529         from pyramid.testing import MockTemplate
0c29cf 530
250c02 531         return MockTemplate(response)
CM 532
533     def test_getattr(self):
534         template = self._makeOne(None)
535         self.assertEqual(template.foo, template)
536
537     def test_getitem(self):
538         template = self._makeOne(None)
539         self.assertEqual(template['foo'], template)
540
541     def test_call(self):
542         template = self._makeOne('123')
543         self.assertEqual(template(), '123')
544
0c29cf 545
35c5a3 546 class Test_skip_on(unittest.TestCase):
CM 547     def setUp(self):
548         from pyramid.testing import skip_on
0c29cf 549
35c5a3 550         self.os_name = skip_on.os_name
CM 551         skip_on.os_name = 'wrong'
552
553     def tearDown(self):
554         from pyramid.testing import skip_on
0c29cf 555
35c5a3 556         skip_on.os_name = self.os_name
0c29cf 557
35c5a3 558     def _callFUT(self, *platforms):
CM 559         from pyramid.testing import skip_on
0c29cf 560
35c5a3 561         return skip_on(*platforms)
CM 562
563     def test_wrong_platform(self):
0c29cf 564         def foo():
MM 565             return True
566
35c5a3 567         decorated = self._callFUT('wrong')(foo)
CM 568         self.assertEqual(decorated(), None)
0c29cf 569
35c5a3 570     def test_ok_platform(self):
0c29cf 571         def foo():
MM 572             return True
573
35c5a3 574         decorated = self._callFUT('ok')(foo)
CM 575         self.assertEqual(decorated(), True)
0c29cf 576
35c5a3 577
51b2e8 578 class TestDummySession(unittest.TestCase):
CM 579     def _makeOne(self):
580         from pyramid.testing import DummySession
0c29cf 581
51b2e8 582         return DummySession()
CM 583
0c29cf 584     @testing.skip_on(
MM 585         'pypy'
586     )  # see https://github.com/Pylons/pyramid/issues/3237
51b2e8 587     def test_instance_conforms(self):
CM 588         from zope.interface.verify import verifyObject
589         from pyramid.interfaces import ISession
0c29cf 590
51b2e8 591         session = self._makeOne()
CM 592         verifyObject(ISession, session)
593
594     def test_changed(self):
595         session = self._makeOne()
596         self.assertEqual(session.changed(), None)
597
598     def test_invalidate(self):
599         session = self._makeOne()
600         session['a'] = 1
601         self.assertEqual(session.invalidate(), None)
a1d395 602         self.assertFalse('a' in session)
51b2e8 603
CM 604     def test_flash_default(self):
605         session = self._makeOne()
606         session.flash('msg1')
607         session.flash('msg2')
608         self.assertEqual(session['_f_'], ['msg1', 'msg2'])
0c29cf 609
51b2e8 610     def test_flash_mixed(self):
CM 611         session = self._makeOne()
612         session.flash('warn1', 'warn')
613         session.flash('warn2', 'warn')
614         session.flash('err1', 'error')
615         session.flash('err2', 'error')
616         self.assertEqual(session['_f_warn'], ['warn1', 'warn2'])
617
618     def test_pop_flash_default_queue(self):
619         session = self._makeOne()
620         queue = ['one', 'two']
621         session['_f_'] = queue
622         result = session.pop_flash()
623         self.assertEqual(result, queue)
624         self.assertEqual(session.get('_f_'), None)
625
626     def test_pop_flash_nodefault_queue(self):
627         session = self._makeOne()
628         queue = ['one', 'two']
629         session['_f_error'] = queue
630         result = session.pop_flash('error')
631         self.assertEqual(result, queue)
632         self.assertEqual(session.get('_f_error'), None)
633
634     def test_peek_flash_default_queue(self):
635         session = self._makeOne()
636         queue = ['one', 'two']
637         session['_f_'] = queue
638         result = session.peek_flash()
639         self.assertEqual(result, queue)
640         self.assertEqual(session.get('_f_'), queue)
641
642     def test_peek_flash_nodefault_queue(self):
643         session = self._makeOne()
644         queue = ['one', 'two']
645         session['_f_error'] = queue
646         result = session.peek_flash('error')
647         self.assertEqual(result, queue)
648         self.assertEqual(session.get('_f_error'), queue)
649
650     def test_new_csrf_token(self):
651         session = self._makeOne()
652         token = session.new_csrf_token()
653         self.assertEqual(token, session['_csrft_'])
654
655     def test_get_csrf_token(self):
656         session = self._makeOne()
657         session['_csrft_'] = 'token'
658         token = session.get_csrf_token()
659         self.assertEqual(token, 'token')
a1d395 660         self.assertTrue('_csrft_' in session)
51b2e8 661
4d2003 662     def test_get_csrf_token_generates_token(self):
RB 663         session = self._makeOne()
664         token = session.get_csrf_token()
665         self.assertNotEqual(token, None)
666         self.assertTrue(len(token) >= 1)
51b2e8 667
0c29cf 668
d0b398 669 from zope.interface import Interface
3b7334 670 from zope.interface import implementer
0c29cf 671
MM 672
d0b398 673 class IDummy(Interface):
CM 674     pass
0c29cf 675
d0b398 676
3b7334 677 @implementer(IDummy)
d0b398 678 class DummyEvent:
3b7334 679     pass
0c29cf 680
MM 681
d0b398 682 class DummyFactory:
CM 683     def __init__(self, environ):
684         """ """
685
0c29cf 686
d0b398 687 class DummyRegistry(object):
CM 688     inited = 0
689     __name__ = 'name'
0c29cf 690
d0b398 691     def __init__(self, name=''):
CM 692         self.inited = self.inited + 1
0c29cf 693
MM 694
f5fa3f 695 class DummyRendererInfo(object):
CM 696     def __init__(self, kw):
697         self.__dict__.update(kw)
fbbb20 698
0c29cf 699
MM 700 class Test_testConfig(unittest.TestCase):
fbbb20 701     def _setUp(self, **kw):
BS 702         self._log.append(('setUp', kw))
703         return 'fake config'
704
705     def _tearDown(self, **kw):
706         self._log.append(('tearDown', kw))
707
708     def setUp(self):
709         from pyramid import testing
0c29cf 710
fbbb20 711         self._log = []
BS 712         self._orig_setUp = testing.setUp
713         testing.setUp = self._setUp
714         self._orig_tearDown = testing.tearDown
715         testing.tearDown = self._tearDown
716
717     def tearDown(self):
718         from pyramid import testing
0c29cf 719
fbbb20 720         testing.setUp = self._orig_setUp
BS 721         testing.tearDown = self._orig_tearDown
722
723     def _callFUT(self, inner, **kw):
724         from pyramid.testing import testConfig
0c29cf 725
fbbb20 726         with testConfig(**kw) as config:
BS 727             inner(config)
728
729     def test_ok_calls(self):
730         self.assertEqual(self._log, [])
0c29cf 731
fbbb20 732         def inner(config):
0c29cf 733             self.assertEqual(
MM 734                 self._log,
735                 [
736                     (
737                         'setUp',
738                         {
739                             'autocommit': True,
fbbb20 740                             'hook_zca': True,
BS 741                             'registry': None,
742                             'request': None,
0c29cf 743                             'settings': None,
MM 744                         },
745                     )
746                 ],
747             )
fbbb20 748             self._log.pop()
0c29cf 749
fbbb20 750         self._callFUT(inner)
0c29cf 751         self.assertEqual(self._log, [('tearDown', {'unhook_zca': True})])
fbbb20 752
BS 753     def test_teardown_called_on_exception(self):
754         class TestException(Exception):
755             pass
0c29cf 756
fbbb20 757         def inner(config):
BS 758             self._log = []
759             raise TestException('oops')
0c29cf 760
fbbb20 761         self.assertRaises(TestException, self._callFUT, inner)
BS 762         self.assertEqual(self._log[0][0], 'tearDown')
763
764     def test_ok_get_config(self):
765         def inner(config):
766             self.assertEqual(config, 'fake config')
0c29cf 767
fbbb20 768         self._callFUT(inner)