1
0
mirror of https://github.com/django/django.git synced 2025-05-05 06:27:31 +00:00
django/tests/check_framework/test_templates.py
Mariusz Felisiak b37a4affcd [4.1.x] Fixed #33800 -- Fixed system check for the same template tag module in installed apps and template tag libraries.
Thanks Claude Paroz for the report.

Regression in 004b4620f6f4ad87261e149898940f2dcd5757ef.
Backport of 083bfca6b6c00d0f45837a65c2db721eaf46bc07 from main
2022-06-23 20:24:24 +02:00

223 lines
7.7 KiB
Python

from copy import copy, deepcopy
from django.core.checks import Error
from django.core.checks.templates import (
E001,
E002,
E003,
check_for_template_tags_with_the_same_name,
check_setting_app_dirs_loaders,
check_string_if_invalid_is_string,
)
from django.test import SimpleTestCase
from django.test.utils import override_settings
class CheckTemplateSettingsAppDirsTest(SimpleTestCase):
TEMPLATES_APP_DIRS_AND_LOADERS = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"APP_DIRS": True,
"OPTIONS": {
"loaders": ["django.template.loaders.filesystem.Loader"],
},
},
]
@override_settings(TEMPLATES=TEMPLATES_APP_DIRS_AND_LOADERS)
def test_app_dirs_and_loaders(self):
"""
Error if template loaders are specified and APP_DIRS is True.
"""
self.assertEqual(check_setting_app_dirs_loaders(None), [E001])
def test_app_dirs_removed(self):
TEMPLATES = deepcopy(self.TEMPLATES_APP_DIRS_AND_LOADERS)
del TEMPLATES[0]["APP_DIRS"]
with self.settings(TEMPLATES=TEMPLATES):
self.assertEqual(check_setting_app_dirs_loaders(None), [])
def test_loaders_removed(self):
TEMPLATES = deepcopy(self.TEMPLATES_APP_DIRS_AND_LOADERS)
del TEMPLATES[0]["OPTIONS"]["loaders"]
with self.settings(TEMPLATES=TEMPLATES):
self.assertEqual(check_setting_app_dirs_loaders(None), [])
class CheckTemplateStringIfInvalidTest(SimpleTestCase):
TEMPLATES_STRING_IF_INVALID = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"OPTIONS": {
"string_if_invalid": False,
},
},
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"OPTIONS": {
"string_if_invalid": 42,
},
},
]
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.error1 = copy(E002)
cls.error2 = copy(E002)
string_if_invalid1 = cls.TEMPLATES_STRING_IF_INVALID[0]["OPTIONS"][
"string_if_invalid"
]
string_if_invalid2 = cls.TEMPLATES_STRING_IF_INVALID[1]["OPTIONS"][
"string_if_invalid"
]
cls.error1.msg = cls.error1.msg.format(
string_if_invalid1, type(string_if_invalid1).__name__
)
cls.error2.msg = cls.error2.msg.format(
string_if_invalid2, type(string_if_invalid2).__name__
)
@override_settings(TEMPLATES=TEMPLATES_STRING_IF_INVALID)
def test_string_if_invalid_not_string(self):
self.assertEqual(
check_string_if_invalid_is_string(None), [self.error1, self.error2]
)
def test_string_if_invalid_first_is_string(self):
TEMPLATES = deepcopy(self.TEMPLATES_STRING_IF_INVALID)
TEMPLATES[0]["OPTIONS"]["string_if_invalid"] = "test"
with self.settings(TEMPLATES=TEMPLATES):
self.assertEqual(check_string_if_invalid_is_string(None), [self.error2])
def test_string_if_invalid_both_are_strings(self):
TEMPLATES = deepcopy(self.TEMPLATES_STRING_IF_INVALID)
TEMPLATES[0]["OPTIONS"]["string_if_invalid"] = "test"
TEMPLATES[1]["OPTIONS"]["string_if_invalid"] = "test"
with self.settings(TEMPLATES=TEMPLATES):
self.assertEqual(check_string_if_invalid_is_string(None), [])
def test_string_if_invalid_not_specified(self):
TEMPLATES = deepcopy(self.TEMPLATES_STRING_IF_INVALID)
del TEMPLATES[1]["OPTIONS"]["string_if_invalid"]
with self.settings(TEMPLATES=TEMPLATES):
self.assertEqual(check_string_if_invalid_is_string(None), [self.error1])
class CheckTemplateTagLibrariesWithSameName(SimpleTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.error_same_tags = Error(
E003.msg.format(
"'same_tags'",
"'check_framework.template_test_apps.same_tags_app_1."
"templatetags.same_tags', "
"'check_framework.template_test_apps.same_tags_app_2."
"templatetags.same_tags'",
),
id=E003.id,
)
@staticmethod
def get_settings(module_name, module_path):
return {
"BACKEND": "django.template.backends.django.DjangoTemplates",
"OPTIONS": {
"libraries": {
module_name: f"check_framework.template_test_apps.{module_path}",
},
},
}
@override_settings(
INSTALLED_APPS=[
"check_framework.template_test_apps.same_tags_app_1",
"check_framework.template_test_apps.same_tags_app_2",
]
)
def test_template_tags_with_same_name(self):
self.assertEqual(
check_for_template_tags_with_the_same_name(None),
[self.error_same_tags],
)
def test_template_tags_with_same_library_name(self):
with self.settings(
TEMPLATES=[
self.get_settings(
"same_tags", "same_tags_app_1.templatetags.same_tags"
),
self.get_settings(
"same_tags", "same_tags_app_2.templatetags.same_tags"
),
]
):
self.assertEqual(
check_for_template_tags_with_the_same_name(None),
[self.error_same_tags],
)
@override_settings(
INSTALLED_APPS=["check_framework.template_test_apps.same_tags_app_1"]
)
def test_template_tags_same_library_in_installed_apps_libraries(self):
with self.settings(
TEMPLATES=[
self.get_settings(
"same_tags", "same_tags_app_1.templatetags.same_tags"
),
]
):
self.assertEqual(check_for_template_tags_with_the_same_name(None), [])
@override_settings(
INSTALLED_APPS=["check_framework.template_test_apps.same_tags_app_1"]
)
def test_template_tags_with_same_library_name_and_module_name(self):
with self.settings(
TEMPLATES=[
self.get_settings(
"same_tags",
"different_tags_app.templatetags.different_tags",
),
]
):
self.assertEqual(
check_for_template_tags_with_the_same_name(None),
[
Error(
E003.msg.format(
"'same_tags'",
"'check_framework.template_test_apps.different_tags_app."
"templatetags.different_tags', "
"'check_framework.template_test_apps.same_tags_app_1."
"templatetags.same_tags'",
),
id=E003.id,
)
],
)
def test_template_tags_with_different_library_name(self):
with self.settings(
TEMPLATES=[
self.get_settings(
"same_tags", "same_tags_app_1.templatetags.same_tags"
),
self.get_settings(
"not_same_tags", "same_tags_app_2.templatetags.same_tags"
),
]
):
self.assertEqual(check_for_template_tags_with_the_same_name(None), [])
@override_settings(
INSTALLED_APPS=[
"check_framework.template_test_apps.same_tags_app_1",
"check_framework.template_test_apps.different_tags_app",
]
)
def test_template_tags_with_different_name(self):
self.assertEqual(check_for_template_tags_with_the_same_name(None), [])