mirror of
https://github.com/django/django.git
synced 2025-08-04 02:48:35 +00:00
Fixed #15363 -- Renamed and normalized to get_queryset
the methods that return a QuerySet.
This commit is contained in:
parent
477d737e1e
commit
6983a1a540
46 changed files with 588 additions and 284 deletions
158
tests/deprecation/tests.py
Normal file
158
tests/deprecation/tests.py
Normal file
|
@ -0,0 +1,158 @@
|
|||
from __future__ import unicode_literals
|
||||
import warnings
|
||||
|
||||
from django.test.testcases import SimpleTestCase
|
||||
from django.utils import six
|
||||
from django.utils.deprecation import RenameMethodsBase
|
||||
|
||||
|
||||
class RenameManagerMethods(RenameMethodsBase):
|
||||
renamed_methods = (
|
||||
('old', 'new', PendingDeprecationWarning),
|
||||
)
|
||||
|
||||
|
||||
class RenameMethodsTests(SimpleTestCase):
|
||||
"""
|
||||
Tests the `RenameMethodsBase` type introduced to rename `get_query_set`
|
||||
to `get_queryset` across the code base following #15363.
|
||||
"""
|
||||
|
||||
def test_class_definition_warnings(self):
|
||||
"""
|
||||
Ensure a warning is raised upon class definition to suggest renaming
|
||||
the faulty method.
|
||||
"""
|
||||
with warnings.catch_warnings(record=True) as recorded:
|
||||
warnings.simplefilter('always')
|
||||
class Manager(six.with_metaclass(RenameManagerMethods)):
|
||||
def old(self):
|
||||
pass
|
||||
self.assertEqual(len(recorded), 1)
|
||||
msg = str(recorded[0].message)
|
||||
self.assertEqual(msg,
|
||||
'`Manager.old` method should be renamed `new`.')
|
||||
|
||||
def test_get_new_defined(self):
|
||||
"""
|
||||
Ensure `old` complains and not `new` when only `new` is defined.
|
||||
"""
|
||||
with warnings.catch_warnings(record=True) as recorded:
|
||||
warnings.simplefilter('ignore')
|
||||
class Manager(six.with_metaclass(RenameManagerMethods)):
|
||||
def new(self):
|
||||
pass
|
||||
warnings.simplefilter('always')
|
||||
manager = Manager()
|
||||
manager.new()
|
||||
self.assertEqual(len(recorded), 0)
|
||||
manager.old()
|
||||
self.assertEqual(len(recorded), 1)
|
||||
msg = str(recorded.pop().message)
|
||||
self.assertEqual(msg,
|
||||
'`Manager.old` is deprecated, use `new` instead.')
|
||||
|
||||
def test_get_old_defined(self):
|
||||
"""
|
||||
Ensure `old` complains when only `old` is defined.
|
||||
"""
|
||||
with warnings.catch_warnings(record=True) as recorded:
|
||||
warnings.simplefilter('ignore')
|
||||
class Manager(six.with_metaclass(RenameManagerMethods)):
|
||||
def old(self):
|
||||
pass
|
||||
warnings.simplefilter('always')
|
||||
manager = Manager()
|
||||
manager.new()
|
||||
self.assertEqual(len(recorded), 0)
|
||||
manager.old()
|
||||
self.assertEqual(len(recorded), 1)
|
||||
msg = str(recorded.pop().message)
|
||||
self.assertEqual(msg,
|
||||
'`Manager.old` is deprecated, use `new` instead.')
|
||||
|
||||
def test_deprecated_subclass_renamed(self):
|
||||
"""
|
||||
Ensure the correct warnings are raised when a class that didn't rename
|
||||
`old` subclass one that did.
|
||||
"""
|
||||
with warnings.catch_warnings(record=True) as recorded:
|
||||
warnings.simplefilter('ignore')
|
||||
class Renamed(six.with_metaclass(RenameManagerMethods)):
|
||||
def new(self):
|
||||
pass
|
||||
class Deprecated(Renamed):
|
||||
def old(self):
|
||||
super(Deprecated, self).old()
|
||||
warnings.simplefilter('always')
|
||||
deprecated = Deprecated()
|
||||
deprecated.new()
|
||||
self.assertEqual(len(recorded), 1)
|
||||
msg = str(recorded.pop().message)
|
||||
self.assertEqual(msg,
|
||||
'`Renamed.old` is deprecated, use `new` instead.')
|
||||
recorded[:] = []
|
||||
deprecated.old()
|
||||
self.assertEqual(len(recorded), 2)
|
||||
msgs = [str(warning.message) for warning in recorded]
|
||||
self.assertEqual(msgs, [
|
||||
'`Deprecated.old` is deprecated, use `new` instead.',
|
||||
'`Renamed.old` is deprecated, use `new` instead.',
|
||||
])
|
||||
|
||||
def test_renamed_subclass_deprecated(self):
|
||||
"""
|
||||
Ensure the correct warnings are raised when a class that renamed
|
||||
`old` subclass one that didn't.
|
||||
"""
|
||||
with warnings.catch_warnings(record=True) as recorded:
|
||||
warnings.simplefilter('ignore')
|
||||
class Deprecated(six.with_metaclass(RenameManagerMethods)):
|
||||
def old(self):
|
||||
pass
|
||||
class Renamed(Deprecated):
|
||||
def new(self):
|
||||
super(Renamed, self).new()
|
||||
warnings.simplefilter('always')
|
||||
renamed = Renamed()
|
||||
renamed.new()
|
||||
self.assertEqual(len(recorded), 0)
|
||||
renamed.old()
|
||||
self.assertEqual(len(recorded), 1)
|
||||
msg = str(recorded.pop().message)
|
||||
self.assertEqual(msg,
|
||||
'`Renamed.old` is deprecated, use `new` instead.')
|
||||
|
||||
def test_deprecated_subclass_renamed_and_mixins(self):
|
||||
"""
|
||||
Ensure the correct warnings are raised when a subclass inherit from a
|
||||
class that renamed `old` and mixins that may or may not have renamed
|
||||
`new`.
|
||||
"""
|
||||
with warnings.catch_warnings(record=True) as recorded:
|
||||
warnings.simplefilter('ignore')
|
||||
class Renamed(six.with_metaclass(RenameManagerMethods)):
|
||||
def new(self):
|
||||
pass
|
||||
class RenamedMixin(object):
|
||||
def new(self):
|
||||
super(RenamedMixin, self).new()
|
||||
class DeprecatedMixin(object):
|
||||
def old(self):
|
||||
super(DeprecatedMixin, self).old()
|
||||
class Deprecated(DeprecatedMixin, RenamedMixin, Renamed):
|
||||
pass
|
||||
warnings.simplefilter('always')
|
||||
deprecated = Deprecated()
|
||||
deprecated.new()
|
||||
self.assertEqual(len(recorded), 1)
|
||||
msg = str(recorded.pop().message)
|
||||
self.assertEqual(msg,
|
||||
'`RenamedMixin.old` is deprecated, use `new` instead.')
|
||||
deprecated.old()
|
||||
self.assertEqual(len(recorded), 2)
|
||||
msgs = [str(warning.message) for warning in recorded]
|
||||
self.assertEqual(msgs, [
|
||||
'`DeprecatedMixin.old` is deprecated, use `new` instead.',
|
||||
'`RenamedMixin.old` is deprecated, use `new` instead.',
|
||||
])
|
Loading…
Add table
Add a link
Reference in a new issue