summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLoïc Bistuer <loic.bistuer@gmail.com>2016-06-20 23:55:57 +0700
committerTim Graham <timograham@gmail.com>2016-06-20 12:55:57 -0400
commit2eb7cb2fffcc382979d0731370de26b051d04659 (patch)
treed882d25445fc3d47a1f46fd2722239fc95e4bd6e /tests
parenta12826bba7a6d75862f99ae5cd48c4c1854208b8 (diff)
Fixed #26643 -- Prevented unnecessary AlterModelManagers operations caused by the manager inheritance refactor.
This also makes migrations respect the base_manager_name and default_manager_name model options. Thanks Anthony King and Matthew Schinckel for the initial patches.
Diffstat (limited to 'tests')
-rw-r--r--tests/migrations/test_state.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py
index d59a08b7b4..d165221aa6 100644
--- a/tests/migrations/test_state.py
+++ b/tests/migrations/test_state.py
@@ -191,6 +191,78 @@ class StateTests(SimpleTestCase):
author_state = project_state.models['migrations', 'author']
self.assertEqual(author_state.managers, [('authors', custom_manager)])
+ def test_custom_default_manager_named_objects_with_false_migration_flag(self):
+ """
+ When a manager is added with a name of 'objects' but it does not
+ have `use_in_migrations = True`, no migration should be added to the
+ model state (#26643).
+ """
+ new_apps = Apps(['migrations'])
+
+ class Author(models.Model):
+ objects = models.Manager()
+
+ class Meta:
+ app_label = 'migrations'
+ apps = new_apps
+
+ project_state = ProjectState.from_apps(new_apps)
+ author_state = project_state.models['migrations', 'author']
+ self.assertEqual(author_state.managers, [])
+
+ def test_custom_default_manager(self):
+ new_apps = Apps(['migrations'])
+
+ class Author(models.Model):
+ manager1 = models.Manager()
+ manager2 = models.Manager()
+
+ class Meta:
+ app_label = 'migrations'
+ apps = new_apps
+ default_manager_name = 'manager2'
+
+ project_state = ProjectState.from_apps(new_apps)
+ author_state = project_state.models['migrations', 'author']
+ self.assertEqual(author_state.options['default_manager_name'], 'manager2')
+ self.assertEqual(author_state.managers, [('manager2', Author.manager1)])
+
+ def test_custom_base_manager(self):
+ new_apps = Apps(['migrations'])
+
+ class Author(models.Model):
+ manager1 = models.Manager()
+ manager2 = models.Manager()
+
+ class Meta:
+ app_label = 'migrations'
+ apps = new_apps
+ base_manager_name = 'manager2'
+
+ class Author2(models.Model):
+ manager1 = models.Manager()
+ manager2 = models.Manager()
+
+ class Meta:
+ app_label = 'migrations'
+ apps = new_apps
+ base_manager_name = 'manager1'
+
+ project_state = ProjectState.from_apps(new_apps)
+
+ author_state = project_state.models['migrations', 'author']
+ self.assertEqual(author_state.options['base_manager_name'], 'manager2')
+ self.assertEqual(author_state.managers, [
+ ('manager1', Author.manager1),
+ ('manager2', Author.manager2),
+ ])
+
+ author2_state = project_state.models['migrations', 'author2']
+ self.assertEqual(author2_state.options['base_manager_name'], 'manager1')
+ self.assertEqual(author2_state.managers, [
+ ('manager1', Author2.manager1),
+ ])
+
def test_apps_bulk_update(self):
"""
StateApps.bulk_update() should update apps.ready to False and reset