summaryrefslogtreecommitdiff
path: root/tests/deprecation
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@sixmedia.com>2013-03-08 09:15:23 -0500
committerSimon Charette <charette.s@gmail.com>2013-03-08 10:11:45 -0500
commit6983a1a540a6e6c3bd941fa15ddd8cb49f9ec74e (patch)
treee57559ebfd704705458e6e218dc1f3d868b2922c /tests/deprecation
parent477d737e1e6bdf93950c8a381906925c594fac2f (diff)
downloaddjango-6983a1a540a6e6c3bd941fa15ddd8cb49f9ec74e.tar.gz
Fixed #15363 -- Renamed and normalized to `get_queryset` the methods that return a QuerySet.
Diffstat (limited to 'tests/deprecation')
-rw-r--r--tests/deprecation/__init__.py0
-rw-r--r--tests/deprecation/models.py0
-rw-r--r--tests/deprecation/tests.py158
3 files changed, 158 insertions, 0 deletions
diff --git a/tests/deprecation/__init__.py b/tests/deprecation/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/deprecation/__init__.py
diff --git a/tests/deprecation/models.py b/tests/deprecation/models.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/deprecation/models.py
diff --git a/tests/deprecation/tests.py b/tests/deprecation/tests.py
new file mode 100644
index 0000000000..df752b3149
--- /dev/null
+++ b/tests/deprecation/tests.py
@@ -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.',
+ ])