summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorvaltron <valtron2000@gmail.com>2014-09-15 10:17:28 -0600
committerTim Graham <timograham@gmail.com>2014-09-15 14:56:59 -0400
commitabcf28a07695a45cb5fb15b81bffc97bea5e0be3 (patch)
treedde9ecc92558f4bf9aef2c727d458819087a4d66 /tests
parent021f963e2382a60de3ba41293ff718402671a1b3 (diff)
Fixed #23474 -- Prevented migrating backwards from unapplying the wrong migrations.
Diffstat (limited to 'tests')
-rw-r--r--tests/migrations/test_executor.py38
-rw-r--r--tests/migrations/test_migrations_backwards_deps_1/0001_initial.py8
-rw-r--r--tests/migrations/test_migrations_backwards_deps_1/0002_second.py9
-rw-r--r--tests/migrations/test_migrations_backwards_deps_1/__init__.py0
-rw-r--r--tests/migrations2/test_migrations_backwards_deps_2/0001_initial.py16
-rw-r--r--tests/migrations2/test_migrations_backwards_deps_2/__init__.py0
6 files changed, 71 insertions, 0 deletions
diff --git a/tests/migrations/test_executor.py b/tests/migrations/test_executor.py
index d07eecfcef..4631b80577 100644
--- a/tests/migrations/test_executor.py
+++ b/tests/migrations/test_executor.py
@@ -231,3 +231,41 @@ class ExecutorTests(MigrationTestBase):
executor.migrate([("migrations", None)])
self.assertTableNotExists("migrations_author")
self.assertTableNotExists("migrations_tribble")
+
+ @override_settings(
+ MIGRATION_MODULES={
+ "migrations": "migrations.test_migrations_backwards_deps_1",
+ "migrations2": "migrations2.test_migrations_backwards_deps_2",
+ },
+ )
+ def test_backwards_deps(self):
+ """
+ #23474 - Migrating backwards shouldn't cause the wrong migrations to be
+ unapplied.
+
+ Migration dependencies (x -> y === y depends on x):
+ m.0001 -+-> m.0002
+ +-> m2.0001
+
+ 1) Migrate m2 to 0001, causing { m.0001, m2.0002 } to be applied.
+ 2) Migrate m to 0001. m.0001 has already been applied, so this should
+ be a noop.
+ """
+ executor = MigrationExecutor(connection)
+ executor.migrate([("migrations2", "0001_initial")])
+ try:
+ self.assertTableExists("migrations2_example")
+ # Rebuild the graph to reflect the new DB state
+ executor.loader.build_graph()
+ self.assertEqual(
+ executor.migration_plan([("migrations", "0001_initial")]),
+ [],
+ )
+ executor.migrate([("migrations", "0001_initial")])
+ self.assertTableExists("migrations2_example")
+ finally:
+ # And migrate back to clean up the database
+ executor.loader.build_graph()
+ executor.migrate([("migrations", None)])
+ self.assertTableNotExists("migrations_author")
+ self.assertTableNotExists("migrations_tribble")
diff --git a/tests/migrations/test_migrations_backwards_deps_1/0001_initial.py b/tests/migrations/test_migrations_backwards_deps_1/0001_initial.py
new file mode 100644
index 0000000000..8e1925b472
--- /dev/null
+++ b/tests/migrations/test_migrations_backwards_deps_1/0001_initial.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ operations = []
diff --git a/tests/migrations/test_migrations_backwards_deps_1/0002_second.py b/tests/migrations/test_migrations_backwards_deps_1/0002_second.py
new file mode 100644
index 0000000000..512f32e97c
--- /dev/null
+++ b/tests/migrations/test_migrations_backwards_deps_1/0002_second.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ dependencies = [('migrations', '0001_initial')]
+ operations = []
diff --git a/tests/migrations/test_migrations_backwards_deps_1/__init__.py b/tests/migrations/test_migrations_backwards_deps_1/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations/test_migrations_backwards_deps_1/__init__.py
diff --git a/tests/migrations2/test_migrations_backwards_deps_2/0001_initial.py b/tests/migrations2/test_migrations_backwards_deps_2/0001_initial.py
new file mode 100644
index 0000000000..0b6eafb02f
--- /dev/null
+++ b/tests/migrations2/test_migrations_backwards_deps_2/0001_initial.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ dependencies = [('migrations', '0001_initial')]
+ operations = [
+ migrations.CreateModel(
+ "Example",
+ [
+ ("id", models.AutoField(primary_key=True)),
+ ],
+ ),
+ ]
diff --git a/tests/migrations2/test_migrations_backwards_deps_2/__init__.py b/tests/migrations2/test_migrations_backwards_deps_2/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/migrations2/test_migrations_backwards_deps_2/__init__.py