diff options
author | Tom Forbes <tom@tomforb.es> | 2020-07-12 13:59:57 +0100 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-12-15 11:25:46 +0100 |
commit | b5e12d490af3debca8c55ab3c1698189fdedbbdb (patch) | |
tree | 5fe3005ac567f3addf78b81ae033191e2fa642f4 /tests/check_framework | |
parent | b960e4ed722a04a9db0d35293f76e253eedf9126 (diff) | |
download | django-b5e12d490af3debca8c55ab3c1698189fdedbbdb.tar.gz |
Fixed #31007 -- Allowed specifying type of auto-created primary keys.
This also changes the default type of auto-created primary keys
for new apps and projects to BigAutoField.
Diffstat (limited to 'tests/check_framework')
-rw-r--r-- | tests/check_framework/apps.py | 10 | ||||
-rw-r--r-- | tests/check_framework/test_model_checks.py | 57 |
2 files changed, 67 insertions, 0 deletions
diff --git a/tests/check_framework/apps.py b/tests/check_framework/apps.py new file mode 100644 index 0000000000..c57994f722 --- /dev/null +++ b/tests/check_framework/apps.py @@ -0,0 +1,10 @@ +from django.apps import AppConfig + + +class CheckDefaultPKConfig(AppConfig): + name = 'check_framework' + + +class CheckPKConfig(AppConfig): + name = 'check_framework' + default_auto_field = 'django.db.models.BigAutoField' diff --git a/tests/check_framework/test_model_checks.py b/tests/check_framework/test_model_checks.py index ce2d73fa20..d4342ada07 100644 --- a/tests/check_framework/test_model_checks.py +++ b/tests/check_framework/test_model_checks.py @@ -1,3 +1,5 @@ +from unittest import mock + from django.core import checks from django.core.checks import Error, Warning from django.db import models @@ -358,3 +360,58 @@ class ConstraintNameTests(TestCase): constraints = [constraint] self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), []) + + +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' + ) + + +@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): + def test_auto_created_pk(self): + class Model(models.Model): + pass + + self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), [ + Warning( + "Auto-created primary key used when not defining a primary " + "key type, by default 'django.db.models.AutoField'.", + hint=( + "Configure the DEFAULT_AUTO_FIELD setting or the " + "CheckDefaultPKConfig.default_auto_field attribute to " + "point to a subclass of AutoField, e.g. " + "'django.db.models.BigAutoField'." + ), + obj=Model, + id='models.W042', + ), + ]) + + @override_settings(DEFAULT_AUTO_FIELD='django.db.models.BigAutoField') + def test_default_auto_field_setting(self): + class Model(models.Model): + pass + + self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) + + def test_explicit_pk(self): + class Model(models.Model): + id = models.BigAutoField(primary_key=True) + + self.assertEqual(checks.run_checks(app_configs=self.apps.get_app_configs()), []) + + @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' + + self.assertEqual(checks.run_checks(app_configs=apps.get_app_configs()), []) |