diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-02-16 21:09:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-16 21:09:24 +0100 |
| commit | 1e2e1be02bdf0fe4add0d0279dbca1d74ae28ad7 (patch) | |
| tree | c71659b8d9fb26e88627a29930178dd9037c9a30 /tests | |
| parent | 35c2474f168fd10ac50886024d5879de81be5bd3 (diff) | |
Fixed #33515 -- Prevented recreation of migration for ManyToManyField to lowercased swappable setting.
Thanks Chris Lee for the report.
Regression in 43289707809c814a70f0db38ca4f82f35f43dbfd.
Refs #23916.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/field_deconstruction/tests.py | 20 | ||||
| -rw-r--r-- | tests/migrations/test_autodetector.py | 25 |
2 files changed, 35 insertions, 10 deletions
diff --git a/tests/field_deconstruction/tests.py b/tests/field_deconstruction/tests.py index 64b90953f1..c78ed62876 100644 --- a/tests/field_deconstruction/tests.py +++ b/tests/field_deconstruction/tests.py @@ -475,34 +475,34 @@ class FieldDeconstructionTests(SimpleTestCase): name, path, args, kwargs = field.deconstruct() self.assertEqual(path, "django.db.models.ManyToManyField") self.assertEqual(args, []) - self.assertEqual(kwargs, {"to": "auth.Permission"}) + self.assertEqual(kwargs, {"to": "auth.permission"}) self.assertFalse(hasattr(kwargs["to"], "setting_name")) # Test swappable field = models.ManyToManyField("auth.User") name, path, args, kwargs = field.deconstruct() self.assertEqual(path, "django.db.models.ManyToManyField") self.assertEqual(args, []) - self.assertEqual(kwargs, {"to": "auth.User"}) + self.assertEqual(kwargs, {"to": "auth.user"}) self.assertEqual(kwargs["to"].setting_name, "AUTH_USER_MODEL") # Test through field = models.ManyToManyField("auth.Permission", through="auth.Group") name, path, args, kwargs = field.deconstruct() self.assertEqual(path, "django.db.models.ManyToManyField") self.assertEqual(args, []) - self.assertEqual(kwargs, {"to": "auth.Permission", "through": "auth.Group"}) + self.assertEqual(kwargs, {"to": "auth.permission", "through": "auth.Group"}) # Test custom db_table field = models.ManyToManyField("auth.Permission", db_table="custom_table") name, path, args, kwargs = field.deconstruct() self.assertEqual(path, "django.db.models.ManyToManyField") self.assertEqual(args, []) - self.assertEqual(kwargs, {"to": "auth.Permission", "db_table": "custom_table"}) + self.assertEqual(kwargs, {"to": "auth.permission", "db_table": "custom_table"}) # Test related_name field = models.ManyToManyField("auth.Permission", related_name="custom_table") name, path, args, kwargs = field.deconstruct() self.assertEqual(path, "django.db.models.ManyToManyField") self.assertEqual(args, []) self.assertEqual( - kwargs, {"to": "auth.Permission", "related_name": "custom_table"} + kwargs, {"to": "auth.permission", "related_name": "custom_table"} ) # Test related_query_name field = models.ManyToManyField("auth.Permission", related_query_name="foobar") @@ -510,7 +510,7 @@ class FieldDeconstructionTests(SimpleTestCase): self.assertEqual(path, "django.db.models.ManyToManyField") self.assertEqual(args, []) self.assertEqual( - kwargs, {"to": "auth.Permission", "related_query_name": "foobar"} + kwargs, {"to": "auth.permission", "related_query_name": "foobar"} ) # Test limit_choices_to field = models.ManyToManyField( @@ -520,7 +520,7 @@ class FieldDeconstructionTests(SimpleTestCase): self.assertEqual(path, "django.db.models.ManyToManyField") self.assertEqual(args, []) self.assertEqual( - kwargs, {"to": "auth.Permission", "limit_choices_to": {"foo": "bar"}} + kwargs, {"to": "auth.permission", "limit_choices_to": {"foo": "bar"}} ) @override_settings(AUTH_USER_MODEL="auth.Permission") @@ -533,7 +533,7 @@ class FieldDeconstructionTests(SimpleTestCase): self.assertEqual(path, "django.db.models.ManyToManyField") self.assertEqual(args, []) - self.assertEqual(kwargs, {"to": "auth.Permission"}) + self.assertEqual(kwargs, {"to": "auth.permission"}) self.assertEqual(kwargs["to"].setting_name, "AUTH_USER_MODEL") def test_many_to_many_field_related_name(self): @@ -551,7 +551,7 @@ class FieldDeconstructionTests(SimpleTestCase): self.assertEqual(args, []) # deconstruct() should not include attributes which were not passed to # the field during initialization. - self.assertEqual(kwargs, {"to": "field_deconstruction.MyModel"}) + self.assertEqual(kwargs, {"to": "field_deconstruction.mymodel"}) # Passed attributes. name, path, args, kwargs = MyModel.m2m_related_name.field.deconstruct() self.assertEqual(path, "django.db.models.ManyToManyField") @@ -559,7 +559,7 @@ class FieldDeconstructionTests(SimpleTestCase): self.assertEqual( kwargs, { - "to": "field_deconstruction.MyModel", + "to": "field_deconstruction.mymodel", "related_query_name": "custom_query_name", "limit_choices_to": {"flag": True}, }, diff --git a/tests/migrations/test_autodetector.py b/tests/migrations/test_autodetector.py index 36c6ffb872..8ddb339002 100644 --- a/tests/migrations/test_autodetector.py +++ b/tests/migrations/test_autodetector.py @@ -3279,6 +3279,31 @@ class AutodetectorTests(TestCase): [("__setting__", "AUTH_USER_MODEL")], ) + @override_settings(AUTH_USER_MODEL="thirdapp.CustomUser") + def test_swappable_many_to_many_model_case(self): + document_lowercase = ModelState( + "testapp", + "Document", + [ + ("id", models.AutoField(primary_key=True)), + ("owners", models.ManyToManyField(settings.AUTH_USER_MODEL.lower())), + ], + ) + document = ModelState( + "testapp", + "Document", + [ + ("id", models.AutoField(primary_key=True)), + ("owners", models.ManyToManyField(settings.AUTH_USER_MODEL)), + ], + ) + with isolate_lru_cache(apps.get_swappable_settings_name): + changes = self.get_changes( + [self.custom_user, document_lowercase], + [self.custom_user, document], + ) + self.assertEqual(len(changes), 0) + def test_swappable_changed(self): with isolate_lru_cache(apps.get_swappable_settings_name): before = self.make_project_state([self.custom_user, self.author_with_user]) |
