Fixed #23474 -- Prevented migrating backwards from unapplying the wrong migrations.

This commit is contained in:
valtron 2014-09-15 10:17:28 -06:00 committed by Tim Graham
parent 021f963e23
commit abcf28a076
8 changed files with 83 additions and 5 deletions

View file

@ -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")