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