summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Holtermann <info@markusholtermann.eu>2015-08-28 08:21:30 +1000
committerMarkus Holtermann <info@markusholtermann.eu>2015-08-28 10:17:34 +1000
commit8e631a3175f145dbf3eec269f8e3c59a1520540f (patch)
tree3d3f2816cedcb9feb0ed0e82a6e9841174b583cd
parent22a791e608922d55552da6c7c9ddc81ae29b7ba4 (diff)
Refs #24590 -- Ensured isolation between autodetector tests
Fixed a regression introduced in e1427cc609fa6ab247501b101cfb3c0092aba55b when running tests in reverse order.
-rw-r--r--tests/field_deconstruction/tests.py18
-rw-r--r--tests/migrations/test_autodetector.py116
2 files changed, 75 insertions, 59 deletions
diff --git a/tests/field_deconstruction/tests.py b/tests/field_deconstruction/tests.py
index 5e04552ff4..6f4b9fd2cd 100644
--- a/tests/field_deconstruction/tests.py
+++ b/tests/field_deconstruction/tests.py
@@ -226,10 +226,11 @@ class FieldDeconstructionTests(SimpleTestCase):
# there's no validation. We just want to check the setting stuff works.
field = models.ForeignKey("auth.Permission", models.CASCADE)
name, path, args, kwargs = field.deconstruct()
- self.assertEqual(path, "django.db.models.ForeignKey")
- self.assertEqual(args, [])
- self.assertEqual(kwargs, {"to": "auth.Permission", "on_delete": models.CASCADE})
- self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
+
+ self.assertEqual(path, "django.db.models.ForeignKey")
+ self.assertEqual(args, [])
+ self.assertEqual(kwargs, {"to": "auth.Permission", "on_delete": models.CASCADE})
+ self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
def test_image_field(self):
field = models.ImageField(upload_to="foo/barness", width_field="width", height_field="height")
@@ -305,10 +306,11 @@ class FieldDeconstructionTests(SimpleTestCase):
# there's no validation. We just want to check the setting stuff works.
field = models.ManyToManyField("auth.Permission")
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'].setting_name, "AUTH_USER_MODEL")
+
+ self.assertEqual(path, "django.db.models.ManyToManyField")
+ self.assertEqual(args, [])
+ self.assertEqual(kwargs, {"to": "auth.Permission"})
+ self.assertEqual(kwargs['to'].setting_name, "AUTH_USER_MODEL")
def test_null_boolean_field(self):
field = models.NullBooleanField()
diff --git a/tests/migrations/test_autodetector.py b/tests/migrations/test_autodetector.py
index 8bee31c217..0176ccabe6 100644
--- a/tests/migrations/test_autodetector.py
+++ b/tests/migrations/test_autodetector.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import re
+from django.apps import apps
from django.conf import settings
from django.contrib.auth.models import AbstractBaseUser
from django.core.validators import RegexValidator, validate_slug
@@ -11,6 +12,7 @@ from django.db.migrations.loader import MigrationLoader
from django.db.migrations.questioner import MigrationQuestioner
from django.db.migrations.state import ModelState, ProjectState
from django.test import TestCase, mock, override_settings
+from django.test.utils import isolate_lru_cache
from .models import FoodManager, FoodQuerySet
@@ -1310,10 +1312,12 @@ class AutodetectorTests(TestCase):
@override_settings(AUTH_USER_MODEL="thirdapp.CustomUser")
def test_swappable(self):
- before = self.make_project_state([self.custom_user])
- after = self.make_project_state([self.custom_user, self.author_with_custom_user])
- autodetector = MigrationAutodetector(before, after)
- changes = autodetector._detect_changes()
+ with isolate_lru_cache(apps.get_swappable_settings_name):
+ before = self.make_project_state([self.custom_user])
+ after = self.make_project_state([self.custom_user, self.author_with_custom_user])
+ autodetector = MigrationAutodetector(before, after)
+ changes = autodetector._detect_changes()
+
# Right number/type of migrations?
self.assertNumberMigrations(changes, 'testapp', 1)
self.assertOperationTypes(changes, 'testapp', 0, ["CreateModel"])
@@ -1321,11 +1325,13 @@ class AutodetectorTests(TestCase):
self.assertMigrationDependencies(changes, 'testapp', 0, [("__setting__", "AUTH_USER_MODEL")])
def test_swappable_changed(self):
- before = self.make_project_state([self.custom_user, self.author_with_user])
- with override_settings(AUTH_USER_MODEL="thirdapp.CustomUser"):
- after = self.make_project_state([self.custom_user, self.author_with_custom_user])
- autodetector = MigrationAutodetector(before, after)
- changes = autodetector._detect_changes()
+ with isolate_lru_cache(apps.get_swappable_settings_name):
+ before = self.make_project_state([self.custom_user, self.author_with_user])
+ with override_settings(AUTH_USER_MODEL="thirdapp.CustomUser"):
+ after = self.make_project_state([self.custom_user, self.author_with_custom_user])
+ autodetector = MigrationAutodetector(before, after)
+ changes = autodetector._detect_changes()
+
# Right number/type of migrations?
self.assertNumberMigrations(changes, 'testapp', 1)
self.assertOperationTypes(changes, 'testapp', 0, ["AlterField"])
@@ -1815,11 +1821,13 @@ class AutodetectorTests(TestCase):
@override_settings(AUTH_USER_MODEL="thirdapp.CustomUser")
def test_swappable_first_setting(self):
"""Tests that swappable models get their CreateModel first."""
- # Make state
- before = self.make_project_state([])
- after = self.make_project_state([self.custom_user_no_inherit, self.aardvark])
- autodetector = MigrationAutodetector(before, after)
- changes = autodetector._detect_changes()
+ with isolate_lru_cache(apps.get_swappable_settings_name):
+ # Make state
+ before = self.make_project_state([])
+ after = self.make_project_state([self.custom_user_no_inherit, self.aardvark])
+ autodetector = MigrationAutodetector(before, after)
+ changes = autodetector._detect_changes()
+
# Right number/type of migrations?
self.assertNumberMigrations(changes, 'thirdapp', 1)
self.assertOperationTypes(changes, 'thirdapp', 0, ["CreateModel", "CreateModel"])
@@ -1999,20 +2007,22 @@ class AutodetectorTests(TestCase):
#23322 - Tests that the dependency resolver knows to explicitly resolve
swappable models.
"""
- tenant = ModelState("a", "Tenant", [
- ("id", models.AutoField(primary_key=True)),
- ("primary_address", models.ForeignKey("b.Address", models.CASCADE))],
- bases=(AbstractBaseUser, )
- )
- address = ModelState("b", "Address", [
- ("id", models.AutoField(primary_key=True)),
- ("tenant", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)),
- ])
- # Make state
- before = self.make_project_state([])
- after = self.make_project_state([address, tenant])
- autodetector = MigrationAutodetector(before, after)
- changes = autodetector._detect_changes()
+ with isolate_lru_cache(apps.get_swappable_settings_name):
+ tenant = ModelState("a", "Tenant", [
+ ("id", models.AutoField(primary_key=True)),
+ ("primary_address", models.ForeignKey("b.Address", models.CASCADE))],
+ bases=(AbstractBaseUser, )
+ )
+ address = ModelState("b", "Address", [
+ ("id", models.AutoField(primary_key=True)),
+ ("tenant", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)),
+ ])
+ # Make state
+ before = self.make_project_state([])
+ after = self.make_project_state([address, tenant])
+ autodetector = MigrationAutodetector(before, after)
+ changes = autodetector._detect_changes()
+
# Right number/type of migrations?
self.assertNumberMigrations(changes, 'a', 2)
self.assertOperationTypes(changes, 'a', 0, ["CreateModel"])
@@ -2031,20 +2041,22 @@ class AutodetectorTests(TestCase):
swappable models but with the swappable not being the first migrated
model.
"""
- address = ModelState("a", "Address", [
- ("id", models.AutoField(primary_key=True)),
- ("tenant", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)),
- ])
- tenant = ModelState("b", "Tenant", [
- ("id", models.AutoField(primary_key=True)),
- ("primary_address", models.ForeignKey("a.Address", models.CASCADE))],
- bases=(AbstractBaseUser, )
- )
- # Make state
- before = self.make_project_state([])
- after = self.make_project_state([address, tenant])
- autodetector = MigrationAutodetector(before, after)
- changes = autodetector._detect_changes()
+ with isolate_lru_cache(apps.get_swappable_settings_name):
+ address = ModelState("a", "Address", [
+ ("id", models.AutoField(primary_key=True)),
+ ("tenant", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)),
+ ])
+ tenant = ModelState("b", "Tenant", [
+ ("id", models.AutoField(primary_key=True)),
+ ("primary_address", models.ForeignKey("a.Address", models.CASCADE))],
+ bases=(AbstractBaseUser, )
+ )
+ # Make state
+ before = self.make_project_state([])
+ after = self.make_project_state([address, tenant])
+ autodetector = MigrationAutodetector(before, after)
+ changes = autodetector._detect_changes()
+
# Right number/type of migrations?
self.assertNumberMigrations(changes, 'a', 2)
self.assertOperationTypes(changes, 'a', 0, ["CreateModel"])
@@ -2062,15 +2074,17 @@ class AutodetectorTests(TestCase):
#23322 - Tests that the dependency resolver knows to explicitly resolve
swappable models.
"""
- person = ModelState("a", "Person", [
- ("id", models.AutoField(primary_key=True)),
- ("parent1", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name='children'))
- ])
- # Make state
- before = self.make_project_state([])
- after = self.make_project_state([person])
- autodetector = MigrationAutodetector(before, after)
- changes = autodetector._detect_changes()
+ with isolate_lru_cache(apps.get_swappable_settings_name):
+ person = ModelState("a", "Person", [
+ ("id", models.AutoField(primary_key=True)),
+ ("parent1", models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name='children'))
+ ])
+ # Make state
+ before = self.make_project_state([])
+ after = self.make_project_state([person])
+ autodetector = MigrationAutodetector(before, after)
+ changes = autodetector._detect_changes()
+
# Right number/type of migrations?
self.assertNumberMigrations(changes, 'a', 1)
self.assertOperationTypes(changes, 'a', 0, ["CreateModel"])