diff options
| author | Michael Merickel <michael@merickel.org> | 2018-10-14 21:11:41 -0500 |
|---|---|---|
| committer | Michael Merickel <michael@merickel.org> | 2018-10-14 21:11:41 -0500 |
| commit | 3670c2cdb732d378ba6d38e72e7cd875ff726aa9 (patch) | |
| tree | 5213452a778c992d42602efe7d3b3655a349abd5 /tests/test_scripting.py | |
| parent | 2b024920847481592b1a13d4006d2a9fa8881d72 (diff) | |
| download | pyramid-3670c2cdb732d378ba6d38e72e7cd875ff726aa9.tar.gz pyramid-3670c2cdb732d378ba6d38e72e7cd875ff726aa9.tar.bz2 pyramid-3670c2cdb732d378ba6d38e72e7cd875ff726aa9.zip | |
move tests out of the package
Diffstat (limited to 'tests/test_scripting.py')
| -rw-r--r-- | tests/test_scripting.py | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/tests/test_scripting.py b/tests/test_scripting.py new file mode 100644 index 000000000..ed88bb470 --- /dev/null +++ b/tests/test_scripting.py @@ -0,0 +1,221 @@ +import unittest + +class Test_get_root(unittest.TestCase): + def _callFUT(self, app, request=None): + from pyramid.scripting import get_root + return get_root(app, request) + + def _makeRegistry(self): + return DummyRegistry([DummyFactory]) + + def setUp(self): + from pyramid.threadlocal import manager + self.manager = manager + self.default = manager.get() + + def test_it_norequest(self): + registry = self._makeRegistry() + app = DummyApp(registry=registry) + root, closer = self._callFUT(app) + self.assertEqual(dummy_root, root) + pushed = self.manager.get() + self.assertEqual(pushed['registry'], registry) + self.assertEqual(pushed['request'].registry, registry) + self.assertEqual(pushed['request'].environ['path'], '/') + closer() + self.assertEqual(self.default, self.manager.get()) + + def test_it_withrequest(self): + registry = self._makeRegistry() + app = DummyApp(registry=registry) + request = DummyRequest({}) + root, closer = self._callFUT(app, request) + self.assertEqual(dummy_root, root) + pushed = self.manager.get() + self.assertEqual(pushed['registry'], registry) + self.assertEqual(pushed['request'], request) + self.assertEqual(pushed['request'].registry, registry) + closer() + self.assertEqual(self.default, self.manager.get()) + +class Test_prepare(unittest.TestCase): + def _callFUT(self, request=None, registry=None): + from pyramid.scripting import prepare + return prepare(request, registry) + + def _makeRegistry(self, L=None): + if L is None: + L = [None, DummyFactory] + return DummyRegistry(L) + + def setUp(self): + from pyramid.threadlocal import manager + self.manager = manager + self.default = manager.get() + + def test_it_no_valid_apps(self): + from pyramid.exceptions import ConfigurationError + self.assertRaises(ConfigurationError, self._callFUT) + + def test_it_norequest(self): + registry = self._makeRegistry([DummyFactory, None, DummyFactory]) + info = self._callFUT(registry=registry) + root, closer, request = info['root'], info['closer'], info['request'] + pushed = self.manager.get() + self.assertEqual(pushed['registry'], registry) + self.assertEqual(pushed['request'].registry, registry) + self.assertEqual(root.a, (pushed['request'],)) + closer() + self.assertEqual(self.default, self.manager.get()) + self.assertEqual(request.context, root) + + def test_it_withrequest_hasregistry(self): + request = DummyRequest({}) + registry = request.registry = self._makeRegistry() + info = self._callFUT(request=request) + root, closer, request = info['root'], info['closer'], info['request'] + pushed = self.manager.get() + self.assertEqual(pushed['request'], request) + self.assertEqual(pushed['registry'], registry) + self.assertEqual(pushed['request'].registry, registry) + self.assertEqual(root.a, (request,)) + closer() + self.assertEqual(self.default, self.manager.get()) + self.assertEqual(request.context, root) + self.assertEqual(request.registry, registry) + + def test_it_withrequest_noregistry(self): + request = DummyRequest({}) + registry = self._makeRegistry() + info = self._callFUT(request=request, registry=registry) + root, closer, request = info['root'], info['closer'], info['request'] + closer() + self.assertEqual(request.context, root) + # should be set by prepare + self.assertEqual(request.registry, registry) + + def test_it_with_request_and_registry(self): + request = DummyRequest({}) + registry = request.registry = self._makeRegistry() + info = self._callFUT(request=request, registry=registry) + root, closer, root = info['root'], info['closer'], info['root'] + pushed = self.manager.get() + self.assertEqual(pushed['request'], request) + self.assertEqual(pushed['registry'], registry) + self.assertEqual(pushed['request'].registry, registry) + self.assertEqual(root.a, (request,)) + closer() + self.assertEqual(self.default, self.manager.get()) + self.assertEqual(request.context, root) + + def test_it_with_request_context_already_set(self): + request = DummyRequest({}) + context = Dummy() + request.context = context + registry = request.registry = self._makeRegistry() + info = self._callFUT(request=request, registry=registry) + root, closer, root = info['root'], info['closer'], info['root'] + closer() + self.assertEqual(request.context, context) + + def test_it_with_extensions(self): + from pyramid.util import InstancePropertyHelper + exts = DummyExtensions() + ext_method = lambda r: 'bar' + name, fn = InstancePropertyHelper.make_property(ext_method, 'foo') + exts.descriptors[name] = fn + request = DummyRequest({}) + registry = request.registry = self._makeRegistry([exts, DummyFactory]) + info = self._callFUT(request=request, registry=registry) + self.assertEqual(request.foo, 'bar') + root, closer = info['root'], info['closer'] + closer() + + def test_it_is_a_context_manager(self): + request = DummyRequest({}) + registry = request.registry = self._makeRegistry() + closer_called = [False] + with self._callFUT(request=request) as info: + root, request = info['root'], info['request'] + pushed = self.manager.get() + self.assertEqual(pushed['request'], request) + self.assertEqual(pushed['registry'], registry) + self.assertEqual(pushed['request'].registry, registry) + self.assertEqual(root.a, (request,)) + orig_closer = info['closer'] + def closer(): + orig_closer() + closer_called[0] = True + info['closer'] = closer + self.assertTrue(closer_called[0]) + self.assertEqual(self.default, self.manager.get()) + self.assertEqual(request.context, root) + self.assertEqual(request.registry, registry) + +class Test__make_request(unittest.TestCase): + def _callFUT(self, path='/', registry=None): + from pyramid.scripting import _make_request + return _make_request(path, registry) + + def _makeRegistry(self): + return DummyRegistry([DummyFactory]) + + def test_it_with_registry(self): + registry = self._makeRegistry() + request = self._callFUT('/', registry) + self.assertEqual(request.environ['path'], '/') + self.assertEqual(request.registry, registry) + + def test_it_with_no_registry(self): + from pyramid.config import global_registries + registry = self._makeRegistry() + global_registries.add(registry) + try: + request = self._callFUT('/hello') + self.assertEqual(request.environ['path'], '/hello') + self.assertEqual(request.registry, registry) + finally: + global_registries.empty() + +class Dummy: + pass + +dummy_root = Dummy() + +class DummyFactory(object): + @classmethod + def blank(cls, path): + req = DummyRequest({'path': path}) + return req + + def __init__(self, *a, **kw): + self.a = a + self.kw = kw + +class DummyRegistry(object): + def __init__(self, utilities): + self.utilities = utilities + + def queryUtility(self, iface, default=None): # pragma: no cover + if self.utilities: + return self.utilities.pop(0) + return default + +class DummyApp: + def __init__(self, registry=None): + if registry: + self.registry = registry + + def root_factory(self, environ): + return dummy_root + +class DummyRequest(object): + matchdict = None + matched_route = None + def __init__(self, environ): + self.environ = environ + +class DummyExtensions: + def __init__(self): + self.descriptors = {} + self.methods = {} |
