summaryrefslogtreecommitdiff
path: root/tests/check_framework
diff options
context:
space:
mode:
authorTom Forbes <tom@tomforb.es>2020-07-12 13:59:57 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-12-15 11:25:46 +0100
commitb5e12d490af3debca8c55ab3c1698189fdedbbdb (patch)
tree5fe3005ac567f3addf78b81ae033191e2fa642f4 /tests/check_framework
parentb960e4ed722a04a9db0d35293f76e253eedf9126 (diff)
downloaddjango-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.py10
-rw-r--r--tests/check_framework/test_model_checks.py57
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()), [])