mirror of
https://github.com/django/django.git
synced 2025-11-20 03:30:00 +00:00
add test for response with Vary headers case
This commit is contained in:
parent
ec6612b7bc
commit
951d78a5d2
2 changed files with 46 additions and 10 deletions
|
|
@ -20,7 +20,7 @@ from collections import defaultdict
|
|||
from hashlib import md5
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache, caches
|
||||
from django.core.cache import caches
|
||||
from django.http import HttpResponse, HttpResponseNotModified
|
||||
from django.test import RequestFactory
|
||||
from django.utils.http import http_date, parse_etags, parse_http_date_safe, quote_etag
|
||||
|
|
@ -449,10 +449,7 @@ def _to_tuple(s):
|
|||
|
||||
|
||||
def invalidate_view_cache(
|
||||
path=None,
|
||||
request=None,
|
||||
vary_headers=None,
|
||||
key_prefix=None,
|
||||
path=None, request=None, vary_headers=None, key_prefix=None, cache=None
|
||||
):
|
||||
"""
|
||||
This function first creates a fake WSGIRequest to compute the cache key.
|
||||
|
|
@ -479,7 +476,12 @@ def invalidate_view_cache(
|
|||
if vary_headers:
|
||||
request.META.update(vary_headers)
|
||||
|
||||
cache_key = get_cache_key(request, key_prefix=key_prefix, ignore_headers=True)
|
||||
if cache is None:
|
||||
cache = caches[settings.CACHE_MIDDLEWARE_ALIAS]
|
||||
|
||||
cache_key = get_cache_key(
|
||||
request, key_prefix=key_prefix, ignore_headers=True, cache=cache
|
||||
)
|
||||
if cache_key is None:
|
||||
return 0
|
||||
|
||||
|
|
|
|||
42
tests/cache/tests.py
vendored
42
tests/cache/tests.py
vendored
|
|
@ -63,6 +63,7 @@ from django.utils.cache import (
|
|||
patch_vary_headers,
|
||||
)
|
||||
from django.views.decorators.cache import cache_control, cache_page
|
||||
from django.views.decorators.vary import vary_on_headers
|
||||
|
||||
from .models import Poll, expensive_calculation
|
||||
|
||||
|
|
@ -2631,14 +2632,16 @@ class CacheMiddlewareTest(SimpleTestCase):
|
|||
view = cache_page(10)(hello_world_view)
|
||||
request = self.factory.get("/view/")
|
||||
_ = view(request, "0")
|
||||
cache_key = get_cache_key(request=request, key_prefix="", ignore_headers=True)
|
||||
cache_key = get_cache_key(
|
||||
request=request, key_prefix="", ignore_headers=True, cache=cache
|
||||
)
|
||||
cached_response = cache.get(cache_key)
|
||||
|
||||
# Verify request.content has been chached
|
||||
self.assertEqual(cached_response.content, b"Hello World 0")
|
||||
|
||||
# Delete cache key/value
|
||||
invalidate_view_cache(request=request, key_prefix="")
|
||||
invalidate_view_cache(request=request, key_prefix="", cache=cache)
|
||||
cached_response = cache.get(cache_key)
|
||||
|
||||
# Confirm key/value has been deleted from cache
|
||||
|
|
@ -2650,14 +2653,45 @@ class CacheMiddlewareTest(SimpleTestCase):
|
|||
path = "/view/"
|
||||
request = self.factory.get(path)
|
||||
_ = view(request, "0")
|
||||
cache_key = get_cache_key(request=request, key_prefix="", ignore_headers=True)
|
||||
cache_key = get_cache_key(
|
||||
request=request, key_prefix="", ignore_headers=True, cache=cache
|
||||
)
|
||||
cached_response = cache.get(cache_key)
|
||||
|
||||
# Verify request.content has been chached
|
||||
self.assertEqual(cached_response.content, b"Hello World 0")
|
||||
|
||||
# Delete cache key/value
|
||||
invalidate_view_cache(path=path, key_prefix="")
|
||||
invalidate_view_cache(path=path, key_prefix="", cache=cache)
|
||||
cached_response = cache.get(cache_key)
|
||||
|
||||
# Confirm key/value has been deleted from cache
|
||||
self.assertIsNone(cached_response)
|
||||
|
||||
def test_invalidate_view_decorator_cache_from_path_with_vary_headers(self):
|
||||
"""Invalidate cache key/value from path with Vary headers"""
|
||||
|
||||
# Cache view and inject Vary headers to Response object
|
||||
view = cache_page(10, key_prefix="")(
|
||||
vary_on_headers("Accept-Encoding")(hello_world_view)
|
||||
)
|
||||
path = "/view/"
|
||||
request = self.factory.get(path)
|
||||
response = view(request, "0")
|
||||
|
||||
# Check response headers
|
||||
self.assertTrue(response.has_header("Vary"))
|
||||
|
||||
cache_key = get_cache_key(
|
||||
request=request, key_prefix="", ignore_headers=False, cache=cache
|
||||
)
|
||||
cached_response = cache.get(cache_key)
|
||||
|
||||
# Verify request.content has been chached
|
||||
self.assertEqual(cached_response.content, b"Hello World 0")
|
||||
|
||||
# Delete cache key/value
|
||||
invalidate_view_cache(path=path, key_prefix="", cache=cache)
|
||||
cached_response = cache.get(cache_key)
|
||||
|
||||
# Confirm key/value has been deleted from cache
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue