Skip to content

Commit 8e631a3

Browse files
committed
Refs #24590 -- Ensured isolation between autodetector tests
Fixed a regression introduced in e1427cc when running tests in reverse order.
1 parent 22a791e commit 8e631a3

File tree

2 files changed

+75
-59
lines changed

2 files changed

+75
-59
lines changed

tests/field_deconstruction/tests.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -226,10 +226,11 @@ def test_foreign_key_swapped(self):
226226
# there's no validation. We just want to check the setting stuff works.
227227
field = models.ForeignKey("auth.Permission", models.CASCADE)
228228
name, path, args, kwargs = field.deconstruct()
229-
self.assertEqual(path, "django.db.models.ForeignKey")
230-
self.assertEqual(args, [])
231-
self.assertEqual(kwargs, {"to": "auth.Permission", "on_delete": models.CASCADE})
232-
self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
229+
230+
self.assertEqual(path, "django.db.models.ForeignKey")
231+
self.assertEqual(args, [])
232+
self.assertEqual(kwargs, {"to": "auth.Permission", "on_delete": models.CASCADE})
233+
self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
233234

234235
def test_image_field(self):
235236
field = models.ImageField(upload_to="foo/barness", width_field="width", height_field="height")
@@ -305,10 +306,11 @@ def test_many_to_many_field_swapped(self):
305306
# there's no validation. We just want to check the setting stuff works.
306307
field = models.ManyToManyField("auth.Permission")
307308
name, path, args, kwargs = field.deconstruct()
308-
self.assertEqual(path, "django.db.models.ManyToManyField")
309-
self.assertEqual(args, [])
310-
self.assertEqual(kwargs, {"to": "auth.Permission"})
311-
self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
309+
310+
self.assertEqual(path, "django.db.models.ManyToManyField")
311+
self.assertEqual(args, [])
312+
self.assertEqual(kwargs, {"to": "auth.Permission"})
313+
self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
312314

313315
def test_null_boolean_field(self):
314316
field = models.NullBooleanField()

tests/migrations/test_autodetector.py

+65-51
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22
import re
33

4+
from django.apps import apps
45
from django.conf import settings
56
from django.contrib.auth.models import AbstractBaseUser
67
from django.core.validators import RegexValidator, validate_slug
@@ -11,6 +12,7 @@
1112
from django.db.migrations.questioner import MigrationQuestioner
1213
from django.db.migrations.state import ModelState, ProjectState
1314
from django.test import TestCase, mock, override_settings
15+
from django.test.utils import isolate_lru_cache
1416

1517
from .models import FoodManager, FoodQuerySet
1618

@@ -1310,22 +1312,26 @@ def test_unmanaged_custom_pk(self):
13101312

13111313
@override_settings(AUTH_USER_MODEL="thirdapp.CustomUser")
13121314
def test_swappable(self):
1313-
before = self.make_project_state([self.custom_user])
1314-
after = self.make_project_state([self.custom_user, self.author_with_custom_user])
1315-
autodetector = MigrationAutodetector(before, after)
1316-
changes = autodetector._detect_changes()
1315+
with isolate_lru_cache(apps.get_swappable_settings_name):
1316+
before = self.make_project_state([self.custom_user])
1317+
after = self.make_project_state([self.custom_user, self.author_with_custom_user])
1318+
autodetector = MigrationAutodetector(before, after)
1319+
changes = autodetector._detect_changes()
1320+
13171321
# Right number/type of migrations?
13181322
self.assertNumberMigrations(changes, 'testapp', 1)
13191323
self.assertOperationTypes(changes, 'testapp', 0, ["CreateModel"])
13201324
self.assertOperationAttributes(changes, 'testapp', 0, 0, name="Author")
13211325
self.assertMigrationDependencies(changes, 'testapp', 0, [("__setting__", "AUTH_USER_MODEL")])
13221326

13231327
def test_swappable_changed(self):
1324-
before = self.make_project_state([self.custom_user, self.author_with_user])
1325-
with override_settings(AUTH_USER_MODEL="thirdapp.CustomUser"):
1326-
after = self.make_project_state([self.custom_user, self.author_with_custom_user])
1327-
autodetector = MigrationAutodetector(before, after)
1328-
changes = autodetector._detect_changes()
1328+
with isolate_lru_cache(apps.get_swappable_settings_name):
1329+
before = self.make_project_state([self.custom_user, self.author_with_user])
1330+
with override_settings(AUTH_USER_MODEL="thirdapp.CustomUser"):
1331+
after = self.make_project_state([self.custom_user, self.author_with_custom_user])
1332+
autodetector = MigrationAutodetector(before, after)
1333+
changes = autodetector._detect_changes()
1334+
13291335
# Right number/type of migrations?
13301336
self.assertNumberMigrations(changes, 'testapp', 1)
13311337
self.assertOperationTypes(changes, 'testapp', 0, ["AlterField"])
@@ -1815,11 +1821,13 @@ def test_swappable_first_inheritance(self):
18151821
@override_settings(AUTH_USER_MODEL="thirdapp.CustomUser")
18161822
def test_swappable_first_setting(self):
18171823
"""Tests that swappable models get their CreateModel first."""
1818-
# Make state
1819-
before = self.make_project_state([])
1820-
after = self.make_project_state([self.custom_user_no_inherit, self.aardvark])
1821-
autodetector = MigrationAutodetector(before, after)
1822-
changes = autodetector._detect_changes()
1824+
with isolate_lru_cache(apps.get_swappable_settings_name):
1825+
# Make state
1826+
before = self.make_project_state([])
1827+
after = self.make_project_state([self.custom_user_no_inherit, self.aardvark])
1828+
autodetector = MigrationAutodetector(before, after)
1829+
changes = autodetector._detect_changes()
1830+
18231831
# Right number/type of migrations?
18241832
self.assertNumberMigrations(changes, 'thirdapp', 1)
18251833
self.assertOperationTypes(changes, 'thirdapp', 0, ["CreateModel", "CreateModel"])
@@ -1999,20 +2007,22 @@ def test_circular_dependency_swappable(self):
19992007
#23322 - Tests that the dependency resolver knows to explicitly resolve
20002008
swappable models.
20012009
"""
2002-
tenant = ModelState("a", "Tenant", [
2003-
("id", models.AutoField(primary_key=True)),
2004-
("primary_address", models.ForeignKey("b.Address", models.CASCADE))],
2005-
bases=(AbstractBaseUser, )
2006-
)
2007-
address = ModelState("b", "Address", [
2008-
("id", models.AutoField(primary_key=True)),
2009-
("tenant", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)),
2010-
])
2011-
# Make state
2012-
before = self.make_project_state([])
2013-
after = self.make_project_state([address, tenant])
2014-
autodetector = MigrationAutodetector(before, after)
2015-
changes = autodetector._detect_changes()
2010+
with isolate_lru_cache(apps.get_swappable_settings_name):
2011+
tenant = ModelState("a", "Tenant", [
2012+
("id", models.AutoField(primary_key=True)),
2013+
("primary_address", models.ForeignKey("b.Address", models.CASCADE))],
2014+
bases=(AbstractBaseUser, )
2015+
)
2016+
address = ModelState("b", "Address", [
2017+
("id", models.AutoField(primary_key=True)),
2018+
("tenant", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)),
2019+
])
2020+
# Make state
2021+
before = self.make_project_state([])
2022+
after = self.make_project_state([address, tenant])
2023+
autodetector = MigrationAutodetector(before, after)
2024+
changes = autodetector._detect_changes()
2025+
20162026
# Right number/type of migrations?
20172027
self.assertNumberMigrations(changes, 'a', 2)
20182028
self.assertOperationTypes(changes, 'a', 0, ["CreateModel"])
@@ -2031,20 +2041,22 @@ def test_circular_dependency_swappable2(self):
20312041
swappable models but with the swappable not being the first migrated
20322042
model.
20332043
"""
2034-
address = ModelState("a", "Address", [
2035-
("id", models.AutoField(primary_key=True)),
2036-
("tenant", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)),
2037-
])
2038-
tenant = ModelState("b", "Tenant", [
2039-
("id", models.AutoField(primary_key=True)),
2040-
("primary_address", models.ForeignKey("a.Address", models.CASCADE))],
2041-
bases=(AbstractBaseUser, )
2042-
)
2043-
# Make state
2044-
before = self.make_project_state([])
2045-
after = self.make_project_state([address, tenant])
2046-
autodetector = MigrationAutodetector(before, after)
2047-
changes = autodetector._detect_changes()
2044+
with isolate_lru_cache(apps.get_swappable_settings_name):
2045+
address = ModelState("a", "Address", [
2046+
("id", models.AutoField(primary_key=True)),
2047+
("tenant", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)),
2048+
])
2049+
tenant = ModelState("b", "Tenant", [
2050+
("id", models.AutoField(primary_key=True)),
2051+
("primary_address", models.ForeignKey("a.Address", models.CASCADE))],
2052+
bases=(AbstractBaseUser, )
2053+
)
2054+
# Make state
2055+
before = self.make_project_state([])
2056+
after = self.make_project_state([address, tenant])
2057+
autodetector = MigrationAutodetector(before, after)
2058+
changes = autodetector._detect_changes()
2059+
20482060
# Right number/type of migrations?
20492061
self.assertNumberMigrations(changes, 'a', 2)
20502062
self.assertOperationTypes(changes, 'a', 0, ["CreateModel"])
@@ -2062,15 +2074,17 @@ def test_circular_dependency_swappable_self(self):
20622074
#23322 - Tests that the dependency resolver knows to explicitly resolve
20632075
swappable models.
20642076
"""
2065-
person = ModelState("a", "Person", [
2066-
("id", models.AutoField(primary_key=True)),
2067-
("parent1", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name='children'))
2068-
])
2069-
# Make state
2070-
before = self.make_project_state([])
2071-
after = self.make_project_state([person])
2072-
autodetector = MigrationAutodetector(before, after)
2073-
changes = autodetector._detect_changes()
2077+
with isolate_lru_cache(apps.get_swappable_settings_name):
2078+
person = ModelState("a", "Person", [
2079+
("id", models.AutoField(primary_key=True)),
2080+
("parent1", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name='children'))
2081+
])
2082+
# Make state
2083+
before = self.make_project_state([])
2084+
after = self.make_project_state([person])
2085+
autodetector = MigrationAutodetector(before, after)
2086+
changes = autodetector._detect_changes()
2087+
20742088
# Right number/type of migrations?
20752089
self.assertNumberMigrations(changes, 'a', 1)
20762090
self.assertOperationTypes(changes, 'a', 0, ["CreateModel"])

0 commit comments

Comments
 (0)