mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
committed by
Markus Holtermann
parent
6b5926978b
commit
509379a161
@@ -397,3 +397,70 @@ class LoaderTests(TestCase):
|
||||
msg = "Migration migrations.0002_second is applied before its dependency migrations.0001_initial"
|
||||
with self.assertRaisesMessage(InconsistentMigrationHistory, msg):
|
||||
loader.check_consistent_history(connection)
|
||||
|
||||
@override_settings(MIGRATION_MODULES={
|
||||
"app1": "migrations.test_migrations_squashed_ref_squashed.app1",
|
||||
"app2": "migrations.test_migrations_squashed_ref_squashed.app2",
|
||||
})
|
||||
@modify_settings(INSTALLED_APPS={'append': [
|
||||
"migrations.test_migrations_squashed_ref_squashed.app1",
|
||||
"migrations.test_migrations_squashed_ref_squashed.app2",
|
||||
]})
|
||||
def test_loading_squashed_ref_squashed(self):
|
||||
"Tests loading a squashed migration with a new migration referencing it"
|
||||
"""
|
||||
The sample migrations are structred like this:
|
||||
|
||||
app_1 1 --> 2 ---------------------*--> 3 *--> 4
|
||||
\ / /
|
||||
*-------------------*----/--> 2_sq_3 --*
|
||||
\ / /
|
||||
=============== \ ============= / == / ======================
|
||||
app_2 *--> 1_sq_2 --* /
|
||||
\ /
|
||||
*--> 1 --> 2 --*
|
||||
|
||||
Where 2_sq_3 is a replacing migration for 2 and 3 in app_1,
|
||||
as 1_sq_2 is a replacing migration for 1 and 2 in app_2.
|
||||
"""
|
||||
|
||||
loader = MigrationLoader(connection)
|
||||
recorder = MigrationRecorder(connection)
|
||||
self.addCleanup(recorder.flush)
|
||||
|
||||
# Load with nothing applied: both migrations squashed.
|
||||
loader.build_graph()
|
||||
plan = set(loader.graph.forwards_plan(('app1', '4_auto')))
|
||||
plan = plan - loader.applied_migrations
|
||||
expected_plan = {
|
||||
('app1', '1_auto'),
|
||||
('app2', '1_squashed_2'),
|
||||
('app1', '2_squashed_3'),
|
||||
('app1', '4_auto'),
|
||||
}
|
||||
self.assertEqual(plan, expected_plan)
|
||||
|
||||
# Fake-apply a few from app1: unsquashes migration in app1.
|
||||
recorder.record_applied('app1', '1_auto')
|
||||
recorder.record_applied('app1', '2_auto')
|
||||
loader.build_graph()
|
||||
plan = set(loader.graph.forwards_plan(('app1', '4_auto')))
|
||||
plan = plan - loader.applied_migrations
|
||||
expected_plan = {
|
||||
('app2', '1_squashed_2'),
|
||||
('app1', '3_auto'),
|
||||
('app1', '4_auto'),
|
||||
}
|
||||
self.assertEqual(plan, expected_plan)
|
||||
|
||||
# Fake-apply one from app2: unsquashes migration in app2 too.
|
||||
recorder.record_applied('app2', '1_auto')
|
||||
loader.build_graph()
|
||||
plan = set(loader.graph.forwards_plan(('app1', '4_auto')))
|
||||
plan = plan - loader.applied_migrations
|
||||
expected_plan = {
|
||||
('app2', '2_auto'),
|
||||
('app1', '3_auto'),
|
||||
('app1', '4_auto'),
|
||||
}
|
||||
self.assertEqual(plan, expected_plan)
|
||||
|
||||
Reference in New Issue
Block a user