mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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)
 |