mirror of
https://github.com/django/django.git
synced 2025-08-31 07:47:37 +00:00
Fix weird planning issues when already fully migrated.
This commit is contained in:
parent
b4c493ecd3
commit
b61b634628
4 changed files with 63 additions and 5 deletions
|
@ -12,7 +12,7 @@ class ExecutorTests(TransactionTestCase):
|
|||
test failures first, as they may be propagating into here.
|
||||
"""
|
||||
|
||||
available_apps = ["migrations"]
|
||||
available_apps = ["migrations", "django.contrib.sessions"]
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
|
||||
def test_run(self):
|
||||
|
@ -38,3 +38,35 @@ class ExecutorTests(TransactionTestCase):
|
|||
# Are the tables there now?
|
||||
self.assertIn("migrations_author", connection.introspection.get_table_list(connection.cursor()))
|
||||
self.assertIn("migrations_book", connection.introspection.get_table_list(connection.cursor()))
|
||||
|
||||
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations", "sessions": "migrations.test_migrations_2"})
|
||||
def test_empty_plan(self):
|
||||
"""
|
||||
Tests that re-planning a full migration of a fully-migrated set doesn't
|
||||
perform spurious unmigrations and remigrations.
|
||||
|
||||
There was previously a bug where the executor just always performed the
|
||||
backwards plan for applied migrations - which even for the most recent
|
||||
migration in an app, might include other, dependent apps, and these
|
||||
were being unmigrated.
|
||||
"""
|
||||
# Make the initial plan, check it
|
||||
# We use 'sessions' here as the second app as it's always present
|
||||
# in INSTALLED_APPS, so we can happily assign it test migrations.
|
||||
executor = MigrationExecutor(connection)
|
||||
plan = executor.migration_plan([("migrations", "0002_second"), ("sessions", "0001_initial")])
|
||||
self.assertEqual(
|
||||
plan,
|
||||
[
|
||||
(executor.loader.graph.nodes["migrations", "0001_initial"], False),
|
||||
(executor.loader.graph.nodes["migrations", "0002_second"], False),
|
||||
(executor.loader.graph.nodes["sessions", "0001_initial"], False),
|
||||
],
|
||||
)
|
||||
# Fake-apply all migrations
|
||||
executor.migrate([("migrations", "0002_second"), ("sessions", "0001_initial")], fake=True)
|
||||
# Now plan a second time and make sure it's empty
|
||||
plan = executor.migration_plan([("migrations", "0002_second"), ("sessions", "0001_initial")])
|
||||
self.assertEqual(plan, [])
|
||||
# Erase all the fake records
|
||||
executor.recorder.flush()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue