diff options
| author | Julien Hartmann <julien@etherdream.org> | 2016-06-23 17:10:52 +0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-07-11 13:34:18 -0400 |
| commit | 39c25b772b566f77e94119f880fc6f99d563fcb6 (patch) | |
| tree | 0f3e02057b4c43dd27d8840a4ea9cbd1c0b7f33f /tests | |
| parent | 4b6560f5a9a4f1788a1adcfbe43b8ceeeecfc0ef (diff) | |
[1.10.x] Fixed #26749 -- Preserved behavior of use_for_related_field during deprecation.
Backport of f4afb85d7e900123fa8f88110adc011ab184e153 from master
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/managers_regress/tests.py | 97 |
1 files changed, 94 insertions, 3 deletions
diff --git a/tests/managers_regress/tests.py b/tests/managers_regress/tests.py index 7c1223a5f1..feaca1cba0 100644 --- a/tests/managers_regress/tests.py +++ b/tests/managers_regress/tests.py @@ -334,11 +334,26 @@ class TestManagerDeprecations(TestCase): self.assertEqual(len(warns), 0) def test_use_for_related_fields_for_many_to_one(self): + # Common objects + class MyManagerQuerySet(models.QuerySet): + pass + + class MyLegacyManagerQuerySet(models.QuerySet): + pass + class MyManager(models.Manager): + def get_queryset(self): + return MyManagerQuerySet(model=self.model, using=self._db, hints=self._hints) + + class MyLegacyManager(models.Manager): use_for_related_fields = True + def get_queryset(self): + return MyLegacyManagerQuerySet(model=self.model, using=self._db, hints=self._hints) + + # With legacy config there should be a deprecation warning class MyRelModel(models.Model): - objects = MyManager() + objects = MyLegacyManager() class MyModel(models.Model): fk = models.ForeignKey(MyRelModel, on_delete=models.DO_NOTHING) @@ -375,16 +390,61 @@ class TestManagerDeprecations(TestCase): pass self.assertEqual(len(warns), 0) + # When mixing base_manager_name and use_for_related_fields, there + # should be warnings. + class MyRelModel3(models.Model): + my_base_manager = MyManager() + my_default_manager = MyLegacyManager() + + class Meta: + base_manager_name = 'my_base_manager' + default_manager_name = 'my_default_manager' + + class MyModel3(models.Model): + fk = models.ForeignKey(MyRelModel3, on_delete=models.DO_NOTHING) + + with warnings.catch_warnings(record=True) as warns: + warnings.simplefilter('always', RemovedInDjango20Warning) + try: + MyModel3(fk_id=42).fk + except DatabaseError: + pass + self.assertEqual(len(warns), 1) + self.assertEqual( + str(warns[0].message), + "use_for_related_fields is deprecated, " + "instead set Meta.base_manager_name on " + "'managers_regress.MyRelModel3'.", + ) + with warnings.catch_warnings(record=True): + warnings.simplefilter('always', RemovedInDjango20Warning) + self.assertIsInstance(MyModel3.fk.get_queryset(), MyLegacyManagerQuerySet) + def test_use_for_related_fields_for_one_to_one(self): + # Common objects + class MyManagerQuerySet(models.QuerySet): + pass + + class MyLegacyManagerQuerySet(models.QuerySet): + pass + class MyManager(models.Manager): + def get_queryset(self): + return MyManagerQuerySet(model=self.model, using=self._db, hints=self._hints) + + class MyLegacyManager(models.Manager): use_for_related_fields = True + def get_queryset(self): + return MyLegacyManagerQuerySet(model=self.model, using=self._db, hints=self._hints) + + # With legacy config there should be a deprecation warning class MyRelModel(models.Model): - objects = MyManager() + objects = MyLegacyManager() class MyModel(models.Model): o2o = models.OneToOneField(MyRelModel, on_delete=models.DO_NOTHING) - objects = MyManager() + objects = MyLegacyManager() with warnings.catch_warnings(record=True) as warns: warnings.simplefilter('always', RemovedInDjango20Warning) @@ -440,6 +500,37 @@ class TestManagerDeprecations(TestCase): pass self.assertEqual(len(warns), 0) + # When mixing base_manager_name and use_for_related_fields, there + # should be warnings. + class MyRelModel3(models.Model): + my_base_manager = MyManager() + my_default_manager = MyLegacyManager() + + class Meta: + base_manager_name = 'my_base_manager' + default_manager_name = 'my_default_manager' + + class MyModel3(models.Model): + o2o = models.OneToOneField(MyRelModel3, on_delete=models.DO_NOTHING) + + with warnings.catch_warnings(record=True) as warns: + warnings.simplefilter('always', RemovedInDjango20Warning) + try: + MyModel3(o2o_id=42).o2o + except DatabaseError: + pass + + self.assertEqual(len(warns), 1) + self.assertEqual( + str(warns[0].message), + "use_for_related_fields is deprecated, " + "instead set Meta.base_manager_name on " + "'managers_regress.MyRelModel3'.", + ) + with warnings.catch_warnings(record=True): + warnings.simplefilter('always', RemovedInDjango20Warning) + self.assertIsInstance(MyModel3.o2o.get_queryset(), MyLegacyManagerQuerySet) + def test_legacy_objects_is_created(self): class ConcreteParentWithoutManager(models.Model): pass |
