diff options
| author | Claude Paroz <claude@2xlibre.net> | 2019-09-26 19:06:35 +0200 |
|---|---|---|
| committer | Carlton Gibson <carlton@noumenal.es> | 2020-02-18 20:03:44 +0100 |
| commit | 4d973f593932285cd2f765400d915305d8e7333a (patch) | |
| tree | 1cc48fd9e979d77906e522ecad2689d156d1377f /tests/cache | |
| parent | a34cb5a6d408203f4fbdb364fc9768c026eda224 (diff) | |
Refs #26601 -- Deprecated passing None as get_response arg to middleware classes.
This is the new contract since middleware refactoring in Django 1.10.
Co-authored-by: Carlton Gibson <carlton.gibson@noumenal.es>
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Diffstat (limited to 'tests/cache')
| -rw-r--r-- | tests/cache/tests.py | 105 |
1 files changed, 55 insertions, 50 deletions
diff --git a/tests/cache/tests.py b/tests/cache/tests.py index bd8354d791..12f2664e5b 100644 --- a/tests/cache/tests.py +++ b/tests/cache/tests.py @@ -59,6 +59,10 @@ class Unpicklable: raise pickle.PickleError() +def empty_response(request): + return HttpResponse() + + KEY_ERRORS_WITH_MEMCACHED_MSG = ( 'Cache key contains characters that will cause errors if used with ' 'memcached: %r' @@ -908,30 +912,31 @@ class BaseCacheTests: self.assertEqual(caches['custom_key2'].get('answer2'), 42) def test_cache_write_unpicklable_object(self): - update_middleware = UpdateCacheMiddleware() - update_middleware.cache = cache - - fetch_middleware = FetchFromCacheMiddleware() + fetch_middleware = FetchFromCacheMiddleware(empty_response) fetch_middleware.cache = cache request = self.factory.get('/cache/test') request._cache_update_cache = True - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) self.assertIsNone(get_cache_data) - response = HttpResponse() content = 'Testing cookie serialization.' - response.content = content - response.set_cookie('foo', 'bar') - update_middleware.process_response(request, response) + def get_response(req): + response = HttpResponse(content) + response.set_cookie('foo', 'bar') + return response + + update_middleware = UpdateCacheMiddleware(get_response) + update_middleware.cache = cache + response = update_middleware(request) get_cache_data = fetch_middleware.process_request(request) self.assertIsNotNone(get_cache_data) self.assertEqual(get_cache_data.content, content.encode()) self.assertEqual(get_cache_data.cookies, response.cookies) - update_middleware.process_response(request, get_cache_data) + UpdateCacheMiddleware(lambda req: get_cache_data)(request) get_cache_data = fetch_middleware.process_request(request) self.assertIsNotNone(get_cache_data) self.assertEqual(get_cache_data.content, content.encode()) @@ -1769,9 +1774,7 @@ class CacheHEADTest(SimpleTestCase): cache.clear() def _set_cache(self, request, msg): - response = HttpResponse() - response.content = msg - return UpdateCacheMiddleware().process_response(request, response) + return UpdateCacheMiddleware(lambda req: HttpResponse(msg))(request) def test_head_caches_correctly(self): test_content = 'test content' @@ -1782,7 +1785,7 @@ class CacheHEADTest(SimpleTestCase): request = self.factory.head(self.path) request._cache_update_cache = True - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) self.assertIsNotNone(get_cache_data) self.assertEqual(test_content.encode(), get_cache_data.content) @@ -1794,7 +1797,7 @@ class CacheHEADTest(SimpleTestCase): self._set_cache(request, test_content) request = self.factory.head(self.path) - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) self.assertIsNotNone(get_cache_data) self.assertEqual(test_content.encode(), get_cache_data.content) @@ -1932,30 +1935,33 @@ class CacheI18nTest(SimpleTestCase): ) def test_middleware(self): def set_cache(request, lang, msg): + def get_response(req): + return HttpResponse(msg) + translation.activate(lang) - response = HttpResponse() - response.content = msg - return UpdateCacheMiddleware().process_response(request, response) + return UpdateCacheMiddleware(get_response)(request) # cache with non empty request.GET request = self.factory.get(self.path, {'foo': 'bar', 'other': 'true'}) request._cache_update_cache = True - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) # first access, cache must return None self.assertIsNone(get_cache_data) - response = HttpResponse() content = 'Check for cache with QUERY_STRING' - response.content = content - UpdateCacheMiddleware().process_response(request, response) - get_cache_data = FetchFromCacheMiddleware().process_request(request) + + def get_response(req): + return HttpResponse(content) + + UpdateCacheMiddleware(get_response)(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) # cache must return content self.assertIsNotNone(get_cache_data) self.assertEqual(get_cache_data.content, content.encode()) # different QUERY_STRING, cache must be empty request = self.factory.get(self.path, {'foo': 'bar', 'somethingelse': 'true'}) request._cache_update_cache = True - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) self.assertIsNone(get_cache_data) # i18n tests @@ -1965,7 +1971,7 @@ class CacheI18nTest(SimpleTestCase): request = self.factory.get(self.path) request._cache_update_cache = True set_cache(request, 'en', en_message) - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) # The cache can be recovered self.assertIsNotNone(get_cache_data) self.assertEqual(get_cache_data.content, en_message.encode()) @@ -1976,11 +1982,11 @@ class CacheI18nTest(SimpleTestCase): # change again the language translation.activate('en') # retrieve the content from cache - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) self.assertEqual(get_cache_data.content, en_message.encode()) # change again the language translation.activate('es') - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) self.assertEqual(get_cache_data.content, es_message.encode()) # reset the language translation.deactivate() @@ -1991,14 +1997,15 @@ class CacheI18nTest(SimpleTestCase): ) def test_middleware_doesnt_cache_streaming_response(self): request = self.factory.get(self.path) - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) self.assertIsNone(get_cache_data) - content = ['Check for cache with streaming content.'] - response = StreamingHttpResponse(content) - UpdateCacheMiddleware().process_response(request, response) + def get_stream_response(req): + return StreamingHttpResponse(['Check for cache with streaming content.']) + + UpdateCacheMiddleware(get_stream_response)(request) - get_cache_data = FetchFromCacheMiddleware().process_request(request) + get_cache_data = FetchFromCacheMiddleware(empty_response).process_request(request) self.assertIsNone(get_cache_data) @@ -2055,17 +2062,18 @@ class CacheMiddlewareTest(SimpleTestCase): Middleware vs. usage of CacheMiddleware as view decorator and setting attributes appropriately. """ - # If no arguments are passed in construction, it's being used as middleware. - middleware = CacheMiddleware() + # If only one argument is passed in construction, it's being used as + # middleware. + middleware = CacheMiddleware(empty_response) # Now test object attributes against values defined in setUp above self.assertEqual(middleware.cache_timeout, 30) self.assertEqual(middleware.key_prefix, 'middlewareprefix') self.assertEqual(middleware.cache_alias, 'other') - # If arguments are being passed in construction, it's being used as a decorator. - # First, test with "defaults": - as_view_decorator = CacheMiddleware(cache_alias=None, key_prefix=None) + # If more arguments are being passed in construction, it's being used + # as a decorator. First, test with "defaults": + as_view_decorator = CacheMiddleware(empty_response, cache_alias=None, key_prefix=None) self.assertEqual(as_view_decorator.cache_timeout, 30) # Timeout value for 'default' cache, i.e. 30 self.assertEqual(as_view_decorator.key_prefix, '') @@ -2073,16 +2081,18 @@ class CacheMiddlewareTest(SimpleTestCase): self.assertEqual(as_view_decorator.cache_alias, 'default') # Next, test with custom values: - as_view_decorator_with_custom = CacheMiddleware(cache_timeout=60, cache_alias='other', key_prefix='foo') + as_view_decorator_with_custom = CacheMiddleware( + hello_world_view, cache_timeout=60, cache_alias='other', key_prefix='foo' + ) self.assertEqual(as_view_decorator_with_custom.cache_timeout, 60) self.assertEqual(as_view_decorator_with_custom.key_prefix, 'foo') self.assertEqual(as_view_decorator_with_custom.cache_alias, 'other') def test_middleware(self): - middleware = CacheMiddleware() - prefix_middleware = CacheMiddleware(key_prefix='prefix1') - timeout_middleware = CacheMiddleware(cache_timeout=1) + middleware = CacheMiddleware(hello_world_view) + prefix_middleware = CacheMiddleware(hello_world_view, key_prefix='prefix1') + timeout_middleware = CacheMiddleware(hello_world_view, cache_timeout=1) request = self.factory.get('/view/') @@ -2223,18 +2233,13 @@ class CacheMiddlewareTest(SimpleTestCase): Django must prevent caching of responses that set a user-specific (and maybe security sensitive) cookie in response to a cookie-less request. """ - csrf_middleware = CsrfViewMiddleware() - cache_middleware = CacheMiddleware() - request = self.factory.get('/view/') - self.assertIsNone(cache_middleware.process_request(request)) - + csrf_middleware = CsrfViewMiddleware(csrf_view) csrf_middleware.process_view(request, csrf_view, (), {}) + cache_middleware = CacheMiddleware(csrf_middleware) - response = csrf_view(request) - - response = csrf_middleware.process_response(request, response) - response = cache_middleware.process_response(request, response) + self.assertIsNone(cache_middleware.process_request(request)) + cache_middleware(request) # Inserting a CSRF cookie in a cookie-less request prevented caching. self.assertIsNone(cache_middleware.process_request(request)) |
