diff options
author | django-bot <ops@djangoproject.com> | 2022-02-03 20:24:19 +0100 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-02-07 20:37:05 +0100 |
commit | 9c19aff7c7561e3a82978a272ecdaad40dda5c00 (patch) | |
tree | f0506b668a013d0063e5fba3dbf4863b466713ba /tests/check_framework | |
parent | f68fa8b45dfac545cfc4111d4e52804c86db68d3 (diff) | |
download | django-9c19aff7c7561e3a82978a272ecdaad40dda5c00.tar.gz |
Refs #33476 -- Reformatted code with Black.
Diffstat (limited to 'tests/check_framework')
35 files changed, 997 insertions, 734 deletions
diff --git a/tests/check_framework/apps.py b/tests/check_framework/apps.py index c57994f722..b78d603855 100644 --- a/tests/check_framework/apps.py +++ b/tests/check_framework/apps.py @@ -2,9 +2,9 @@ from django.apps import AppConfig class CheckDefaultPKConfig(AppConfig): - name = 'check_framework' + name = "check_framework" class CheckPKConfig(AppConfig): - name = 'check_framework' - default_auto_field = 'django.db.models.BigAutoField' + name = "check_framework" + default_auto_field = "django.db.models.BigAutoField" diff --git a/tests/check_framework/models.py b/tests/check_framework/models.py index f13010cc57..d8bbedb1a7 100644 --- a/tests/check_framework/models.py +++ b/tests/check_framework/models.py @@ -7,7 +7,7 @@ class SimpleModel(models.Model): manager = models.manager.Manager() -@register('tests') +@register("tests") def my_check(app_configs, **kwargs): my_check.did_run = True return [] diff --git a/tests/check_framework/template_test_apps/different_tags_app/apps.py b/tests/check_framework/template_test_apps/different_tags_app/apps.py index 90d54b3d50..bb6d57128c 100644 --- a/tests/check_framework/template_test_apps/different_tags_app/apps.py +++ b/tests/check_framework/template_test_apps/different_tags_app/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class DifferentTagsAppAppConfig(AppConfig): - name = 'check_framework.template_test_apps.different_tags_app' + name = "check_framework.template_test_apps.different_tags_app" diff --git a/tests/check_framework/template_test_apps/same_tags_app_1/apps.py b/tests/check_framework/template_test_apps/same_tags_app_1/apps.py index 44149177a0..7b82f48dc6 100644 --- a/tests/check_framework/template_test_apps/same_tags_app_1/apps.py +++ b/tests/check_framework/template_test_apps/same_tags_app_1/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class SameTagsApp1AppConfig(AppConfig): - name = 'check_framework.template_test_apps.same_tags_app_1' + name = "check_framework.template_test_apps.same_tags_app_1" diff --git a/tests/check_framework/template_test_apps/same_tags_app_2/apps.py b/tests/check_framework/template_test_apps/same_tags_app_2/apps.py index d90c800d1f..e94c0113a6 100644 --- a/tests/check_framework/template_test_apps/same_tags_app_2/apps.py +++ b/tests/check_framework/template_test_apps/same_tags_app_2/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class SameTagsApp2AppConfig(AppConfig): - name = 'check_framework.template_test_apps.same_tags_app_2' + name = "check_framework.template_test_apps.same_tags_app_2" diff --git a/tests/check_framework/test_4_0_compatibility.py b/tests/check_framework/test_4_0_compatibility.py index 9f288f252a..c0c1e5cacf 100644 --- a/tests/check_framework/test_4_0_compatibility.py +++ b/tests/check_framework/test_4_0_compatibility.py @@ -1,27 +1,27 @@ from django.core.checks import Error -from django.core.checks.compatibility.django_4_0 import ( - check_csrf_trusted_origins, -) +from django.core.checks.compatibility.django_4_0 import check_csrf_trusted_origins from django.test import SimpleTestCase from django.test.utils import override_settings class CheckCSRFTrustedOrigins(SimpleTestCase): - - @override_settings(CSRF_TRUSTED_ORIGINS=['example.com']) + @override_settings(CSRF_TRUSTED_ORIGINS=["example.com"]) def test_invalid_url(self): - self.assertEqual(check_csrf_trusted_origins(None), [ - Error( - 'As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS ' - 'setting must start with a scheme (usually http:// or ' - 'https://) but found example.com. See the release notes for ' - 'details.', - id='4_0.E001', - ) - ]) + self.assertEqual( + check_csrf_trusted_origins(None), + [ + Error( + "As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS " + "setting must start with a scheme (usually http:// or " + "https://) but found example.com. See the release notes for " + "details.", + id="4_0.E001", + ) + ], + ) @override_settings( - CSRF_TRUSTED_ORIGINS=['http://example.com', 'https://example.com'], + CSRF_TRUSTED_ORIGINS=["http://example.com", "https://example.com"], ) def test_valid_urls(self): self.assertEqual(check_csrf_trusted_origins(None), []) diff --git a/tests/check_framework/test_async_checks.py b/tests/check_framework/test_async_checks.py index fa7f840172..a054503ca8 100644 --- a/tests/check_framework/test_async_checks.py +++ b/tests/check_framework/test_async_checks.py @@ -6,10 +6,10 @@ from django.test import SimpleTestCase class AsyncCheckTests(SimpleTestCase): - @mock.patch.dict(os.environ, {'DJANGO_ALLOW_ASYNC_UNSAFE': ''}) + @mock.patch.dict(os.environ, {"DJANGO_ALLOW_ASYNC_UNSAFE": ""}) def test_no_allowed_async_unsafe(self): self.assertEqual(check_async_unsafe(None), []) - @mock.patch.dict(os.environ, {'DJANGO_ALLOW_ASYNC_UNSAFE': 'true'}) + @mock.patch.dict(os.environ, {"DJANGO_ALLOW_ASYNC_UNSAFE": "true"}) def test_allowed_async_unsafe_set(self): self.assertEqual(check_async_unsafe(None), [E001]) diff --git a/tests/check_framework/test_caches.py b/tests/check_framework/test_caches.py index 3b6b41d442..93d82e4164 100644 --- a/tests/check_framework/test_caches.py +++ b/tests/check_framework/test_caches.py @@ -2,7 +2,9 @@ import pathlib from django.core.checks import Warning from django.core.checks.caches import ( - E001, check_cache_location_not_exposed, check_default_cache_is_configured, + E001, + check_cache_location_not_exposed, + check_default_cache_is_configured, check_file_based_cache_is_absolute, ) from django.test import SimpleTestCase @@ -11,13 +13,13 @@ from django.test.utils import override_settings class CheckCacheSettingsAppDirsTest(SimpleTestCase): VALID_CACHES_CONFIGURATION = { - 'default': { - 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', + "default": { + "BACKEND": "django.core.cache.backends.locmem.LocMemCache", }, } INVALID_CACHES_CONFIGURATION = { - 'other': { - 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', + "other": { + "BACKEND": "django.core.cache.backends.locmem.LocMemCache", }, } @@ -45,77 +47,89 @@ class CheckCacheLocationTest(SimpleTestCase): @staticmethod def get_settings(setting, cache_path, setting_path): return { - 'CACHES': { - 'default': { - 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', - 'LOCATION': cache_path, + "CACHES": { + "default": { + "BACKEND": "django.core.cache.backends.filebased.FileBasedCache", + "LOCATION": cache_path, }, }, - setting: [setting_path] if setting == 'STATICFILES_DIRS' else setting_path, + setting: [setting_path] if setting == "STATICFILES_DIRS" else setting_path, } def test_cache_path_matches_media_static_setting(self): root = pathlib.Path.cwd() - for setting in ('MEDIA_ROOT', 'STATIC_ROOT', 'STATICFILES_DIRS'): + for setting in ("MEDIA_ROOT", "STATIC_ROOT", "STATICFILES_DIRS"): settings = self.get_settings(setting, root, root) with self.subTest(setting=setting), self.settings(**settings): - msg = self.warning_message % ('matches', setting) - self.assertEqual(check_cache_location_not_exposed(None), [ - Warning(msg, id='caches.W002'), - ]) + msg = self.warning_message % ("matches", setting) + self.assertEqual( + check_cache_location_not_exposed(None), + [ + Warning(msg, id="caches.W002"), + ], + ) def test_cache_path_inside_media_static_setting(self): root = pathlib.Path.cwd() - for setting in ('MEDIA_ROOT', 'STATIC_ROOT', 'STATICFILES_DIRS'): - settings = self.get_settings(setting, root / 'cache', root) + for setting in ("MEDIA_ROOT", "STATIC_ROOT", "STATICFILES_DIRS"): + settings = self.get_settings(setting, root / "cache", root) with self.subTest(setting=setting), self.settings(**settings): - msg = self.warning_message % ('is inside', setting) - self.assertEqual(check_cache_location_not_exposed(None), [ - Warning(msg, id='caches.W002'), - ]) + msg = self.warning_message % ("is inside", setting) + self.assertEqual( + check_cache_location_not_exposed(None), + [ + Warning(msg, id="caches.W002"), + ], + ) def test_cache_path_contains_media_static_setting(self): root = pathlib.Path.cwd() - for setting in ('MEDIA_ROOT', 'STATIC_ROOT', 'STATICFILES_DIRS'): - settings = self.get_settings(setting, root, root / 'other') + for setting in ("MEDIA_ROOT", "STATIC_ROOT", "STATICFILES_DIRS"): + settings = self.get_settings(setting, root, root / "other") with self.subTest(setting=setting), self.settings(**settings): - msg = self.warning_message % ('contains', setting) - self.assertEqual(check_cache_location_not_exposed(None), [ - Warning(msg, id='caches.W002'), - ]) + msg = self.warning_message % ("contains", setting) + self.assertEqual( + check_cache_location_not_exposed(None), + [ + Warning(msg, id="caches.W002"), + ], + ) def test_cache_path_not_conflict(self): root = pathlib.Path.cwd() - for setting in ('MEDIA_ROOT', 'STATIC_ROOT', 'STATICFILES_DIRS'): - settings = self.get_settings(setting, root / 'cache', root / 'other') + for setting in ("MEDIA_ROOT", "STATIC_ROOT", "STATICFILES_DIRS"): + settings = self.get_settings(setting, root / "cache", root / "other") with self.subTest(setting=setting), self.settings(**settings): self.assertEqual(check_cache_location_not_exposed(None), []) def test_staticfiles_dirs_prefix(self): root = pathlib.Path.cwd() tests = [ - (root, root, 'matches'), - (root / 'cache', root, 'is inside'), - (root, root / 'other', 'contains'), + (root, root, "matches"), + (root / "cache", root, "is inside"), + (root, root / "other", "contains"), ] for cache_path, setting_path, msg in tests: settings = self.get_settings( - 'STATICFILES_DIRS', + "STATICFILES_DIRS", cache_path, - ('prefix', setting_path), + ("prefix", setting_path), ) with self.subTest(path=setting_path), self.settings(**settings): - msg = self.warning_message % (msg, 'STATICFILES_DIRS') - self.assertEqual(check_cache_location_not_exposed(None), [ - Warning(msg, id='caches.W002'), - ]) + msg = self.warning_message % (msg, "STATICFILES_DIRS") + self.assertEqual( + check_cache_location_not_exposed(None), + [ + Warning(msg, id="caches.W002"), + ], + ) def test_staticfiles_dirs_prefix_not_conflict(self): root = pathlib.Path.cwd() settings = self.get_settings( - 'STATICFILES_DIRS', - root / 'cache', - ('prefix', root / 'other'), + "STATICFILES_DIRS", + root / "cache", + ("prefix", root / "other"), ) with self.settings(**settings): self.assertEqual(check_cache_location_not_exposed(None), []) @@ -123,25 +137,32 @@ class CheckCacheLocationTest(SimpleTestCase): class CheckCacheAbsolutePath(SimpleTestCase): def test_absolute_path(self): - with self.settings(CACHES={ - 'default': { - 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', - 'LOCATION': pathlib.Path.cwd() / 'cache', - }, - }): + with self.settings( + CACHES={ + "default": { + "BACKEND": "django.core.cache.backends.filebased.FileBasedCache", + "LOCATION": pathlib.Path.cwd() / "cache", + }, + } + ): self.assertEqual(check_file_based_cache_is_absolute(None), []) def test_relative_path(self): - with self.settings(CACHES={ - 'default': { - 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', - 'LOCATION': 'cache', - }, - }): - self.assertEqual(check_file_based_cache_is_absolute(None), [ - Warning( - "Your 'default' cache LOCATION path is relative. Use an " - "absolute path instead.", - id='caches.W003', - ), - ]) + with self.settings( + CACHES={ + "default": { + "BACKEND": "django.core.cache.backends.filebased.FileBasedCache", + "LOCATION": "cache", + }, + } + ): + self.assertEqual( + check_file_based_cache_is_absolute(None), + [ + Warning( + "Your 'default' cache LOCATION path is relative. Use an " + "absolute path instead.", + id="caches.W003", + ), + ], + ) diff --git a/tests/check_framework/test_database.py b/tests/check_framework/test_database.py index c9bc8866e7..8f786474f3 100644 --- a/tests/check_framework/test_database.py +++ b/tests/check_framework/test_database.py @@ -7,46 +7,52 @@ from django.test import TestCase class DatabaseCheckTests(TestCase): - databases = {'default', 'other'} + databases = {"default", "other"} - @mock.patch('django.db.backends.base.validation.BaseDatabaseValidation.check') + @mock.patch("django.db.backends.base.validation.BaseDatabaseValidation.check") def test_database_checks_called(self, mocked_check): check_database_backends() self.assertFalse(mocked_check.called) check_database_backends(databases=self.databases) self.assertTrue(mocked_check.called) - @unittest.skipUnless(connection.vendor == 'mysql', 'Test only for MySQL') + @unittest.skipUnless(connection.vendor == "mysql", "Test only for MySQL") def test_mysql_strict_mode(self): def _clean_sql_mode(): for alias in self.databases: - if hasattr(connections[alias], 'sql_mode'): + if hasattr(connections[alias], "sql_mode"): del connections[alias].sql_mode _clean_sql_mode() good_sql_modes = [ - 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES', - 'STRICT_TRANS_TABLES', - 'STRICT_ALL_TABLES', + "STRICT_TRANS_TABLES,STRICT_ALL_TABLES", + "STRICT_TRANS_TABLES", + "STRICT_ALL_TABLES", ] for sql_mode in good_sql_modes: with mock.patch.object( - connection, 'mysql_server_data', {'sql_mode': sql_mode}, + connection, + "mysql_server_data", + {"sql_mode": sql_mode}, ): self.assertEqual(check_database_backends(databases=self.databases), []) _clean_sql_mode() - bad_sql_modes = ['', 'WHATEVER'] + bad_sql_modes = ["", "WHATEVER"] for sql_mode in bad_sql_modes: mocker_default = mock.patch.object( - connection, 'mysql_server_data', {'sql_mode': sql_mode}, + connection, + "mysql_server_data", + {"sql_mode": sql_mode}, ) mocker_other = mock.patch.object( - connections['other'], 'mysql_server_data', {'sql_mode': sql_mode}, + connections["other"], + "mysql_server_data", + {"sql_mode": sql_mode}, ) with mocker_default, mocker_other: # One warning for each database alias result = check_database_backends(databases=self.databases) self.assertEqual(len(result), 2) - self.assertEqual([r.id for r in result], ['mysql.W002', 'mysql.W002']) + self.assertEqual([r.id for r in result], ["mysql.W002", "mysql.W002"]) _clean_sql_mode() diff --git a/tests/check_framework/test_files.py b/tests/check_framework/test_files.py index 6b30220e37..0672fba9eb 100644 --- a/tests/check_framework/test_files.py +++ b/tests/check_framework/test_files.py @@ -9,7 +9,7 @@ class FilesCheckTests(SimpleTestCase): def test_file_upload_temp_dir(self): tests = [ None, - '', + "", Path.cwd(), str(Path.cwd()), ] @@ -18,7 +18,7 @@ class FilesCheckTests(SimpleTestCase): self.assertEqual(check_setting_file_upload_temp_dir(None), []) def test_file_upload_temp_dir_nonexistent(self): - for setting in ['nonexistent', Path('nonexistent')]: + for setting in ["nonexistent", Path("nonexistent")]: with self.subTest(setting), self.settings(FILE_UPLOAD_TEMP_DIR=setting): self.assertEqual( check_setting_file_upload_temp_dir(None), @@ -26,7 +26,7 @@ class FilesCheckTests(SimpleTestCase): Error( "The FILE_UPLOAD_TEMP_DIR setting refers to the " "nonexistent directory 'nonexistent'.", - id='files.E001', + id="files.E001", ), ], ) diff --git a/tests/check_framework/test_model_checks.py b/tests/check_framework/test_model_checks.py index 3a626038fd..3075a61be8 100644 --- a/tests/check_framework/test_model_checks.py +++ b/tests/check_framework/test_model_checks.py @@ -5,7 +5,10 @@ from django.core.checks import Error, Warning from django.db import models from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature from django.test.utils import ( - isolate_apps, modify_settings, override_settings, override_system_checks, + isolate_apps, + modify_settings, + override_settings, + override_system_checks, ) @@ -13,117 +16,133 @@ class EmptyRouter: pass -@isolate_apps('check_framework', attr_name='apps') +@isolate_apps("check_framework", attr_name="apps") @override_system_checks([checks.model_checks.check_all_models]) class DuplicateDBTableTests(SimpleTestCase): def test_collision_in_same_app(self): class Model1(models.Model): class Meta: - db_table = 'test_table' + db_table = "test_table" class Model2(models.Model): class Meta: - db_table = 'test_table' - - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Error( - "db_table 'test_table' is used by multiple models: " - "check_framework.Model1, check_framework.Model2.", - obj='test_table', - id='models.E028', - ) - ]) - - @override_settings(DATABASE_ROUTERS=['check_framework.test_model_checks.EmptyRouter']) + db_table = "test_table" + + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Error( + "db_table 'test_table' is used by multiple models: " + "check_framework.Model1, check_framework.Model2.", + obj="test_table", + id="models.E028", + ) + ], + ) + + @override_settings( + DATABASE_ROUTERS=["check_framework.test_model_checks.EmptyRouter"] + ) def test_collision_in_same_app_database_routers_installed(self): class Model1(models.Model): class Meta: - db_table = 'test_table' + db_table = "test_table" class Model2(models.Model): class Meta: - db_table = 'test_table' - - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Warning( - "db_table 'test_table' is used by multiple models: " - "check_framework.Model1, check_framework.Model2.", - hint=( - 'You have configured settings.DATABASE_ROUTERS. Verify ' - 'that check_framework.Model1, check_framework.Model2 are ' - 'correctly routed to separate databases.' - ), - obj='test_table', - id='models.W035', - ) - ]) - - @modify_settings(INSTALLED_APPS={'append': 'basic'}) - @isolate_apps('basic', 'check_framework', kwarg_name='apps') + db_table = "test_table" + + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Warning( + "db_table 'test_table' is used by multiple models: " + "check_framework.Model1, check_framework.Model2.", + hint=( + "You have configured settings.DATABASE_ROUTERS. Verify " + "that check_framework.Model1, check_framework.Model2 are " + "correctly routed to separate databases." + ), + obj="test_table", + id="models.W035", + ) + ], + ) + + @modify_settings(INSTALLED_APPS={"append": "basic"}) + @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_collision_across_apps(self, apps): class Model1(models.Model): class Meta: - app_label = 'basic' - db_table = 'test_table' + app_label = "basic" + db_table = "test_table" class Model2(models.Model): class Meta: - app_label = 'check_framework' - db_table = 'test_table' - - self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), [ - Error( - "db_table 'test_table' is used by multiple models: " - "basic.Model1, check_framework.Model2.", - obj='test_table', - id='models.E028', - ) - ]) - - @modify_settings(INSTALLED_APPS={'append': 'basic'}) - @override_settings(DATABASE_ROUTERS=['check_framework.test_model_checks.EmptyRouter']) - @isolate_apps('basic', 'check_framework', kwarg_name='apps') + app_label = "check_framework" + db_table = "test_table" + + self.assertEqual( + checks.run_checks(app_configs=apps.get_app_configs()), + [ + Error( + "db_table 'test_table' is used by multiple models: " + "basic.Model1, check_framework.Model2.", + obj="test_table", + id="models.E028", + ) + ], + ) + + @modify_settings(INSTALLED_APPS={"append": "basic"}) + @override_settings( + DATABASE_ROUTERS=["check_framework.test_model_checks.EmptyRouter"] + ) + @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_collision_across_apps_database_routers_installed(self, apps): class Model1(models.Model): class Meta: - app_label = 'basic' - db_table = 'test_table' + app_label = "basic" + db_table = "test_table" class Model2(models.Model): class Meta: - app_label = 'check_framework' - db_table = 'test_table' - - self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), [ - Warning( - "db_table 'test_table' is used by multiple models: " - "basic.Model1, check_framework.Model2.", - hint=( - 'You have configured settings.DATABASE_ROUTERS. Verify ' - 'that basic.Model1, check_framework.Model2 are correctly ' - 'routed to separate databases.' - ), - obj='test_table', - id='models.W035', - ) - ]) + app_label = "check_framework" + db_table = "test_table" + + self.assertEqual( + checks.run_checks(app_configs=apps.get_app_configs()), + [ + Warning( + "db_table 'test_table' is used by multiple models: " + "basic.Model1, check_framework.Model2.", + hint=( + "You have configured settings.DATABASE_ROUTERS. Verify " + "that basic.Model1, check_framework.Model2 are correctly " + "routed to separate databases." + ), + obj="test_table", + id="models.W035", + ) + ], + ) def test_no_collision_for_unmanaged_models(self): class Unmanaged(models.Model): class Meta: - db_table = 'test_table' + db_table = "test_table" managed = False class Managed(models.Model): class Meta: - db_table = 'test_table' + db_table = "test_table" self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) def test_no_collision_for_proxy_models(self): class Model(models.Model): class Meta: - db_table = 'test_table' + db_table = "test_table" class ProxyModel(Model): class Meta: @@ -133,25 +152,28 @@ class DuplicateDBTableTests(SimpleTestCase): self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) -@isolate_apps('check_framework', attr_name='apps') +@isolate_apps("check_framework", attr_name="apps") @override_system_checks([checks.model_checks.check_all_models]) class IndexNameTests(SimpleTestCase): def test_collision_in_same_model(self): - index = models.Index(fields=['id'], name='foo') + index = models.Index(fields=["id"], name="foo") class Model(models.Model): class Meta: indexes = [index, index] - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Error( - "index name 'foo' is not unique for model check_framework.Model.", - id='models.E029', - ), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Error( + "index name 'foo' is not unique for model check_framework.Model.", + id="models.E029", + ), + ], + ) def test_collision_in_different_models(self): - index = models.Index(fields=['id'], name='foo') + index = models.Index(fields=["id"], name="foo") class Model1(models.Model): class Meta: @@ -161,18 +183,21 @@ class IndexNameTests(SimpleTestCase): class Meta: indexes = [index] - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Error( - "index name 'foo' is not unique among models: " - "check_framework.Model1, check_framework.Model2.", - id='models.E030', - ), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Error( + "index name 'foo' is not unique among models: " + "check_framework.Model1, check_framework.Model2.", + id="models.E030", + ), + ], + ) def test_collision_abstract_model(self): class AbstractModel(models.Model): class Meta: - indexes = [models.Index(fields=['id'], name='foo')] + indexes = [models.Index(fields=["id"], name="foo")] abstract = True class Model1(AbstractModel): @@ -181,20 +206,25 @@ class IndexNameTests(SimpleTestCase): class Model2(AbstractModel): pass - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Error( - "index name 'foo' is not unique among models: " - "check_framework.Model1, check_framework.Model2.", - id='models.E030', - ), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Error( + "index name 'foo' is not unique among models: " + "check_framework.Model1, check_framework.Model2.", + id="models.E030", + ), + ], + ) def test_no_collision_abstract_model_interpolation(self): class AbstractModel(models.Model): name = models.CharField(max_length=20) class Meta: - indexes = [models.Index(fields=['name'], name='%(app_label)s_%(class)s_foo')] + indexes = [ + models.Index(fields=["name"], name="%(app_label)s_%(class)s_foo") + ] abstract = True class Model1(AbstractModel): @@ -205,69 +235,75 @@ class IndexNameTests(SimpleTestCase): self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) - @modify_settings(INSTALLED_APPS={'append': 'basic'}) - @isolate_apps('basic', 'check_framework', kwarg_name='apps') + @modify_settings(INSTALLED_APPS={"append": "basic"}) + @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_collision_across_apps(self, apps): - index = models.Index(fields=['id'], name='foo') + index = models.Index(fields=["id"], name="foo") class Model1(models.Model): class Meta: - app_label = 'basic' + app_label = "basic" indexes = [index] class Model2(models.Model): class Meta: - app_label = 'check_framework' + app_label = "check_framework" indexes = [index] - self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), [ - Error( - "index name 'foo' is not unique among models: basic.Model1, " - "check_framework.Model2.", - id='models.E030', - ), - ]) + self.assertEqual( + checks.run_checks(app_configs=apps.get_app_configs()), + [ + Error( + "index name 'foo' is not unique among models: basic.Model1, " + "check_framework.Model2.", + id="models.E030", + ), + ], + ) - @modify_settings(INSTALLED_APPS={'append': 'basic'}) - @isolate_apps('basic', 'check_framework', kwarg_name='apps') + @modify_settings(INSTALLED_APPS={"append": "basic"}) + @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_no_collision_across_apps_interpolation(self, apps): - index = models.Index(fields=['id'], name='%(app_label)s_%(class)s_foo') + index = models.Index(fields=["id"], name="%(app_label)s_%(class)s_foo") class Model1(models.Model): class Meta: - app_label = 'basic' + app_label = "basic" constraints = [index] class Model2(models.Model): class Meta: - app_label = 'check_framework' + app_label = "check_framework" constraints = [index] self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), []) -@isolate_apps('check_framework', attr_name='apps') +@isolate_apps("check_framework", attr_name="apps") @override_system_checks([checks.model_checks.check_all_models]) -@skipUnlessDBFeature('supports_table_check_constraints') +@skipUnlessDBFeature("supports_table_check_constraints") class ConstraintNameTests(TestCase): def test_collision_in_same_model(self): class Model(models.Model): class Meta: constraints = [ - models.CheckConstraint(check=models.Q(id__gt=0), name='foo'), - models.CheckConstraint(check=models.Q(id__lt=100), name='foo'), + models.CheckConstraint(check=models.Q(id__gt=0), name="foo"), + models.CheckConstraint(check=models.Q(id__lt=100), name="foo"), ] - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Error( - "constraint name 'foo' is not unique for model " - "check_framework.Model.", - id='models.E031', - ), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Error( + "constraint name 'foo' is not unique for model " + "check_framework.Model.", + id="models.E031", + ), + ], + ) def test_collision_in_different_models(self): - constraint = models.CheckConstraint(check=models.Q(id__gt=0), name='foo') + constraint = models.CheckConstraint(check=models.Q(id__gt=0), name="foo") class Model1(models.Model): class Meta: @@ -277,18 +313,23 @@ class ConstraintNameTests(TestCase): class Meta: constraints = [constraint] - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Error( - "constraint name 'foo' is not unique among models: " - "check_framework.Model1, check_framework.Model2.", - id='models.E032', - ), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Error( + "constraint name 'foo' is not unique among models: " + "check_framework.Model1, check_framework.Model2.", + id="models.E032", + ), + ], + ) def test_collision_abstract_model(self): class AbstractModel(models.Model): class Meta: - constraints = [models.CheckConstraint(check=models.Q(id__gt=0), name='foo')] + constraints = [ + models.CheckConstraint(check=models.Q(id__gt=0), name="foo") + ] abstract = True class Model1(AbstractModel): @@ -297,19 +338,24 @@ class ConstraintNameTests(TestCase): class Model2(AbstractModel): pass - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Error( - "constraint name 'foo' is not unique among models: " - "check_framework.Model1, check_framework.Model2.", - id='models.E032', - ), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Error( + "constraint name 'foo' is not unique among models: " + "check_framework.Model1, check_framework.Model2.", + id="models.E032", + ), + ], + ) def test_no_collision_abstract_model_interpolation(self): class AbstractModel(models.Model): class Meta: constraints = [ - models.CheckConstraint(check=models.Q(id__gt=0), name='%(app_label)s_%(class)s_foo'), + models.CheckConstraint( + check=models.Q(id__gt=0), name="%(app_label)s_%(class)s_foo" + ), ] abstract = True @@ -321,42 +367,47 @@ class ConstraintNameTests(TestCase): self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) - @modify_settings(INSTALLED_APPS={'append': 'basic'}) - @isolate_apps('basic', 'check_framework', kwarg_name='apps') + @modify_settings(INSTALLED_APPS={"append": "basic"}) + @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_collision_across_apps(self, apps): - constraint = models.CheckConstraint(check=models.Q(id__gt=0), name='foo') + constraint = models.CheckConstraint(check=models.Q(id__gt=0), name="foo") class Model1(models.Model): class Meta: - app_label = 'basic' + app_label = "basic" constraints = [constraint] class Model2(models.Model): class Meta: - app_label = 'check_framework' + app_label = "check_framework" constraints = [constraint] - self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), [ - Error( - "constraint name 'foo' is not unique among models: " - "basic.Model1, check_framework.Model2.", - id='models.E032', - ), - ]) + self.assertEqual( + checks.run_checks(app_configs=apps.get_app_configs()), + [ + Error( + "constraint name 'foo' is not unique among models: " + "basic.Model1, check_framework.Model2.", + id="models.E032", + ), + ], + ) - @modify_settings(INSTALLED_APPS={'append': 'basic'}) - @isolate_apps('basic', 'check_framework', kwarg_name='apps') + @modify_settings(INSTALLED_APPS={"append": "basic"}) + @isolate_apps("basic", "check_framework", kwarg_name="apps") def test_no_collision_across_apps_interpolation(self, apps): - constraint = models.CheckConstraint(check=models.Q(id__gt=0), name='%(app_label)s_%(class)s_foo') + constraint = models.CheckConstraint( + check=models.Q(id__gt=0), name="%(app_label)s_%(class)s_foo" + ) class Model1(models.Model): class Meta: - app_label = 'basic' + app_label = "basic" constraints = [constraint] class Model2(models.Model): class Meta: - app_label = 'check_framework' + app_label = "check_framework" constraints = [constraint] self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), []) @@ -366,14 +417,14 @@ def mocked_is_overridden(self, setting): # Force treating DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' as a not # overridden setting. return ( - setting != 'DEFAULT_AUTO_FIELD' or - self.DEFAULT_AUTO_FIELD != 'django.db.models.AutoField' + setting != "DEFAULT_AUTO_FIELD" + or self.DEFAULT_AUTO_FIELD != "django.db.models.AutoField" ) -@mock.patch('django.conf.UserSettingsHolder.is_overridden', mocked_is_overridden) -@override_settings(DEFAULT_AUTO_FIELD='django.db.models.AutoField') -@isolate_apps('check_framework.apps.CheckDefaultPKConfig', attr_name='apps') +@mock.patch("django.conf.UserSettingsHolder.is_overridden", mocked_is_overridden) +@override_settings(DEFAULT_AUTO_FIELD="django.db.models.AutoField") +@isolate_apps("check_framework.apps.CheckDefaultPKConfig", attr_name="apps") @override_system_checks([checks.model_checks.check_all_models]) class ModelDefaultAutoFieldTests(SimpleTestCase): msg = ( @@ -390,9 +441,12 @@ class ModelDefaultAutoFieldTests(SimpleTestCase): class Model(models.Model): pass - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Warning(self.msg, hint=self.hint, obj=Model, id='models.W042'), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Warning(self.msg, hint=self.hint, obj=Model, id="models.W042"), + ], + ) def test_explicit_inherited_pk(self): class Parent(models.Model): @@ -406,7 +460,7 @@ class ModelDefaultAutoFieldTests(SimpleTestCase): def test_skipped_on_model_with_invalid_app_label(self): class Model(models.Model): class Meta: - app_label = 'invalid_app_label' + app_label = "invalid_app_label" self.assertEqual(Model.check(), []) @@ -434,9 +488,12 @@ class ModelDefaultAutoFieldTests(SimpleTestCase): class Child(Parent): pass - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Warning(self.msg, hint=self.hint, obj=Parent, id='models.W042'), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Warning(self.msg, hint=self.hint, obj=Parent, id="models.W042"), + ], + ) def test_auto_created_inherited_parent_link(self): class Parent(models.Model): @@ -445,9 +502,12 @@ class ModelDefaultAutoFieldTests(SimpleTestCase): class Child(Parent): parent_ptr = models.OneToOneField(Parent, models.CASCADE, parent_link=True) - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Warning(self.msg, hint=self.hint, obj=Parent, id='models.W042'), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Warning(self.msg, hint=self.hint, obj=Parent, id="models.W042"), + ], + ) def test_auto_created_pk_inherited_abstract_parent(self): class Parent(models.Model): @@ -457,11 +517,14 @@ class ModelDefaultAutoFieldTests(SimpleTestCase): class Child(Parent): pass - self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ - Warning(self.msg, hint=self.hint, obj=Child, id='models.W042'), - ]) + self.assertEqual( + checks.run_checks(app_configs=self.apps.get_app_configs()), + [ + Warning(self.msg, hint=self.hint, obj=Child, id="models.W042"), + ], + ) - @override_settings(DEFAULT_AUTO_FIELD='django.db.models.BigAutoField') + @override_settings(DEFAULT_AUTO_FIELD="django.db.models.BigAutoField") def test_default_auto_field_setting(self): class Model(models.Model): pass @@ -474,10 +537,10 @@ class ModelDefaultAutoFieldTests(SimpleTestCase): self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) - @isolate_apps('check_framework.apps.CheckPKConfig', kwarg_name='apps') + @isolate_apps("check_framework.apps.CheckPKConfig", kwarg_name="apps") def test_app_default_auto_field(self, apps): class ModelWithPkViaAppConfig(models.Model): class Meta: - app_label = 'check_framework.apps.CheckPKConfig' + app_label = "check_framework.apps.CheckPKConfig" self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), []) diff --git a/tests/check_framework/test_model_field_deprecation.py b/tests/check_framework/test_model_field_deprecation.py index f1fe285d6d..668553c04e 100644 --- a/tests/check_framework/test_model_field_deprecation.py +++ b/tests/check_framework/test_model_field_deprecation.py @@ -4,7 +4,7 @@ from django.test import SimpleTestCase from django.test.utils import isolate_apps -@isolate_apps('check_framework') +@isolate_apps("check_framework") class TestDeprecatedField(SimpleTestCase): def test_default_details(self): class MyField(models.Field): @@ -14,37 +14,43 @@ class TestDeprecatedField(SimpleTestCase): name = MyField() model = Model() - self.assertEqual(model.check(), [ - checks.Warning( - msg='MyField has been deprecated.', - obj=Model._meta.get_field('name'), - id='fields.WXXX', - ) - ]) + self.assertEqual( + model.check(), + [ + checks.Warning( + msg="MyField has been deprecated.", + obj=Model._meta.get_field("name"), + id="fields.WXXX", + ) + ], + ) def test_user_specified_details(self): class MyField(models.Field): system_check_deprecated_details = { - 'msg': 'This field is deprecated and will be removed soon.', - 'hint': 'Use something else.', - 'id': 'fields.W999', + "msg": "This field is deprecated and will be removed soon.", + "hint": "Use something else.", + "id": "fields.W999", } class Model(models.Model): name = MyField() model = Model() - self.assertEqual(model.check(), [ - checks.Warning( - msg='This field is deprecated and will be removed soon.', - hint='Use something else.', - obj=Model._meta.get_field('name'), - id='fields.W999', - ) - ]) + self.assertEqual( + model.check(), + [ + checks.Warning( + msg="This field is deprecated and will be removed soon.", + hint="Use something else.", + obj=Model._meta.get_field("name"), + id="fields.W999", + ) + ], + ) -@isolate_apps('check_framework') +@isolate_apps("check_framework") class TestRemovedField(SimpleTestCase): def test_default_details(self): class MyField(models.Field): @@ -54,31 +60,37 @@ class TestRemovedField(SimpleTestCase): name = MyField() model = Model() - self.assertEqual(model.check(), [ - checks.Error( - msg='MyField has been removed except for support in historical migrations.', - obj=Model._meta.get_field('name'), - id='fields.EXXX', - ) - ]) + self.assertEqual( + model.check(), + [ + checks.Error( + msg="MyField has been removed except for support in historical migrations.", + obj=Model._meta.get_field("name"), + id="fields.EXXX", + ) + ], + ) def test_user_specified_details(self): class MyField(models.Field): system_check_removed_details = { - 'msg': 'Support for this field is gone.', - 'hint': 'Use something else.', - 'id': 'fields.E999', + "msg": "Support for this field is gone.", + "hint": "Use something else.", + "id": "fields.E999", } class Model(models.Model): name = MyField() model = Model() - self.assertEqual(model.check(), [ - checks.Error( - msg='Support for this field is gone.', - hint='Use something else.', - obj=Model._meta.get_field('name'), - id='fields.E999', - ) - ]) + self.assertEqual( + model.check(), + [ + checks.Error( + msg="Support for this field is gone.", + hint="Use something else.", + obj=Model._meta.get_field("name"), + id="fields.E999", + ) + ], + ) diff --git a/tests/check_framework/test_multi_db.py b/tests/check_framework/test_multi_db.py index 0697b3b94a..aca0a1f472 100644 --- a/tests/check_framework/test_multi_db.py +++ b/tests/check_framework/test_multi_db.py @@ -9,25 +9,25 @@ class TestRouter: """ Routes to the 'other' database if the model name starts with 'Other'. """ + def allow_migrate(self, db, app_label, model_name=None, **hints): - return db == ('other' if model_name.startswith('other') else 'default') + return db == ("other" if model_name.startswith("other") else "default") @override_settings(DATABASE_ROUTERS=[TestRouter()]) -@isolate_apps('check_framework') +@isolate_apps("check_framework") class TestMultiDBChecks(SimpleTestCase): - def _patch_check_field_on(self, db): - return mock.patch.object(connections[db].validation, 'check_field') + return mock.patch.object(connections[db].validation, "check_field") def test_checks_called_on_the_default_database(self): class Model(models.Model): field = models.CharField(max_length=100) model = Model() - with self._patch_check_field_on('default') as mock_check_field_default: - with self._patch_check_field_on('other') as mock_check_field_other: - model.check(databases={'default', 'other'}) + with self._patch_check_field_on("default") as mock_check_field_default: + with self._patch_check_field_on("other") as mock_check_field_other: + model.check(databases={"default", "other"}) self.assertTrue(mock_check_field_default.called) self.assertFalse(mock_check_field_other.called) @@ -36,8 +36,8 @@ class TestMultiDBChecks(SimpleTestCase): field = models.CharField(max_length=100) model = OtherModel() - with self._patch_check_field_on('other') as mock_check_field_other: - with self._patch_check_field_on('default') as mock_check_field_default: - model.check(databases={'default', 'other'}) + with self._patch_check_field_on("other") as mock_check_field_other: + with self._patch_check_field_on("default") as mock_check_field_default: + model.check(databases={"default", "other"}) self.assertTrue(mock_check_field_other.called) self.assertFalse(mock_check_field_default.called) diff --git a/tests/check_framework/test_security.py b/tests/check_framework/test_security.py index 9002deefc5..413e2da1fa 100644 --- a/tests/check_framework/test_security.py +++ b/tests/check_framework/test_security.py @@ -22,7 +22,7 @@ class CheckSessionCookieSecureTest(SimpleTestCase): @override_settings( SESSION_COOKIE_SECURE=False, INSTALLED_APPS=[], - MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware'], + MIDDLEWARE=["django.contrib.sessions.middleware.SessionMiddleware"], ) def test_session_cookie_secure_with_middleware(self): """ @@ -35,7 +35,7 @@ class CheckSessionCookieSecureTest(SimpleTestCase): @override_settings( SESSION_COOKIE_SECURE=False, INSTALLED_APPS=["django.contrib.sessions"], - MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware'], + MIDDLEWARE=["django.contrib.sessions.middleware.SessionMiddleware"], ) def test_session_cookie_secure_both(self): """ @@ -47,7 +47,7 @@ class CheckSessionCookieSecureTest(SimpleTestCase): @override_settings( SESSION_COOKIE_SECURE=True, INSTALLED_APPS=["django.contrib.sessions"], - MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware'], + MIDDLEWARE=["django.contrib.sessions.middleware.SessionMiddleware"], ) def test_session_cookie_secure_true(self): """ @@ -72,7 +72,7 @@ class CheckSessionCookieHttpOnlyTest(SimpleTestCase): @override_settings( SESSION_COOKIE_HTTPONLY=False, INSTALLED_APPS=[], - MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware'], + MIDDLEWARE=["django.contrib.sessions.middleware.SessionMiddleware"], ) def test_session_cookie_httponly_with_middleware(self): """ @@ -85,7 +85,7 @@ class CheckSessionCookieHttpOnlyTest(SimpleTestCase): @override_settings( SESSION_COOKIE_HTTPONLY=False, INSTALLED_APPS=["django.contrib.sessions"], - MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware'], + MIDDLEWARE=["django.contrib.sessions.middleware.SessionMiddleware"], ) def test_session_cookie_httponly_both(self): """ @@ -97,7 +97,7 @@ class CheckSessionCookieHttpOnlyTest(SimpleTestCase): @override_settings( SESSION_COOKIE_HTTPONLY=True, INSTALLED_APPS=["django.contrib.sessions"], - MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware'], + MIDDLEWARE=["django.contrib.sessions.middleware.SessionMiddleware"], ) def test_session_cookie_httponly_true(self): """ @@ -114,7 +114,7 @@ class CheckCSRFMiddlewareTest(SimpleTestCase): """ self.assertEqual(csrf.check_csrf_middleware(None), [csrf.W003]) - @override_settings(MIDDLEWARE=['django.middleware.csrf.CsrfViewMiddleware']) + @override_settings(MIDDLEWARE=["django.middleware.csrf.CsrfViewMiddleware"]) def test_with_csrf_middleware(self): self.assertEqual(csrf.check_csrf_middleware(None), []) @@ -167,7 +167,7 @@ class CheckSecurityMiddlewareTest(SimpleTestCase): """ self.assertEqual(base.check_security_middleware(None), [base.W001]) - @override_settings(MIDDLEWARE=['django.middleware.security.SecurityMiddleware']) + @override_settings(MIDDLEWARE=["django.middleware.security.SecurityMiddleware"]) def test_with_security_middleware(self): self.assertEqual(base.check_security_middleware(None), []) @@ -254,7 +254,9 @@ class CheckStrictTransportSecurityPreloadTest(SimpleTestCase): """ self.assertEqual(base.check_sts_preload(None), [base.W021]) - @override_settings(MIDDLEWARE=[], SECURE_HSTS_PRELOAD=False, SECURE_HSTS_SECONDS=3600) + @override_settings( + MIDDLEWARE=[], SECURE_HSTS_PRELOAD=False, SECURE_HSTS_SECONDS=3600 + ) def test_no_sts_preload_no_middleware(self): """ Don't warn if SecurityMiddleware isn't installed. @@ -289,7 +291,9 @@ class CheckXFrameOptionsMiddlewareTest(SimpleTestCase): """ self.assertEqual(base.check_xframe_options_middleware(None), [base.W002]) - @override_settings(MIDDLEWARE=["django.middleware.clickjacking.XFrameOptionsMiddleware"]) + @override_settings( + MIDDLEWARE=["django.middleware.clickjacking.XFrameOptionsMiddleware"] + ) def test_middleware_installed(self): self.assertEqual(base.check_xframe_options_middleware(None), []) @@ -297,7 +301,7 @@ class CheckXFrameOptionsMiddlewareTest(SimpleTestCase): class CheckXFrameOptionsDenyTest(SimpleTestCase): @override_settings( MIDDLEWARE=["django.middleware.clickjacking.XFrameOptionsMiddleware"], - X_FRAME_OPTIONS='SAMEORIGIN', + X_FRAME_OPTIONS="SAMEORIGIN", ) def test_x_frame_options_not_deny(self): """ @@ -306,7 +310,7 @@ class CheckXFrameOptionsDenyTest(SimpleTestCase): """ self.assertEqual(base.check_xframe_deny(None), [base.W019]) - @override_settings(MIDDLEWARE=[], X_FRAME_OPTIONS='SAMEORIGIN') + @override_settings(MIDDLEWARE=[], X_FRAME_OPTIONS="SAMEORIGIN") def test_middleware_not_installed(self): """ No error if XFrameOptionsMiddleware isn't in MIDDLEWARE even if @@ -316,7 +320,7 @@ class CheckXFrameOptionsDenyTest(SimpleTestCase): @override_settings( MIDDLEWARE=["django.middleware.clickjacking.XFrameOptionsMiddleware"], - X_FRAME_OPTIONS='DENY', + X_FRAME_OPTIONS="DENY", ) def test_xframe_deny(self): self.assertEqual(base.check_xframe_deny(None), []) @@ -377,13 +381,15 @@ class CheckSSLRedirectTest(SimpleTestCase): class CheckSecretKeyTest(SimpleTestCase): - @override_settings(SECRET_KEY=('abcdefghijklmnopqrstuvwx' * 2) + 'ab') + @override_settings(SECRET_KEY=("abcdefghijklmnopqrstuvwx" * 2) + "ab") def test_okay_secret_key(self): self.assertEqual(len(settings.SECRET_KEY), base.SECRET_KEY_MIN_LENGTH) - self.assertGreater(len(set(settings.SECRET_KEY)), base.SECRET_KEY_MIN_UNIQUE_CHARACTERS) + self.assertGreater( + len(set(settings.SECRET_KEY)), base.SECRET_KEY_MIN_UNIQUE_CHARACTERS + ) self.assertEqual(base.check_secret_key(None), []) - @override_settings(SECRET_KEY='') + @override_settings(SECRET_KEY="") def test_empty_secret_key(self): self.assertEqual(base.check_secret_key(None), [base.W009]) @@ -402,20 +408,22 @@ class CheckSecretKeyTest(SimpleTestCase): def test_insecure_secret_key(self): self.assertEqual(base.check_secret_key(None), [base.W009]) - @override_settings(SECRET_KEY=('abcdefghijklmnopqrstuvwx' * 2) + 'a') + @override_settings(SECRET_KEY=("abcdefghijklmnopqrstuvwx" * 2) + "a") def test_low_length_secret_key(self): self.assertEqual(len(settings.SECRET_KEY), base.SECRET_KEY_MIN_LENGTH - 1) self.assertEqual(base.check_secret_key(None), [base.W009]) - @override_settings(SECRET_KEY='abcd' * 20) + @override_settings(SECRET_KEY="abcd" * 20) def test_low_entropy_secret_key(self): self.assertGreater(len(settings.SECRET_KEY), base.SECRET_KEY_MIN_LENGTH) - self.assertLess(len(set(settings.SECRET_KEY)), base.SECRET_KEY_MIN_UNIQUE_CHARACTERS) + self.assertLess( + len(set(settings.SECRET_KEY)), base.SECRET_KEY_MIN_UNIQUE_CHARACTERS + ) self.assertEqual(base.check_secret_key(None), [base.W009]) class CheckSecretKeyFallbacksTest(SimpleTestCase): - @override_settings(SECRET_KEY_FALLBACKS=[('abcdefghijklmnopqrstuvwx' * 2) + 'ab']) + @override_settings(SECRET_KEY_FALLBACKS=[("abcdefghijklmnopqrstuvwx" * 2) + "ab"]) def test_okay_secret_key_fallbacks(self): self.assertEqual( len(settings.SECRET_KEY_FALLBACKS[0]), @@ -430,29 +438,38 @@ class CheckSecretKeyFallbacksTest(SimpleTestCase): def test_no_secret_key_fallbacks(self): with self.settings(SECRET_KEY_FALLBACKS=None): del settings.SECRET_KEY_FALLBACKS - self.assertEqual(base.check_secret_key_fallbacks(None), [ - Warning(base.W025.msg % 'SECRET_KEY_FALLBACKS', id=base.W025.id), - ]) + self.assertEqual( + base.check_secret_key_fallbacks(None), + [ + Warning(base.W025.msg % "SECRET_KEY_FALLBACKS", id=base.W025.id), + ], + ) - @override_settings(SECRET_KEY_FALLBACKS=[ - base.SECRET_KEY_INSECURE_PREFIX + get_random_secret_key() - ]) + @override_settings( + SECRET_KEY_FALLBACKS=[base.SECRET_KEY_INSECURE_PREFIX + get_random_secret_key()] + ) def test_insecure_secret_key_fallbacks(self): - self.assertEqual(base.check_secret_key_fallbacks(None), [ - Warning(base.W025.msg % 'SECRET_KEY_FALLBACKS[0]', id=base.W025.id), - ]) + self.assertEqual( + base.check_secret_key_fallbacks(None), + [ + Warning(base.W025.msg % "SECRET_KEY_FALLBACKS[0]", id=base.W025.id), + ], + ) - @override_settings(SECRET_KEY_FALLBACKS=[('abcdefghijklmnopqrstuvwx' * 2) + 'a']) + @override_settings(SECRET_KEY_FALLBACKS=[("abcdefghijklmnopqrstuvwx" * 2) + "a"]) def test_low_length_secret_key_fallbacks(self): self.assertEqual( len(settings.SECRET_KEY_FALLBACKS[0]), base.SECRET_KEY_MIN_LENGTH - 1, ) - self.assertEqual(base.check_secret_key_fallbacks(None), [ - Warning(base.W025.msg % 'SECRET_KEY_FALLBACKS[0]', id=base.W025.id), - ]) + self.assertEqual( + base.check_secret_key_fallbacks(None), + [ + Warning(base.W025.msg % "SECRET_KEY_FALLBACKS[0]", id=base.W025.id), + ], + ) - @override_settings(SECRET_KEY_FALLBACKS=['abcd' * 20]) + @override_settings(SECRET_KEY_FALLBACKS=["abcd" * 20]) def test_low_entropy_secret_key_fallbacks(self): self.assertGreater( len(settings.SECRET_KEY_FALLBACKS[0]), @@ -462,29 +479,42 @@ class CheckSecretKeyFallbacksTest(SimpleTestCase): len(set(settings.SECRET_KEY_FALLBACKS[0])), base.SECRET_KEY_MIN_UNIQUE_CHARACTERS, ) - self.assertEqual(base.check_secret_key_fallbacks(None), [ - Warning(base.W025.msg % 'SECRET_KEY_FALLBACKS[0]', id=base.W025.id), - ]) - - @override_settings(SECRET_KEY_FALLBACKS=[ - ('abcdefghijklmnopqrstuvwx' * 2) + 'ab', - 'badkey', - ]) + self.assertEqual( + base.check_secret_key_fallbacks(None), + [ + Warning(base.W025.msg % "SECRET_KEY_FALLBACKS[0]", id=base.W025.id), + ], + ) + + @override_settings( + SECRET_KEY_FALLBACKS=[ + ("abcdefghijklmnopqrstuvwx" * 2) + "ab", + "badkey", + ] + ) def test_multiple_keys(self): - self.assertEqual(base.check_secret_key_fallbacks(None), [ - Warning(base.W025.msg % 'SECRET_KEY_FALLBACKS[1]', id=base.W025.id), - ]) - - @override_settings(SECRET_KEY_FALLBACKS=[ - ('abcdefghijklmnopqrstuvwx' * 2) + 'ab', - 'badkey1', - 'badkey2', - ]) + self.assertEqual( + base.check_secret_key_fallbacks(None), + [ + Warning(base.W025.msg % "SECRET_KEY_FALLBACKS[1]", id=base.W025.id), + ], + ) + + @override_settings( + SECRET_KEY_FALLBACKS=[ + ("abcdefghijklmnopqrstuvwx" * 2) + "ab", + "badkey1", + "badkey2", + ] + ) def test_multiple_bad_keys(self): - self.assertEqual(base.check_secret_key_fallbacks(None), [ - Warning(base.W025.msg % 'SECRET_KEY_FALLBACKS[1]', id=base.W025.id), - Warning(base.W025.msg % 'SECRET_KEY_FALLBACKS[2]', id=base.W025.id), - ]) + self.assertEqual( + base.check_secret_key_fallbacks(None), + [ + Warning(base.W025.msg % "SECRET_KEY_FALLBACKS[1]", id=base.W025.id), + Warning(base.W025.msg % "SECRET_KEY_FALLBACKS[2]", id=base.W025.id), + ], + ) class CheckDebugTest(SimpleTestCase): @@ -505,14 +535,14 @@ class CheckAllowedHostsTest(SimpleTestCase): def test_allowed_hosts_empty(self): self.assertEqual(base.check_allowed_hosts(None), [base.W020]) - @override_settings(ALLOWED_HOSTS=['.example.com']) + @override_settings(ALLOWED_HOSTS=[".example.com"]) def test_allowed_hosts_set(self): self.assertEqual(base.check_allowed_hosts(None), []) class CheckReferrerPolicyTest(SimpleTestCase): @override_settings( - MIDDLEWARE=['django.middleware.security.SecurityMiddleware'], + MIDDLEWARE=["django.middleware.security.SecurityMiddleware"], SECURE_REFERRER_POLICY=None, ) def test_no_referrer_policy(self): @@ -526,22 +556,24 @@ class CheckReferrerPolicyTest(SimpleTestCase): """ self.assertEqual(base.check_referrer_policy(None), []) - @override_settings(MIDDLEWARE=['django.middleware.security.SecurityMiddleware']) + @override_settings(MIDDLEWARE=["django.middleware.security.SecurityMiddleware"]) def test_with_referrer_policy(self): tests = ( - 'strict-origin', - 'strict-origin,origin', - 'strict-origin, origin', - ['strict-origin', 'origin'], - ('strict-origin', 'origin'), + "strict-origin", + "strict-origin,origin", + "strict-origin, origin", + ["strict-origin", "origin"], + ("strict-origin", "origin"), ) for value in tests: - with self.subTest(value=value), override_settings(SECURE_REFERRER_POLICY=value): + with self.subTest(value=value), override_settings( + SECURE_REFERRER_POLICY=value + ): self.assertEqual(base.check_referrer_policy(None), []) @override_settings( - MIDDLEWARE=['django.middleware.security.SecurityMiddleware'], - SECURE_REFERRER_POLICY='invalid-value', + MIDDLEWARE=["django.middleware.security.SecurityMiddleware"], + SECURE_REFERRER_POLICY="invalid-value", ) def test_with_invalid_referrer_policy(self): self.assertEqual(base.check_referrer_policy(None), [base.E023]) @@ -552,20 +584,20 @@ def failure_view_with_invalid_signature(): class CSRFFailureViewTest(SimpleTestCase): - @override_settings(CSRF_FAILURE_VIEW='') + @override_settings(CSRF_FAILURE_VIEW="") def test_failure_view_import_error(self): self.assertEqual( csrf.check_csrf_failure_view(None), [ Error( "The CSRF failure view '' could not be imported.", - id='security.E102', + id="security.E102", ) ], ) @override_settings( - CSRF_FAILURE_VIEW='check_framework.test_security.failure_view_with_invalid_signature', + CSRF_FAILURE_VIEW="check_framework.test_security.failure_view_with_invalid_signature", ) def test_failure_view_invalid_signature(self): msg = ( @@ -575,21 +607,21 @@ class CSRFFailureViewTest(SimpleTestCase): ) self.assertEqual( csrf.check_csrf_failure_view(None), - [Error(msg, id='security.E101')], + [Error(msg, id="security.E101")], ) class CheckCrossOriginOpenerPolicyTest(SimpleTestCase): @override_settings( - MIDDLEWARE=['django.middleware.security.SecurityMiddleware'], + MIDDLEWARE=["django.middleware.security.SecurityMiddleware"], SECURE_CROSS_ORIGIN_OPENER_POLICY=None, ) def test_no_coop(self): self.assertEqual(base.check_cross_origin_opener_policy(None), []) - @override_settings(MIDDLEWARE=['django.middleware.security.SecurityMiddleware']) + @override_settings(MIDDLEWARE=["django.middleware.security.SecurityMiddleware"]) def test_with_coop(self): - tests = ['same-origin', 'same-origin-allow-popups', 'unsafe-none'] + tests = ["same-origin", "same-origin-allow-popups", "unsafe-none"] for value in tests: with self.subTest(value=value), override_settings( SECURE_CROSS_ORIGIN_OPENER_POLICY=value, @@ -597,8 +629,8 @@ class CheckCrossOriginOpenerPolicyTest(SimpleTestCase): self.assertEqual(base.check_cross_origin_opener_policy(None), []) @override_settings( - MIDDLEWARE=['django.middleware.security.SecurityMiddleware'], - SECURE_CROSS_ORIGIN_OPENER_POLICY='invalid-value', + MIDDLEWARE=["django.middleware.security.SecurityMiddleware"], + SECURE_CROSS_ORIGIN_OPENER_POLICY="invalid-value", ) def test_with_invalid_coop(self): self.assertEqual(base.check_cross_origin_opener_policy(None), [base.E024]) diff --git a/tests/check_framework/test_templates.py b/tests/check_framework/test_templates.py index 88c0479436..352a017e55 100644 --- a/tests/check_framework/test_templates.py +++ b/tests/check_framework/test_templates.py @@ -2,8 +2,12 @@ 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, + 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 @@ -12,10 +16,10 @@ 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'], + "BACKEND": "django.template.backends.django.DjangoTemplates", + "APP_DIRS": True, + "OPTIONS": { + "loaders": ["django.template.loaders.filesystem.Loader"], }, }, ] @@ -29,13 +33,13 @@ class CheckTemplateSettingsAppDirsTest(SimpleTestCase): def test_app_dirs_removed(self): TEMPLATES = deepcopy(self.TEMPLATES_APP_DIRS_AND_LOADERS) - del TEMPLATES[0]['APP_DIRS'] + 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'] + del TEMPLATES[0]["OPTIONS"]["loaders"] with self.settings(TEMPLATES=TEMPLATES): self.assertEqual(check_setting_app_dirs_loaders(None), []) @@ -43,15 +47,15 @@ class CheckTemplateSettingsAppDirsTest(SimpleTestCase): 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": False, }, }, { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'OPTIONS': { - 'string_if_invalid': 42, + "BACKEND": "django.template.backends.django.DjangoTemplates", + "OPTIONS": { + "string_if_invalid": 42, }, }, ] @@ -61,31 +65,41 @@ class CheckTemplateStringIfInvalidTest(SimpleTestCase): 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__) + 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]) + 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' + 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' + 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'] + del TEMPLATES[1]["OPTIONS"]["string_if_invalid"] with self.settings(TEMPLATES=TEMPLATES): self.assertEqual(check_string_if_invalid_is_string(None), [self.error1]) @@ -108,18 +122,20 @@ class CheckTemplateTagLibrariesWithSameName(SimpleTestCase): @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}', + "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', - ]) + @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), @@ -127,46 +143,67 @@ class CheckTemplateTagLibrariesWithSameName(SimpleTestCase): ) 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'), - ]): + 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' - ]) + @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'", + with self.settings( + TEMPLATES=[ + self.get_settings( + "same_tags", + "different_tags_app.templatetags.different_tags", ), - id=E003.id, - )]) + ] + ): + 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'), - ]): + 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', - ]) + @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), []) diff --git a/tests/check_framework/test_translation.py b/tests/check_framework/test_translation.py index 8747a52cda..b20ed90860 100644 --- a/tests/check_framework/test_translation.py +++ b/tests/check_framework/test_translation.py @@ -1,37 +1,38 @@ from django.core.checks import Error from django.core.checks.translation import ( - check_language_settings_consistent, check_setting_language_code, - check_setting_languages, check_setting_languages_bidi, + check_language_settings_consistent, + check_setting_language_code, + check_setting_languages, + check_setting_languages_bidi, ) from django.test import SimpleTestCase, override_settings class TranslationCheckTests(SimpleTestCase): - def setUp(self): self.valid_tags = ( - 'en', # language - 'mas', # language - 'sgn-ase', # language+extlang - 'fr-CA', # language+region - 'es-419', # language+region - 'zh-Hans', # language+script - 'ca-ES-valencia', # language+region+variant + "en", # language + "mas", # language + "sgn-ase", # language+extlang + "fr-CA", # language+region + "es-419", # language+region + "zh-Hans", # language+script + "ca-ES-valencia", # language+region+variant # FIXME: The following should be invalid: - 'sr@latin', # language+script + "sr@latin", # language+script ) self.invalid_tags = ( - None, # invalid type: None. - 123, # invalid type: int. - b'en', # invalid type: bytes. - 'eü', # non-latin characters. - 'en_US', # locale format. - 'en--us', # empty subtag. - '-en', # leading separator. - 'en-', # trailing separator. - 'en-US.UTF-8', # language tag w/ locale encoding. - 'en_US.UTF-8', # locale format - language w/ region and encoding. - 'ca_ES@valencia', # locale format - language w/ region and variant. + None, # invalid type: None. + 123, # invalid type: int. + b"en", # invalid type: bytes. + "eü", # non-latin characters. + "en_US", # locale format. + "en--us", # empty subtag. + "-en", # leading separator. + "en-", # trailing separator. + "en-US.UTF-8", # language tag w/ locale encoding. + "en_US.UTF-8", # locale format - language w/ region and encoding. + "ca_ES@valencia", # locale format - language w/ region and variant. # FIXME: The following should be invalid: # 'sr@latin', # locale instead of language tag. ) @@ -42,12 +43,15 @@ class TranslationCheckTests(SimpleTestCase): self.assertEqual(check_setting_language_code(None), []) def test_invalid_language_code(self): - msg = 'You have provided an invalid value for the LANGUAGE_CODE setting: %r.' + msg = "You have provided an invalid value for the LANGUAGE_CODE setting: %r." for tag in self.invalid_tags: with self.subTest(tag), self.settings(LANGUAGE_CODE=tag): - self.assertEqual(check_setting_language_code(None), [ - Error(msg % tag, id='translation.E001'), - ]) + self.assertEqual( + check_setting_language_code(None), + [ + Error(msg % tag, id="translation.E001"), + ], + ) def test_valid_languages(self): for tag in self.valid_tags: @@ -55,12 +59,15 @@ class TranslationCheckTests(SimpleTestCase): self.assertEqual(check_setting_languages(None), []) def test_invalid_languages(self): - msg = 'You have provided an invalid language code in the LANGUAGES setting: %r.' + msg = "You have provided an invalid language code in the LANGUAGES setting: %r." for tag in self.invalid_tags: with self.subTest(tag), self.settings(LANGUAGES=[(tag, tag)]): - self.assertEqual(check_setting_languages(None), [ - Error(msg % tag, id='translation.E002'), - ]) + self.assertEqual( + check_setting_languages(None), + [ + Error(msg % tag, id="translation.E002"), + ], + ) def test_valid_languages_bidi(self): for tag in self.valid_tags: @@ -68,42 +75,48 @@ class TranslationCheckTests(SimpleTestCase): self.assertEqual(check_setting_languages_bidi(None), []) def test_invalid_languages_bidi(self): - msg = 'You have provided an invalid language code in the LANGUAGES_BIDI setting: %r.' + msg = "You have provided an invalid language code in the LANGUAGES_BIDI setting: %r." for tag in self.invalid_tags: with self.subTest(tag), self.settings(LANGUAGES_BIDI=[tag]): - self.assertEqual(check_setting_languages_bidi(None), [ - Error(msg % tag, id='translation.E003'), - ]) + self.assertEqual( + check_setting_languages_bidi(None), + [ + Error(msg % tag, id="translation.E003"), + ], + ) - @override_settings(USE_I18N=True, LANGUAGES=[('en', 'English')]) + @override_settings(USE_I18N=True, LANGUAGES=[("en", "English")]) def test_inconsistent_language_settings(self): msg = ( - 'You have provided a value for the LANGUAGE_CODE setting that is ' - 'not in the LANGUAGES setting.' + "You have provided a value for the LANGUAGE_CODE setting that is " + "not in the LANGUAGES setting." ) - for tag in ['fr', 'fr-CA', 'fr-357']: + for tag in ["fr", "fr-CA", "fr-357"]: with self.subTest(tag), self.settings(LANGUAGE_CODE=tag): - self.assertEqual(check_language_settings_consistent(None), [ - Error(msg, id='translation.E004'), - ]) + self.assertEqual( + check_language_settings_consistent(None), + [ + Error(msg, id="translation.E004"), + ], + ) @override_settings( USE_I18N=True, LANGUAGES=[ - ('de', 'German'), - ('es', 'Spanish'), - ('fr', 'French'), - ('ca', 'Catalan'), + ("de", "German"), + ("es", "Spanish"), + ("fr", "French"), + ("ca", "Catalan"), ], ) def test_valid_variant_consistent_language_settings(self): tests = [ # language + region. - 'fr-CA', - 'es-419', - 'de-at', + "fr-CA", + "es-419", + "de-at", # language + region + variant. - 'ca-ES-valencia', + "ca-ES-valencia", ] for tag in tests: with self.subTest(tag), self.settings(LANGUAGE_CODE=tag): diff --git a/tests/check_framework/test_urls.py b/tests/check_framework/test_urls.py index 663c7a299c..6315f8834d 100644 --- a/tests/check_framework/test_urls.py +++ b/tests/check_framework/test_urls.py @@ -1,7 +1,10 @@ from django.conf import settings from django.core.checks.messages import Error, Warning from django.core.checks.urls import ( - E006, check_url_config, check_url_namespaces_unique, check_url_settings, + E006, + check_url_config, + check_url_namespaces_unique, + check_url_settings, get_warning_for_invalid_pattern, ) from django.test import SimpleTestCase @@ -9,58 +12,67 @@ from django.test.utils import override_settings class CheckUrlConfigTests(SimpleTestCase): - @override_settings(ROOT_URLCONF='check_framework.urls.no_warnings') + @override_settings(ROOT_URLCONF="check_framework.urls.no_warnings") def test_no_warnings(self): result = check_url_config(None) self.assertEqual(result, []) - @override_settings(ROOT_URLCONF='check_framework.urls.no_warnings_i18n') + @override_settings(ROOT_URLCONF="check_framework.urls.no_warnings_i18n") def test_no_warnings_i18n(self): self.assertEqual(check_url_config(None), []) - @override_settings(ROOT_URLCONF='check_framework.urls.warning_in_include') + @override_settings(ROOT_URLCONF="check_framework.urls.warning_in_include") def test_check_resolver_recursive(self): # The resolver is checked recursively (examining URL patterns in include()). result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] - self.assertEqual(warning.id, 'urls.W001') + self.assertEqual(warning.id, "urls.W001") - @override_settings(ROOT_URLCONF='check_framework.urls.include_with_dollar') + @override_settings(ROOT_URLCONF="check_framework.urls.include_with_dollar") def test_include_with_dollar(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] - self.assertEqual(warning.id, 'urls.W001') - self.assertEqual(warning.msg, ( - "Your URL pattern '^include-with-dollar$' uses include with a " - "route ending with a '$'. Remove the dollar from the route to " - "avoid problems including URLs." - )) - - @override_settings(ROOT_URLCONF='check_framework.urls.contains_tuple') + self.assertEqual(warning.id, "urls.W001") + self.assertEqual( + warning.msg, + ( + "Your URL pattern '^include-with-dollar$' uses include with a " + "route ending with a '$'. Remove the dollar from the route to " + "avoid problems including URLs." + ), + ) + + @override_settings(ROOT_URLCONF="check_framework.urls.contains_tuple") def test_contains_tuple_not_url_instance(self): result = check_url_config(None) warning = result[0] - self.assertEqual(warning.id, 'urls.E004') - self.assertRegex(warning.msg, ( - r"^Your URL pattern \('\^tuple/\$', <function <lambda> at 0x(\w+)>\) is " - r"invalid. Ensure that urlpatterns is a list of path\(\) and/or re_path\(\) " - r"instances\.$" - )) - - @override_settings(ROOT_URLCONF='check_framework.urls.include_contains_tuple') + self.assertEqual(warning.id, "urls.E004") + self.assertRegex( + warning.msg, + ( + r"^Your URL pattern \('\^tuple/\$', <function <lambda> at 0x(\w+)>\) is " + r"invalid. Ensure that urlpatterns is a list of path\(\) and/or re_path\(\) " + r"instances\.$" + ), + ) + + @override_settings(ROOT_URLCONF="check_framework.urls.include_contains_tuple") def test_contains_included_tuple(self): result = check_url_config(None) warning = result[0] - self.assertEqual(warning.id, 'urls.E004') - self.assertRegex(warning.msg, ( - r"^Your URL pattern \('\^tuple/\$', <function <lambda> at 0x(\w+)>\) is " - r"invalid. Ensure that urlpatterns is a list of path\(\) and/or re_path\(\) " - r"instances\.$" - )) - - @override_settings(ROOT_URLCONF='check_framework.urls.beginning_with_slash') + self.assertEqual(warning.id, "urls.E004") + self.assertRegex( + warning.msg, + ( + r"^Your URL pattern \('\^tuple/\$', <function <lambda> at 0x(\w+)>\) is " + r"invalid. Ensure that urlpatterns is a list of path\(\) and/or re_path\(\) " + r"instances\.$" + ), + ) + + @override_settings(ROOT_URLCONF="check_framework.urls.beginning_with_slash") def test_beginning_with_slash(self): msg = ( "Your URL pattern '%s' has a route beginning with a '/'. Remove " @@ -68,13 +80,13 @@ class CheckUrlConfigTests(SimpleTestCase): "an include(), ensure the include() pattern has a trailing '/'." ) warning1, warning2 = check_url_config(None) - self.assertEqual(warning1.id, 'urls.W002') - self.assertEqual(warning1.msg, msg % '/path-starting-with-slash/') - self.assertEqual(warning2.id, 'urls.W002') - self.assertEqual(warning2.msg, msg % '/url-starting-with-slash/$') + self.assertEqual(warning1.id, "urls.W002") + self.assertEqual(warning1.msg, msg % "/path-starting-with-slash/") + self.assertEqual(warning2.id, "urls.W002") + self.assertEqual(warning2.msg, msg % "/url-starting-with-slash/$") @override_settings( - ROOT_URLCONF='check_framework.urls.beginning_with_slash', + ROOT_URLCONF="check_framework.urls.beginning_with_slash", APPEND_SLASH=False, ) def test_beginning_with_slash_append_slash(self): @@ -83,23 +95,25 @@ class CheckUrlConfigTests(SimpleTestCase): result = check_url_config(None) self.assertEqual(result, []) - @override_settings(ROOT_URLCONF='check_framework.urls.name_with_colon') + @override_settings(ROOT_URLCONF="check_framework.urls.name_with_colon") def test_name_with_colon(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] - self.assertEqual(warning.id, 'urls.W003') - expected_msg = "Your URL pattern '^$' [name='name_with:colon'] has a name including a ':'." + self.assertEqual(warning.id, "urls.W003") + expected_msg = ( + "Your URL pattern '^$' [name='name_with:colon'] has a name including a ':'." + ) self.assertIn(expected_msg, warning.msg) @override_settings(ROOT_URLCONF=None) def test_no_root_urlconf_in_settings(self): - delattr(settings, 'ROOT_URLCONF') + delattr(settings, "ROOT_URLCONF") result = check_url_config(None) self.assertEqual(result, []) def test_get_warning_for_invalid_pattern_string(self): - warning = get_warning_for_invalid_pattern('')[0] + warning = get_warning_for_invalid_pattern("")[0] self.assertEqual( warning.hint, "Try removing the string ''. The list of urlpatterns should " @@ -107,18 +121,18 @@ class CheckUrlConfigTests(SimpleTestCase): ) def test_get_warning_for_invalid_pattern_tuple(self): - warning = get_warning_for_invalid_pattern((r'^$', lambda x: x))[0] + warning = get_warning_for_invalid_pattern((r"^$", lambda x: x))[0] self.assertEqual(warning.hint, "Try using path() instead of a tuple.") def test_get_warning_for_invalid_pattern_other(self): warning = get_warning_for_invalid_pattern(object())[0] self.assertIsNone(warning.hint) - @override_settings(ROOT_URLCONF='check_framework.urls.non_unique_namespaces') + @override_settings(ROOT_URLCONF="check_framework.urls.non_unique_namespaces") def test_check_non_unique_namespaces(self): result = check_url_namespaces_unique(None) self.assertEqual(len(result), 2) - non_unique_namespaces = ['app-ns1', 'app-1'] + non_unique_namespaces = ["app-ns1", "app-1"] warning_messages = [ "URL namespace '{}' isn't unique. You may not be able to reverse " "all URLs in this namespace".format(namespace) @@ -126,100 +140,117 @@ class CheckUrlConfigTests(SimpleTestCase): ] for warning in result: self.assertIsInstance(warning, Warning) - self.assertEqual('urls.W005', warning.id) + self.assertEqual("urls.W005", warning.id) self.assertIn(warning.msg, warning_messages) - @override_settings(ROOT_URLCONF='check_framework.urls.unique_namespaces') + @override_settings(ROOT_URLCONF="check_framework.urls.unique_namespaces") def test_check_unique_namespaces(self): result = check_url_namespaces_unique(None) self.assertEqual(result, []) - @override_settings(ROOT_URLCONF='check_framework.urls.cbv_as_view') + @override_settings(ROOT_URLCONF="check_framework.urls.cbv_as_view") def test_check_view_not_class(self): - self.assertEqual(check_url_config(None), [ - Error( - "Your URL pattern 'missing_as_view' has an invalid view, pass " - "EmptyCBV.as_view() instead of EmptyCBV.", - id='urls.E009', - ), - ]) + self.assertEqual( + check_url_config(None), + [ + Error( + "Your URL pattern 'missing_as_view' has an invalid view, pass " + "EmptyCBV.as_view() instead of EmptyCBV.", + id="urls.E009", + ), + ], + ) class UpdatedToPathTests(SimpleTestCase): - - @override_settings(ROOT_URLCONF='check_framework.urls.path_compatibility.contains_re_named_group') + @override_settings( + ROOT_URLCONF="check_framework.urls.path_compatibility.contains_re_named_group" + ) def test_contains_re_named_group(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] - self.assertEqual(warning.id, '2_0.W001') + self.assertEqual(warning.id, "2_0.W001") expected_msg = "Your URL pattern '(?P<named_group>\\d+)' has a route" self.assertIn(expected_msg, warning.msg) - @override_settings(ROOT_URLCONF='check_framework.urls.path_compatibility.beginning_with_caret') + @override_settings( + ROOT_URLCONF="check_framework.urls.path_compatibility.beginning_with_caret" + ) def test_beginning_with_caret(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] - self.assertEqual(warning.id, '2_0.W001') + self.assertEqual(warning.id, "2_0.W001") expected_msg = "Your URL pattern '^beginning-with-caret' has a route" self.assertIn(expected_msg, warning.msg) - @override_settings(ROOT_URLCONF='check_framework.urls.path_compatibility.ending_with_dollar') + @override_settings( + ROOT_URLCONF="check_framework.urls.path_compatibility.ending_with_dollar" + ) def test_ending_with_dollar(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] - self.assertEqual(warning.id, '2_0.W001') + self.assertEqual(warning.id, "2_0.W001") expected_msg = "Your URL pattern 'ending-with-dollar$' has a route" self.assertIn(expected_msg, warning.msg) class CheckCustomErrorHandlersTests(SimpleTestCase): - @override_settings( - ROOT_URLCONF='check_framework.urls.bad_function_based_error_handlers', + ROOT_URLCONF="check_framework.urls.bad_function_based_error_handlers", ) def test_bad_function_based_handlers(self): result = check_url_config(None) self.assertEqual(len(result), 4) for code, num_params, error in zip([400, 403, 404, 500], [2, 2, 2, 1], result): - with self.subTest('handler{}'.format(code)): - self.assertEqual(error, Error( - "The custom handler{} view 'check_framework.urls." - "bad_function_based_error_handlers.bad_handler' " - "does not take the correct number of arguments (request{})." - .format(code, ', exception' if num_params == 2 else ''), - id='urls.E007', - )) + with self.subTest("handler{}".format(code)): + self.assertEqual( + error, + Error( + "The custom handler{} view 'check_framework.urls." + "bad_function_based_error_handlers.bad_handler' " + "does not take the correct number of arguments (request{}).".format( + code, ", exception" if num_params == 2 else "" + ), + id="urls.E007", + ), + ) @override_settings( - ROOT_URLCONF='check_framework.urls.bad_class_based_error_handlers', + ROOT_URLCONF="check_framework.urls.bad_class_based_error_handlers", ) def test_bad_class_based_handlers(self): result = check_url_config(None) self.assertEqual(len(result), 4) for code, num_params, error in zip([400, 403, 404, 500], [2, 2, 2, 1], result): - with self.subTest('handler%s' % code): - self.assertEqual(error, Error( - "The custom handler%s view 'check_framework.urls." - "bad_class_based_error_handlers.HandlerView.as_view." - "<locals>.view' does not take the correct number of " - "arguments (request%s)." % ( - code, - ', exception' if num_params == 2 else '', + with self.subTest("handler%s" % code): + self.assertEqual( + error, + Error( + "The custom handler%s view 'check_framework.urls." + "bad_class_based_error_handlers.HandlerView.as_view." + "<locals>.view' does not take the correct number of " + "arguments (request%s)." + % ( + code, + ", exception" if num_params == 2 else "", + ), + id="urls.E007", ), - id='urls.E007', - )) + ) - @override_settings(ROOT_URLCONF='check_framework.urls.bad_error_handlers_invalid_path') + @override_settings( + ROOT_URLCONF="check_framework.urls.bad_error_handlers_invalid_path" + ) def test_bad_handlers_invalid_path(self): result = check_url_config(None) paths = [ - 'django.views.bad_handler', - 'django.invalid_module.bad_handler', - 'invalid_module.bad_handler', - 'django', + "django.views.bad_handler", + "django.invalid_module.bad_handler", + "invalid_module.bad_handler", + "django", ] hints = [ "Could not import '{}'. View does not exist in module django.views.", @@ -228,22 +259,27 @@ class CheckCustomErrorHandlersTests(SimpleTestCase): "Could not import '{}'. The path must be fully qualified.", ] for code, path, hint, error in zip([400, 403, 404, 500], paths, hints, result): - with self.subTest('handler{}'.format(code)): - self.assertEqual(error, Error( - "The custom handler{} view '{}' could not be imported.".format(code, path), - hint=hint.format(path), - id='urls.E008', - )) + with self.subTest("handler{}".format(code)): + self.assertEqual( + error, + Error( + "The custom handler{} view '{}' could not be imported.".format( + code, path + ), + hint=hint.format(path), + id="urls.E008", + ), + ) @override_settings( - ROOT_URLCONF='check_framework.urls.good_function_based_error_handlers', + ROOT_URLCONF="check_framework.urls.good_function_based_error_handlers", ) def test_good_function_based_handlers(self): result = check_url_config(None) self.assertEqual(result, []) @override_settings( - ROOT_URLCONF='check_framework.urls.good_class_based_error_handlers', + ROOT_URLCONF="check_framework.urls.good_class_based_error_handlers", ) def test_good_class_based_handlers(self): result = check_url_config(None) @@ -251,25 +287,24 @@ class CheckCustomErrorHandlersTests(SimpleTestCase): class CheckURLSettingsTests(SimpleTestCase): - - @override_settings(STATIC_URL='a/', MEDIA_URL='b/') + @override_settings(STATIC_URL="a/", MEDIA_URL="b/") def test_slash_no_errors(self): self.assertEqual(check_url_settings(None), []) - @override_settings(STATIC_URL='', MEDIA_URL='') + @override_settings(STATIC_URL="", MEDIA_URL="") def test_empty_string_no_errors(self): self.assertEqual(check_url_settings(None), []) - @override_settings(STATIC_URL='noslash') + @override_settings(STATIC_URL="noslash") def test_static_url_no_slash(self): - self.assertEqual(check_url_settings(None), [E006('STATIC_URL')]) + self.assertEqual(check_url_settings(None), [E006("STATIC_URL")]) - @override_settings(STATIC_URL='slashes//') + @override_settings(STATIC_URL="slashes//") def test_static_url_double_slash_allowed(self): # The check allows for a double slash, presuming the user knows what # they are doing. self.assertEqual(check_url_settings(None), []) - @override_settings(MEDIA_URL='noslash') + @override_settings(MEDIA_URL="noslash") def test_media_url_no_slash(self): - self.assertEqual(check_url_settings(None), [E006('MEDIA_URL')]) + self.assertEqual(check_url_settings(None), [E006("MEDIA_URL")]) diff --git a/tests/check_framework/tests.py b/tests/check_framework/tests.py index f43abaca12..4c09c757b4 100644 --- a/tests/check_framework/tests.py +++ b/tests/check_framework/tests.py @@ -10,9 +10,7 @@ from django.core.management import call_command from django.core.management.base import CommandError from django.db import models from django.test import SimpleTestCase -from django.test.utils import ( - isolate_apps, override_settings, override_system_checks, -) +from django.test.utils import isolate_apps, override_settings, override_system_checks from .models import SimpleModel, my_check @@ -23,9 +21,7 @@ class DummyObj: class SystemCheckFrameworkTests(SimpleTestCase): - def test_register_and_run_checks(self): - def f(**kwargs): calls[0] += 1 return [1, 2, 3] @@ -62,15 +58,20 @@ class SystemCheckFrameworkTests(SimpleTestCase): self.assertEqual(errors, errors2) self.assertEqual(sorted(errors), [4]) - errors = registry.run_checks(tags=["tag1", "tag2"], include_deployment_checks=True) - errors2 = registry2.run_checks(tags=["tag1", "tag2"], include_deployment_checks=True) + errors = registry.run_checks( + tags=["tag1", "tag2"], include_deployment_checks=True + ) + errors2 = registry2.run_checks( + tags=["tag1", "tag2"], include_deployment_checks=True + ) self.assertEqual(errors, errors2) self.assertEqual(sorted(errors), [4, 5]) def test_register_no_kwargs_error(self): registry = CheckRegistry() - msg = 'Check functions must accept keyword arguments (**kwargs).' + msg = "Check functions must accept keyword arguments (**kwargs)." with self.assertRaisesMessage(TypeError, msg): + @registry.register def no_kwargs(app_configs, databases): pass @@ -80,18 +81,17 @@ class SystemCheckFrameworkTests(SimpleTestCase): @registry.register def return_non_iterable(**kwargs): - return Error('Message') + return Error("Message") msg = ( - 'The function %r did not return a list. All functions registered ' - 'with the checks registry must return a list.' % return_non_iterable + "The function %r did not return a list. All functions registered " + "with the checks registry must return a list." % return_non_iterable ) with self.assertRaisesMessage(TypeError, msg): registry.run_checks() class MessageTests(SimpleTestCase): - def test_printing(self): e = Error("Message", hint="Hint", obj=DummyObj()) expected = "obj: Message\n\tHINT: Hint" @@ -113,7 +113,7 @@ class MessageTests(SimpleTestCase): self.assertEqual(str(e), expected) def test_printing_field_error(self): - field = SimpleModel._meta.get_field('field') + field = SimpleModel._meta.get_field("field") e = Error("Error", obj=field) expected = "check_framework.SimpleModel.field: Error" self.assertEqual(str(e), expected) @@ -145,12 +145,12 @@ class MessageTests(SimpleTestCase): def test_not_equal_to_non_check(self): e = Error("Error", obj=DummyObj()) - self.assertNotEqual(e, 'a string') + self.assertNotEqual(e, "a string") def test_invalid_level(self): - msg = 'The first argument should be level.' + msg = "The first argument should be level." with self.assertRaisesMessage(TypeError, msg): - CheckMessage('ERROR', 'Message') + CheckMessage("ERROR", "Message") def simple_system_check(**kwargs): @@ -160,22 +160,21 @@ def simple_system_check(**kwargs): def tagged_system_check(**kwargs): tagged_system_check.kwargs = kwargs - return [checks.Warning('System Check')] + return [checks.Warning("System Check")] -tagged_system_check.tags = ['simpletag'] +tagged_system_check.tags = ["simpletag"] def deployment_system_check(**kwargs): deployment_system_check.kwargs = kwargs - return [checks.Warning('Deployment Check')] + return [checks.Warning("Deployment Check")] -deployment_system_check.tags = ['deploymenttag'] +deployment_system_check.tags = ["deploymenttag"] class CheckCommandTests(SimpleTestCase): - def setUp(self): simple_system_check.kwargs = None tagged_system_check.kwargs = None @@ -187,77 +186,96 @@ class CheckCommandTests(SimpleTestCase): @override_system_checks([simple_system_check, tagged_system_check]) def test_simple_call(self): - call_command('check') - self.assertEqual(simple_system_check.kwargs, {'app_configs': None, 'databases': None}) - self.assertEqual(tagged_system_check.kwargs, {'app_configs': None, 'databases': None}) + call_command("check") + self.assertEqual( + simple_system_check.kwargs, {"app_configs": None, "databases": None} + ) + self.assertEqual( + tagged_system_check.kwargs, {"app_configs": None, "databases": None} + ) @override_system_checks([simple_system_check, tagged_system_check]) def test_given_app(self): - call_command('check', 'auth', 'admin') - auth_config = apps.get_app_config('auth') - admin_config = apps.get_app_config('admin') - self.assertEqual(simple_system_check.kwargs, {'app_configs': [auth_config, admin_config], 'databases': None}) - self.assertEqual(tagged_system_check.kwargs, {'app_configs': [auth_config, admin_config], 'databases': None}) + call_command("check", "auth", "admin") + auth_config = apps.get_app_config("auth") + admin_config = apps.get_app_config("admin") + self.assertEqual( + simple_system_check.kwargs, + {"app_configs": [auth_config, admin_config], "databases": None}, + ) + self.assertEqual( + tagged_system_check.kwargs, + {"app_configs": [auth_config, admin_config], "databases": None}, + ) @override_system_checks([simple_system_check, tagged_system_check]) def test_given_tag(self): - call_command('check', tags=['simpletag']) + call_command("check", tags=["simpletag"]) self.assertIsNone(simple_system_check.kwargs) - self.assertEqual(tagged_system_check.kwargs, {'app_configs': None, 'databases': None}) + self.assertEqual( + tagged_system_check.kwargs, {"app_configs": None, "databases": None} + ) @override_system_checks([simple_system_check, tagged_system_check]) def test_invalid_tag(self): msg = 'There is no system check with the "missingtag" tag.' with self.assertRaisesMessage(CommandError, msg): - call_command('check', tags=['missingtag']) + call_command("check", tags=["missingtag"]) @override_system_checks([simple_system_check]) def test_list_tags_empty(self): - call_command('check', list_tags=True) - self.assertEqual('\n', sys.stdout.getvalue()) + call_command("check", list_tags=True) + self.assertEqual("\n", sys.stdout.getvalue()) @override_system_checks([tagged_system_check]) def test_list_tags(self): - call_command('check', list_tags=True) - self.assertEqual('simpletag\n', sys.stdout.getvalue()) + call_command("check", list_tags=True) + self.assertEqual("simpletag\n", sys.stdout.getvalue()) - @override_system_checks([tagged_system_check], deployment_checks=[deployment_system_check]) + @override_system_checks( + [tagged_system_check], deployment_checks=[deployment_system_check] + ) def test_list_deployment_check_omitted(self): - call_command('check', list_tags=True) - self.assertEqual('simpletag\n', sys.stdout.getvalue()) + call_command("check", list_tags=True) + self.assertEqual("simpletag\n", sys.stdout.getvalue()) - @override_system_checks([tagged_system_check], deployment_checks=[deployment_system_check]) + @override_system_checks( + [tagged_system_check], deployment_checks=[deployment_system_check] + ) def test_list_deployment_check_included(self): - call_command('check', deploy=True, list_tags=True) - self.assertEqual('deploymenttag\nsimpletag\n', sys.stdout.getvalue()) + call_command("check", deploy=True, list_tags=True) + self.assertEqual("deploymenttag\nsimpletag\n", sys.stdout.getvalue()) - @override_system_checks([tagged_system_check], deployment_checks=[deployment_system_check]) + @override_system_checks( + [tagged_system_check], deployment_checks=[deployment_system_check] + ) def test_tags_deployment_check_omitted(self): msg = 'There is no system check with the "deploymenttag" tag.' with self.assertRaisesMessage(CommandError, msg): - call_command('check', tags=['deploymenttag']) + call_command("check", tags=["deploymenttag"]) - @override_system_checks([tagged_system_check], deployment_checks=[deployment_system_check]) + @override_system_checks( + [tagged_system_check], deployment_checks=[deployment_system_check] + ) def test_tags_deployment_check_included(self): - call_command('check', deploy=True, tags=['deploymenttag']) - self.assertIn('Deployment Check', sys.stderr.getvalue()) + call_command("check", deploy=True, tags=["deploymenttag"]) + self.assertIn("Deployment Check", sys.stderr.getvalue()) @override_system_checks([tagged_system_check]) def test_fail_level(self): with self.assertRaises(CommandError): - call_command('check', fail_level='WARNING') + call_command("check", fail_level="WARNING") def custom_error_system_check(app_configs, **kwargs): - return [Error('Error', id='myerrorcheck.E001')] + return [Error("Error", id="myerrorcheck.E001")] def custom_warning_system_check(app_configs, **kwargs): - return [Warning('Warning', id='mywarningcheck.E001')] + return [Warning("Warning", id="mywarningcheck.E001")] class SilencingCheckTests(SimpleTestCase): - def setUp(self): self.old_stdout, self.old_stderr = sys.stdout, sys.stderr self.stdout, self.stderr = StringIO(), StringIO() @@ -266,27 +284,31 @@ class SilencingCheckTests(SimpleTestCase): def tearDown(self): sys.stdout, sys.stderr = self.old_stdout, self.old_stderr - @override_settings(SILENCED_SYSTEM_CHECKS=['myerrorcheck.E001']) + @override_settings(SILENCED_SYSTEM_CHECKS=["myerrorcheck.E001"]) @override_system_checks([custom_error_system_check]) def test_silenced_error(self): out = StringIO() err = StringIO() - call_command('check', stdout=out, stderr=err) - self.assertEqual(out.getvalue(), 'System check identified no issues (1 silenced).\n') - self.assertEqual(err.getvalue(), '') + call_command("check", stdout=out, stderr=err) + self.assertEqual( + out.getvalue(), "System check identified no issues (1 silenced).\n" + ) + self.assertEqual(err.getvalue(), "") - @override_settings(SILENCED_SYSTEM_CHECKS=['mywarningcheck.E001']) + @override_settings(SILENCED_SYSTEM_CHECKS=["mywarningcheck.E001"]) @override_system_checks([custom_warning_system_check]) def test_silenced_warning(self): out = StringIO() err = StringIO() - call_command('check', stdout=out, stderr=err) - self.assertEqual(out.getvalue(), 'System check identified no issues (1 silenced).\n') - self.assertEqual(err.getvalue(), '') + call_command("check", stdout=out, stderr=err) + self.assertEqual( + out.getvalue(), "System check identified no issues (1 silenced).\n" + ) + self.assertEqual(err.getvalue(), "") class CheckFrameworkReservedNamesTests(SimpleTestCase): - @isolate_apps('check_framework', kwarg_name='apps') + @isolate_apps("check_framework", kwarg_name="apps") @override_system_checks([checks.model_checks.check_all_models]) def test_model_check_method_not_shadowed(self, apps): class ModelWithAttributeCalledCheck(models.Model): @@ -299,11 +321,13 @@ class CheckFrameworkReservedNamesTests(SimpleTestCase): pass class ModelWithDescriptorCalledCheck(models.Model): - check = models.ForeignKey(ModelWithRelatedManagerCalledCheck, models.CASCADE) + check = models.ForeignKey( + ModelWithRelatedManagerCalledCheck, models.CASCADE + ) article = models.ForeignKey( ModelWithRelatedManagerCalledCheck, models.CASCADE, - related_name='check', + related_name="check", ) errors = checks.run_checks(app_configs=apps.get_app_configs()) @@ -312,25 +336,26 @@ class CheckFrameworkReservedNamesTests(SimpleTestCase): "The 'ModelWithAttributeCalledCheck.check()' class method is " "currently overridden by 42.", obj=ModelWithAttributeCalledCheck, - id='models.E020' + id="models.E020", ), Error( "The 'ModelWithFieldCalledCheck.check()' class method is " "currently overridden by %r." % ModelWithFieldCalledCheck.check, obj=ModelWithFieldCalledCheck, - id='models.E020' + id="models.E020", ), Error( "The 'ModelWithRelatedManagerCalledCheck.check()' class method is " - "currently overridden by %r." % ModelWithRelatedManagerCalledCheck.check, + "currently overridden by %r." + % ModelWithRelatedManagerCalledCheck.check, obj=ModelWithRelatedManagerCalledCheck, - id='models.E020' + id="models.E020", ), Error( "The 'ModelWithDescriptorCalledCheck.check()' class method is " "currently overridden by %r." % ModelWithDescriptorCalledCheck.check, obj=ModelWithDescriptorCalledCheck, - id='models.E020' + id="models.E020", ), ] self.assertEqual(errors, expected) diff --git a/tests/check_framework/urls/bad_error_handlers_invalid_path.py b/tests/check_framework/urls/bad_error_handlers_invalid_path.py index 77e0c639e0..9b42900703 100644 --- a/tests/check_framework/urls/bad_error_handlers_invalid_path.py +++ b/tests/check_framework/urls/bad_error_handlers_invalid_path.py @@ -1,6 +1,6 @@ urlpatterns = [] -handler400 = 'django.views.bad_handler' -handler403 = 'django.invalid_module.bad_handler' -handler404 = 'invalid_module.bad_handler' -handler500 = 'django' +handler400 = "django.views.bad_handler" +handler403 = "django.invalid_module.bad_handler" +handler404 = "invalid_module.bad_handler" +handler500 = "django" diff --git a/tests/check_framework/urls/bad_function_based_error_handlers.py b/tests/check_framework/urls/bad_function_based_error_handlers.py index d639d707df..518d2d4734 100644 --- a/tests/check_framework/urls/bad_function_based_error_handlers.py +++ b/tests/check_framework/urls/bad_function_based_error_handlers.py @@ -1,9 +1,9 @@ urlpatterns = [] -handler400 = __name__ + '.bad_handler' -handler403 = __name__ + '.bad_handler' -handler404 = __name__ + '.bad_handler' -handler500 = __name__ + '.bad_handler' +handler400 = __name__ + ".bad_handler" +handler403 = __name__ + ".bad_handler" +handler404 = __name__ + ".bad_handler" +handler500 = __name__ + ".bad_handler" def bad_handler(): diff --git a/tests/check_framework/urls/beginning_with_slash.py b/tests/check_framework/urls/beginning_with_slash.py index bd4e29d8f1..ce6c145512 100644 --- a/tests/check_framework/urls/beginning_with_slash.py +++ b/tests/check_framework/urls/beginning_with_slash.py @@ -1,6 +1,6 @@ from django.urls import path, re_path urlpatterns = [ - path('/path-starting-with-slash/', lambda x: x), - re_path(r'/url-starting-with-slash/$', lambda x: x), + path("/path-starting-with-slash/", lambda x: x), + re_path(r"/url-starting-with-slash/$", lambda x: x), ] diff --git a/tests/check_framework/urls/cbv_as_view.py b/tests/check_framework/urls/cbv_as_view.py index 932a2bfcc9..3a478afb94 100644 --- a/tests/check_framework/urls/cbv_as_view.py +++ b/tests/check_framework/urls/cbv_as_view.py @@ -13,7 +13,7 @@ class EmptyCallableView: urlpatterns = [ - path('missing_as_view', EmptyCBV), - path('has_as_view', EmptyCBV.as_view()), - path('callable_class', EmptyCallableView()), + path("missing_as_view", EmptyCBV), + path("has_as_view", EmptyCBV.as_view()), + path("callable_class", EmptyCallableView()), ] diff --git a/tests/check_framework/urls/contains_tuple.py b/tests/check_framework/urls/contains_tuple.py index 56aa3ea364..9fc58224a2 100644 --- a/tests/check_framework/urls/contains_tuple.py +++ b/tests/check_framework/urls/contains_tuple.py @@ -1,3 +1,3 @@ urlpatterns = [ - (r'^tuple/$', lambda x: x), + (r"^tuple/$", lambda x: x), ] diff --git a/tests/check_framework/urls/good_function_based_error_handlers.py b/tests/check_framework/urls/good_function_based_error_handlers.py index 69bea650f7..2479b253eb 100644 --- a/tests/check_framework/urls/good_function_based_error_handlers.py +++ b/tests/check_framework/urls/good_function_based_error_handlers.py @@ -1,10 +1,10 @@ urlpatterns = [] -handler400 = __name__ + '.good_handler' -handler403 = __name__ + '.good_handler' -handler404 = __name__ + '.good_handler' -handler500 = __name__ + '.good_handler' +handler400 = __name__ + ".good_handler" +handler403 = __name__ + ".good_handler" +handler404 = __name__ + ".good_handler" +handler500 = __name__ + ".good_handler" -def good_handler(request, exception=None, foo='bar'): +def good_handler(request, exception=None, foo="bar"): pass diff --git a/tests/check_framework/urls/include_contains_tuple.py b/tests/check_framework/urls/include_contains_tuple.py index 02717a743c..876d9aab1d 100644 --- a/tests/check_framework/urls/include_contains_tuple.py +++ b/tests/check_framework/urls/include_contains_tuple.py @@ -1,5 +1,5 @@ from django.urls import include, path urlpatterns = [ - path('', include([(r'^tuple/$', lambda x: x)])), + path("", include([(r"^tuple/$", lambda x: x)])), ] diff --git a/tests/check_framework/urls/include_with_dollar.py b/tests/check_framework/urls/include_with_dollar.py index ce921bbec5..dc92d594bf 100644 --- a/tests/check_framework/urls/include_with_dollar.py +++ b/tests/check_framework/urls/include_with_dollar.py @@ -1,5 +1,5 @@ from django.urls import include, re_path urlpatterns = [ - re_path('^include-with-dollar$', include([])), + re_path("^include-with-dollar$", include([])), ] diff --git a/tests/check_framework/urls/name_with_colon.py b/tests/check_framework/urls/name_with_colon.py index 273c99324c..8cca009cd5 100644 --- a/tests/check_framework/urls/name_with_colon.py +++ b/tests/check_framework/urls/name_with_colon.py @@ -1,5 +1,5 @@ from django.urls import re_path urlpatterns = [ - re_path('^$', lambda x: x, name='name_with:colon'), + re_path("^$", lambda x: x, name="name_with:colon"), ] diff --git a/tests/check_framework/urls/no_warnings.py b/tests/check_framework/urls/no_warnings.py index e1846fb884..d100f04590 100644 --- a/tests/check_framework/urls/no_warnings.py +++ b/tests/check_framework/urls/no_warnings.py @@ -1,9 +1,14 @@ from django.urls import include, path, re_path urlpatterns = [ - path('foo/', lambda x: x, name='foo'), + path("foo/", lambda x: x, name="foo"), # This dollar is ok as it is escaped - re_path(r'^\$', include([ - path('bar/', lambda x: x, name='bar'), - ])), + re_path( + r"^\$", + include( + [ + path("bar/", lambda x: x, name="bar"), + ] + ), + ), ] diff --git a/tests/check_framework/urls/no_warnings_i18n.py b/tests/check_framework/urls/no_warnings_i18n.py index 37da78f29d..4a125a24e6 100644 --- a/tests/check_framework/urls/no_warnings_i18n.py +++ b/tests/check_framework/urls/no_warnings_i18n.py @@ -3,5 +3,5 @@ from django.urls import path from django.utils.translation import gettext_lazy as _ urlpatterns = i18n_patterns( - path(_('translated/'), lambda x: x, name='i18n_prefixed'), + path(_("translated/"), lambda x: x, name="i18n_prefixed"), ) diff --git a/tests/check_framework/urls/non_unique_namespaces.py b/tests/check_framework/urls/non_unique_namespaces.py index f036797cb7..23f7f1b61d 100644 --- a/tests/check_framework/urls/non_unique_namespaces.py +++ b/tests/check_framework/urls/non_unique_namespaces.py @@ -1,13 +1,16 @@ from django.urls import include, path -common_url_patterns = ([ - path('app-ns1/', include([])), - path('app-url/', include([])), -], 'app-ns1') +common_url_patterns = ( + [ + path("app-ns1/", include([])), + path("app-url/", include([])), + ], + "app-ns1", +) urlpatterns = [ - path('app-ns1-0/', include(common_url_patterns)), - path('app-ns1-1/', include(common_url_patterns)), - path('app-some-url/', include(([], 'app'), namespace='app-1')), - path('app-some-url-2/', include(([], 'app'), namespace='app-1')) + path("app-ns1-0/", include(common_url_patterns)), + path("app-ns1-1/", include(common_url_patterns)), + path("app-some-url/", include(([], "app"), namespace="app-1")), + path("app-some-url-2/", include(([], "app"), namespace="app-1")), ] diff --git a/tests/check_framework/urls/path_compatibility/beginning_with_caret.py b/tests/check_framework/urls/path_compatibility/beginning_with_caret.py index 7e3e9c8707..27c96246b2 100644 --- a/tests/check_framework/urls/path_compatibility/beginning_with_caret.py +++ b/tests/check_framework/urls/path_compatibility/beginning_with_caret.py @@ -1,5 +1,5 @@ from django.urls import path urlpatterns = [ - path('^beginning-with-caret', lambda x: x), + path("^beginning-with-caret", lambda x: x), ] diff --git a/tests/check_framework/urls/path_compatibility/contains_re_named_group.py b/tests/check_framework/urls/path_compatibility/contains_re_named_group.py index bd849509f5..86897a4a48 100644 --- a/tests/check_framework/urls/path_compatibility/contains_re_named_group.py +++ b/tests/check_framework/urls/path_compatibility/contains_re_named_group.py @@ -1,5 +1,5 @@ from django.urls import path urlpatterns = [ - path(r'(?P<named_group>\d+)', lambda x: x), + path(r"(?P<named_group>\d+)", lambda x: x), ] diff --git a/tests/check_framework/urls/path_compatibility/ending_with_dollar.py b/tests/check_framework/urls/path_compatibility/ending_with_dollar.py index 0ea82a1ba6..081cc6b008 100644 --- a/tests/check_framework/urls/path_compatibility/ending_with_dollar.py +++ b/tests/check_framework/urls/path_compatibility/ending_with_dollar.py @@ -1,5 +1,5 @@ from django.urls import path urlpatterns = [ - path('ending-with-dollar$', lambda x: x), + path("ending-with-dollar$", lambda x: x), ] diff --git a/tests/check_framework/urls/unique_namespaces.py b/tests/check_framework/urls/unique_namespaces.py index 09296648fd..ee6cc5fd3e 100644 --- a/tests/check_framework/urls/unique_namespaces.py +++ b/tests/check_framework/urls/unique_namespaces.py @@ -1,20 +1,26 @@ from django.urls import include, path -common_url_patterns = ([ - path('app-ns1/', include([])), - path('app-url/', include([])), -], 'common') +common_url_patterns = ( + [ + path("app-ns1/", include([])), + path("app-url/", include([])), + ], + "common", +) -nested_url_patterns = ([ - path('common/', include(common_url_patterns, namespace='nested')), -], 'nested') +nested_url_patterns = ( + [ + path("common/", include(common_url_patterns, namespace="nested")), + ], + "nested", +) urlpatterns = [ - path('app-ns1-0/', include(common_url_patterns, namespace='app-include-1')), - path('app-ns1-1/', include(common_url_patterns, namespace='app-include-2')), + path("app-ns1-0/", include(common_url_patterns, namespace="app-include-1")), + path("app-ns1-1/", include(common_url_patterns, namespace="app-include-2")), # 'nested' is included twice but namespaced by nested-1 and nested-2. - path('app-ns1-2/', include(nested_url_patterns, namespace='nested-1')), - path('app-ns1-3/', include(nested_url_patterns, namespace='nested-2')), + path("app-ns1-2/", include(nested_url_patterns, namespace="nested-1")), + path("app-ns1-3/", include(nested_url_patterns, namespace="nested-2")), # namespaced URLs inside non-namespaced URLs. - path('app-ns1-4/', include([path('abc/', include(common_url_patterns))])), + path("app-ns1-4/", include([path("abc/", include(common_url_patterns))])), ] diff --git a/tests/check_framework/urls/warning_in_include.py b/tests/check_framework/urls/warning_in_include.py index 8ec846be1e..6978c13210 100644 --- a/tests/check_framework/urls/warning_in_include.py +++ b/tests/check_framework/urls/warning_in_include.py @@ -1,7 +1,12 @@ from django.urls import include, path, re_path urlpatterns = [ - path('', include([ - re_path('^include-with-dollar$', include([])), - ])), + path( + "", + include( + [ + re_path("^include-with-dollar$", include([])), + ] + ), + ), ] |