summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2020-04-05 01:25:59 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-04-07 09:20:46 +0200
commit1d16c5d562a67625f7309cc7765b8c57d49bf182 (patch)
tree1789601daa010165cfe4c6298ec028f6dc95f12d /tests
parente03eb8db9371c2af864b124701b8f970ff405ca9 (diff)
Refs #27666 -- Ensured relationship consistency on delayed reloads.
Delayed reloads of state models broke identity based relationships between direct and non-direct ancestors. Basing models.Options related objects map of model labels instead of their identity ensured relationship consistency is maintained. Refs #30966. Co-authored-by: Hasan Ramezani <hasan.r67@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/migrations/test_state.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py
index ef198eb0b6..44d4cdf268 100644
--- a/tests/migrations/test_state.py
+++ b/tests/migrations/test_state.py
@@ -532,6 +532,30 @@ class StateTests(SimpleTestCase):
project_state.add_model(ModelState.from_model(B))
self.assertEqual(len(project_state.apps.get_models()), 2)
+ def test_reload_model_relationship_consistency(self):
+ project_state = ProjectState()
+ project_state.add_model(ModelState('migrations', 'A', []))
+ project_state.add_model(ModelState('migrations', 'B', [
+ ('a', models.ForeignKey('A', models.CASCADE)),
+ ]))
+ project_state.add_model(ModelState('migrations', 'C', [
+ ('b', models.ForeignKey('B', models.CASCADE)),
+ ]))
+ A = project_state.apps.get_model('migrations.A')
+ B = project_state.apps.get_model('migrations.B')
+ C = project_state.apps.get_model('migrations.C')
+ self.assertEqual([r.related_model for r in A._meta.related_objects], [B])
+ self.assertEqual([r.related_model for r in B._meta.related_objects], [C])
+ self.assertEqual([r.related_model for r in C._meta.related_objects], [])
+
+ project_state.reload_model('migrations', 'a', delay=True)
+ A = project_state.apps.get_model('migrations.A')
+ B = project_state.apps.get_model('migrations.B')
+ C = project_state.apps.get_model('migrations.C')
+ self.assertEqual([r.related_model for r in A._meta.related_objects], [B])
+ self.assertEqual([r.related_model for r in B._meta.related_objects], [C])
+ self.assertEqual([r.related_model for r in C._meta.related_objects], [])
+
def test_add_relations(self):
"""
#24573 - Adding relations to existing models should reload the