mirror of https://github.com/django/django.git
219 lines
7.3 KiB
Python
219 lines
7.3 KiB
Python
from django.core.cache import cache
|
|
from django.template import Context, Engine, TemplateSyntaxError
|
|
from django.test import SimpleTestCase, override_settings
|
|
|
|
from ..utils import setup
|
|
|
|
|
|
class CacheTagTests(SimpleTestCase):
|
|
libraries = {
|
|
"cache": "django.templatetags.cache",
|
|
"custom": "template_tests.templatetags.custom",
|
|
}
|
|
|
|
def tearDown(self):
|
|
cache.clear()
|
|
|
|
@setup({"cache03": "{% load cache %}{% cache 2 test %}cache03{% endcache %}"})
|
|
def test_cache03(self):
|
|
output = self.engine.render_to_string("cache03")
|
|
self.assertEqual(output, "cache03")
|
|
|
|
@setup(
|
|
{
|
|
"cache03": "{% load cache %}{% cache 2 test %}cache03{% endcache %}",
|
|
"cache04": "{% load cache %}{% cache 2 test %}cache04{% endcache %}",
|
|
}
|
|
)
|
|
def test_cache04(self):
|
|
self.engine.render_to_string("cache03")
|
|
output = self.engine.render_to_string("cache04")
|
|
self.assertEqual(output, "cache03")
|
|
|
|
@setup({"cache05": "{% load cache %}{% cache 2 test foo %}cache05{% endcache %}"})
|
|
def test_cache05(self):
|
|
output = self.engine.render_to_string("cache05", {"foo": 1})
|
|
self.assertEqual(output, "cache05")
|
|
|
|
@setup({"cache06": "{% load cache %}{% cache 2 test foo %}cache06{% endcache %}"})
|
|
def test_cache06(self):
|
|
output = self.engine.render_to_string("cache06", {"foo": 2})
|
|
self.assertEqual(output, "cache06")
|
|
|
|
@setup(
|
|
{
|
|
"cache05": "{% load cache %}{% cache 2 test foo %}cache05{% endcache %}",
|
|
"cache07": "{% load cache %}{% cache 2 test foo %}cache07{% endcache %}",
|
|
}
|
|
)
|
|
def test_cache07(self):
|
|
context = {"foo": 1}
|
|
self.engine.render_to_string("cache05", context)
|
|
output = self.engine.render_to_string("cache07", context)
|
|
self.assertEqual(output, "cache05")
|
|
|
|
@setup(
|
|
{
|
|
"cache06": "{% load cache %}{% cache 2 test foo %}cache06{% endcache %}",
|
|
"cache08": "{% load cache %}{% cache time test foo %}cache08{% endcache %}",
|
|
}
|
|
)
|
|
def test_cache08(self):
|
|
"""
|
|
Allow first argument to be a variable.
|
|
"""
|
|
context = {"foo": 2, "time": 2}
|
|
self.engine.render_to_string("cache06", context)
|
|
output = self.engine.render_to_string("cache08", context)
|
|
self.assertEqual(output, "cache06")
|
|
|
|
# Raise exception if we don't have at least 2 args, first one integer.
|
|
@setup({"cache11": "{% load cache %}{% cache %}{% endcache %}"})
|
|
def test_cache11(self):
|
|
with self.assertRaises(TemplateSyntaxError):
|
|
self.engine.get_template("cache11")
|
|
|
|
@setup({"cache12": "{% load cache %}{% cache 1 %}{% endcache %}"})
|
|
def test_cache12(self):
|
|
with self.assertRaises(TemplateSyntaxError):
|
|
self.engine.get_template("cache12")
|
|
|
|
@setup({"cache13": "{% load cache %}{% cache foo bar %}{% endcache %}"})
|
|
def test_cache13(self):
|
|
with self.assertRaises(TemplateSyntaxError):
|
|
self.engine.render_to_string("cache13")
|
|
|
|
@setup({"cache14": "{% load cache %}{% cache foo bar %}{% endcache %}"})
|
|
def test_cache14(self):
|
|
with self.assertRaises(TemplateSyntaxError):
|
|
self.engine.render_to_string("cache14", {"foo": "fail"})
|
|
|
|
@setup({"cache15": "{% load cache %}{% cache foo bar %}{% endcache %}"})
|
|
def test_cache15(self):
|
|
with self.assertRaises(TemplateSyntaxError):
|
|
self.engine.render_to_string("cache15", {"foo": []})
|
|
|
|
@setup({"cache16": "{% load cache %}{% cache 1 foo bar %}{% endcache %}"})
|
|
def test_cache16(self):
|
|
"""
|
|
Regression test for #7460.
|
|
"""
|
|
output = self.engine.render_to_string(
|
|
"cache16", {"foo": "foo", "bar": "with spaces"}
|
|
)
|
|
self.assertEqual(output, "")
|
|
|
|
@setup(
|
|
{
|
|
"cache17": (
|
|
"{% load cache %}{% cache 10 long_cache_key poem %}Some Content"
|
|
"{% endcache %}"
|
|
)
|
|
}
|
|
)
|
|
def test_cache17(self):
|
|
"""
|
|
Regression test for #11270.
|
|
"""
|
|
output = self.engine.render_to_string(
|
|
"cache17",
|
|
{
|
|
"poem": (
|
|
"Oh freddled gruntbuggly/Thy micturations are to me/"
|
|
"As plurdled gabbleblotchits/On a lurgid bee/"
|
|
"That mordiously hath bitled out/Its earted jurtles/"
|
|
"Into a rancid festering/Or else I shall rend thee in the "
|
|
"gobberwarts with my blurglecruncheon/See if I don't."
|
|
),
|
|
},
|
|
)
|
|
self.assertEqual(output, "Some Content")
|
|
|
|
@setup(
|
|
{
|
|
"cache18": (
|
|
'{% load cache custom %}{% cache 2|noop:"x y" cache18 %}cache18'
|
|
"{% endcache %}"
|
|
)
|
|
}
|
|
)
|
|
def test_cache18(self):
|
|
"""
|
|
Test whitespace in filter arguments
|
|
"""
|
|
output = self.engine.render_to_string("cache18")
|
|
self.assertEqual(output, "cache18")
|
|
|
|
@setup(
|
|
{
|
|
"first": "{% load cache %}{% cache None fragment19 %}content{% endcache %}",
|
|
"second": (
|
|
"{% load cache %}{% cache None fragment19 %}not rendered{% endcache %}"
|
|
),
|
|
}
|
|
)
|
|
def test_none_timeout(self):
|
|
"""A timeout of None means "cache forever"."""
|
|
output = self.engine.render_to_string("first")
|
|
self.assertEqual(output, "content")
|
|
output = self.engine.render_to_string("second")
|
|
self.assertEqual(output, "content")
|
|
|
|
|
|
class CacheTests(SimpleTestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.engine = Engine(libraries={"cache": "django.templatetags.cache"})
|
|
super().setUpClass()
|
|
|
|
def test_cache_regression_20130(self):
|
|
t = self.engine.from_string(
|
|
"{% load cache %}{% cache 1 regression_20130 %}foo{% endcache %}"
|
|
)
|
|
cachenode = t.nodelist[1]
|
|
self.assertEqual(cachenode.fragment_name, "regression_20130")
|
|
|
|
@override_settings(
|
|
CACHES={
|
|
"default": {
|
|
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
|
|
"LOCATION": "default",
|
|
},
|
|
"template_fragments": {
|
|
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
|
|
"LOCATION": "fragments",
|
|
},
|
|
}
|
|
)
|
|
def test_cache_fragment_cache(self):
|
|
"""
|
|
When a cache called "template_fragments" is present, the cache tag
|
|
will use it in preference to 'default'
|
|
"""
|
|
t1 = self.engine.from_string(
|
|
"{% load cache %}{% cache 1 fragment %}foo{% endcache %}"
|
|
)
|
|
t2 = self.engine.from_string(
|
|
'{% load cache %}{% cache 1 fragment using="default" %}bar{% endcache %}'
|
|
)
|
|
|
|
ctx = Context()
|
|
o1 = t1.render(ctx)
|
|
o2 = t2.render(ctx)
|
|
|
|
self.assertEqual(o1, "foo")
|
|
self.assertEqual(o2, "bar")
|
|
|
|
def test_cache_missing_backend(self):
|
|
"""
|
|
When a cache that doesn't exist is specified, the cache tag will
|
|
raise a TemplateSyntaxError
|
|
'"""
|
|
t = self.engine.from_string(
|
|
'{% load cache %}{% cache 1 backend using="unknown" %}bar{% endcache %}'
|
|
)
|
|
|
|
ctx = Context()
|
|
with self.assertRaises(TemplateSyntaxError):
|
|
t.render(ctx)
|