summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2020-01-09 22:53:46 -0600
committerMichael Merickel <michael@merickel.org>2020-01-09 22:53:46 -0600
commit68c1929bbfec92f3fff1985226d88f41b02e5a4f (patch)
tree99d1d6c463da8e36d0d7a9ddd60938eff1930f2d /tests
parent9ba492843ef8685b5493516a9c740b6aa5a9e55a (diff)
parent912bccb8b715b0249c2c23736c467eaee14a4e3b (diff)
downloadpyramid-68c1929bbfec92f3fff1985226d88f41b02e5a4f.tar.gz
pyramid-68c1929bbfec92f3fff1985226d88f41b02e5a4f.tar.bz2
pyramid-68c1929bbfec92f3fff1985226d88f41b02e5a4f.zip
Merge branch 'master' into security-docs
Diffstat (limited to 'tests')
-rw-r--r--tests/test_request.py116
-rw-r--r--tests/test_scripting.py24
-rw-r--r--tests/test_util.py30
3 files changed, 151 insertions, 19 deletions
diff --git a/tests/test_request.py b/tests/test_request.py
index bbf6aa47c..3c5535b0e 100644
--- a/tests/test_request.py
+++ b/tests/test_request.py
@@ -535,10 +535,6 @@ class Test_apply_request_extensions(unittest.TestCase):
self.assertEqual(request.foo('abc'), 'abc')
-class Dummy(object):
- pass
-
-
class Test_subclassing_Request(unittest.TestCase):
def test_subclass(self):
from pyramid.interfaces import IRequest
@@ -598,14 +594,124 @@ class Test_subclassing_Request(unittest.TestCase):
self.assertTrue(IRequest.implementedBy(RequestSub))
+class TestRequestLocalCache(unittest.TestCase):
+ def _makeOne(self, *args, **kwargs):
+ from pyramid.request import RequestLocalCache
+
+ return RequestLocalCache(*args, **kwargs)
+
+ def test_it_works_with_functions(self):
+ a = [0]
+
+ @self._makeOne()
+ def foo(request):
+ a[0] += 1
+ return a[0]
+
+ req1 = DummyRequest()
+ req2 = DummyRequest()
+ self.assertEqual(foo(req1), 1)
+ self.assertEqual(foo(req2), 2)
+ self.assertEqual(foo(req1), 1)
+ self.assertEqual(foo(req2), 2)
+ self.assertEqual(len(req1.finished_callbacks), 1)
+ self.assertEqual(len(req2.finished_callbacks), 1)
+
+ def test_clear_works(self):
+ a = [0]
+
+ @self._makeOne()
+ def foo(request):
+ a[0] += 1
+ return a[0]
+
+ req = DummyRequest()
+ self.assertEqual(foo(req), 1)
+ self.assertEqual(len(req.finished_callbacks), 1)
+ foo.cache.clear(req)
+ self.assertEqual(foo(req), 2)
+ self.assertEqual(len(req.finished_callbacks), 1)
+
+ def test_set_overrides_current_value(self):
+ a = [0]
+
+ @self._makeOne()
+ def foo(request):
+ a[0] += 1
+ return a[0]
+
+ req = DummyRequest()
+ self.assertEqual(foo(req), 1)
+ self.assertEqual(len(req.finished_callbacks), 1)
+ foo.cache.set(req, 8)
+ self.assertEqual(foo(req), 8)
+ self.assertEqual(len(req.finished_callbacks), 1)
+ self.assertEqual(foo.cache.get(req), 8)
+
+ def test_get_works(self):
+ cache = self._makeOne()
+ req = DummyRequest()
+ self.assertIs(cache.get(req), cache.NO_VALUE)
+ cache.set(req, 2)
+ self.assertIs(cache.get(req), 2)
+
+ def test_creator_in_constructor(self):
+ def foo(request):
+ return 8
+
+ cache = self._makeOne(foo)
+ req = DummyRequest()
+ result = cache.get_or_create(req)
+ self.assertEqual(result, 8)
+
+ def test_decorator_overrides_creator(self):
+ def foo(request): # pragma: no cover
+ raise AssertionError
+
+ cache = self._makeOne(foo)
+
+ @cache
+ def bar(request):
+ return 8
+
+ req = DummyRequest()
+ result = cache.get_or_create(req)
+ self.assertEqual(result, 8)
+
+ def test_get_or_create_overrides_creator(self):
+ cache = self._makeOne()
+
+ @cache
+ def foo(request): # pragma: no cover
+ raise AssertionError
+
+ req = DummyRequest()
+ result = cache.get_or_create(req, lambda r: 8)
+ self.assertEqual(result, 8)
+
+ def test_get_or_create_with_no_creator(self):
+ cache = self._makeOne()
+ req = DummyRequest()
+ self.assertRaises(ValueError, cache.get_or_create, req)
+
+
+class Dummy(object):
+ pass
+
+
class DummyRequest(object):
def __init__(self, environ=None):
if environ is None:
environ = {}
self.environ = environ
+ self.response_callbacks = []
+ self.finished_callbacks = []
def add_response_callback(self, callback):
- self.response_callbacks = [callback]
+ self.response_callbacks.append(callback)
+
+ def add_finished_callback(self, callback):
+ self.finished_callbacks.append(callback)
def get_response(self, app):
return app
diff --git a/tests/test_scripting.py b/tests/test_scripting.py
index 8f74f35f8..b8a18f57e 100644
--- a/tests/test_scripting.py
+++ b/tests/test_scripting.py
@@ -1,3 +1,4 @@
+from collections import deque
import unittest
@@ -162,6 +163,20 @@ class Test_prepare(unittest.TestCase):
self.assertEqual(request.context, root)
self.assertEqual(request.registry, registry)
+ def test_closer_invokes_finished_callbacks(self):
+ finish_called = [False]
+
+ def finished_callback(request):
+ finish_called[0] = True
+
+ request = DummyRequest({})
+ request.registry = self._makeRegistry()
+ info = self._callFUT(request=request)
+ request.add_finished_callback(finished_callback)
+ closer = info['closer']
+ closer()
+ self.assertTrue(finish_called[0])
+
class Test__make_request(unittest.TestCase):
def _callFUT(self, path='/', registry=None):
@@ -234,6 +249,15 @@ class DummyRequest(object):
def __init__(self, environ):
self.environ = environ
+ self.finished_callbacks = deque()
+
+ def add_finished_callback(self, cb):
+ self.finished_callbacks.append(cb)
+
+ def _process_finished_callbacks(self):
+ while self.finished_callbacks:
+ cb = self.finished_callbacks.popleft()
+ cb(self)
class DummyExtensions:
diff --git a/tests/test_util.py b/tests/test_util.py
index 293036c10..1553d8e60 100644
--- a/tests/test_util.py
+++ b/tests/test_util.py
@@ -103,25 +103,26 @@ class Test_InstancePropertyHelper(unittest.TestCase):
)
def test_override_property(self):
- def worker(obj): # pragma: no cover
+ def worker(obj):
pass
foo = Dummy()
helper = self._getTargetClass()
helper.set_property(foo, worker, name='x')
-
- def doit():
- foo.x = 1
-
- self.assertRaises(AttributeError, doit)
+ self.assertIsNone(foo.x)
+ foo.x = 1
+ self.assertEqual(foo.x, 1)
+ del foo.x
+ self.assertIsNone(foo.x)
def test_override_reify(self):
- def worker(obj): # pragma: no cover
+ def worker(obj):
pass
foo = Dummy()
helper = self._getTargetClass()
helper.set_property(foo, worker, name='x', reify=True)
+ self.assertIsNone(foo.x)
foo.x = 1
self.assertEqual(1, foo.x)
foo.x = 2
@@ -301,23 +302,24 @@ class Test_InstancePropertyMixin(unittest.TestCase):
)
def test_override_property(self):
- def worker(obj): # pragma: no cover
+ def worker(obj):
pass
foo = self._makeOne()
foo.set_property(worker, name='x')
-
- def doit():
- foo.x = 1
-
- self.assertRaises(AttributeError, doit)
+ self.assertIsNone(foo.x)
+ foo.x = 1
+ self.assertEqual(foo.x, 1)
+ del foo.x
+ self.assertIsNone(foo.x)
def test_override_reify(self):
- def worker(obj): # pragma: no cover
+ def worker(obj):
pass
foo = self._makeOne()
foo.set_property(worker, name='x', reify=True)
+ self.assertIsNone(foo.x)
foo.x = 1
self.assertEqual(1, foo.x)
foo.x = 2