diff options
| author | Markus Holtermann <info@markusholtermann.eu> | 2015-01-13 18:18:23 +0100 |
|---|---|---|
| committer | Markus Holtermann <info@markusholtermann.eu> | 2015-01-14 16:09:33 +0100 |
| commit | 88786afbffc5c095f6491e080afea394f63bb44a (patch) | |
| tree | 631f1f1ca340a5641271ee058304244e153a4bfa /tests | |
| parent | ec7ef5afbbd12abe74314d557aabb3d85d667749 (diff) | |
Fixed #24147 -- Prevented managers leaking model during migrations
Thanks Tim Graham for the review.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/migrations/test_state.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py index e069649810..6410477b36 100644 --- a/tests/migrations/test_state.py +++ b/tests/migrations/test_state.py @@ -1,5 +1,6 @@ from django.apps.registry import Apps from django.db import models +from django.db.migrations.operations import RemoveField from django.db.migrations.state import ProjectState, ModelState, InvalidBasesError from django.test import TestCase @@ -505,6 +506,43 @@ class StateTests(TestCase): ["id", "author"], ) + def test_manager_refer_correct_model_version(self): + """ + #24147 - Tests that managers refer to the correct version of a + historical model + """ + project_state = ProjectState() + project_state.add_model(ModelState( + app_label="migrations", + name="Tag", + fields=[ + ("id", models.AutoField(primary_key=True)), + ("hidden", models.BooleanField()), + ], + managers=[ + ('food_mgr', FoodManager('a', 'b')), + ('food_qs', FoodQuerySet.as_manager()), + ] + )) + + old_model = project_state.apps.get_model('migrations', 'tag') + + new_state = project_state.clone() + operation = RemoveField("tag", "hidden") + operation.state_forwards("migrations", new_state) + + new_model = new_state.apps.get_model('migrations', 'tag') + + self.assertIsNot(old_model, new_model) + self.assertIs(old_model, old_model.food_mgr.model) + self.assertIs(old_model, old_model.food_qs.model) + self.assertIs(new_model, new_model.food_mgr.model) + self.assertIs(new_model, new_model.food_qs.model) + self.assertIsNot(old_model.food_mgr, new_model.food_mgr) + self.assertIsNot(old_model.food_qs, new_model.food_qs) + self.assertIsNot(old_model.food_mgr.model, new_model.food_mgr.model) + self.assertIsNot(old_model.food_qs.model, new_model.food_qs.model) + class ModelStateTests(TestCase): def test_custom_model_base(self): |
