summaryrefslogtreecommitdiff
path: root/tests/basic
diff options
context:
space:
mode:
authorAdam Johnson <me@adamj.eu>2024-06-25 17:12:10 +0100
committerGitHub <noreply@github.com>2024-06-25 13:12:10 -0300
commit28522c3c8d5eb581347aececc3ac61c134528114 (patch)
tree90293cc1fe2d278aee8783a2ab4f287e4cbe3eeb /tests/basic
parentbcc327aa326093a39f01a9bc98198807444900f3 (diff)
Fixed #35554, Refs #35060 -- Corrected deprecated *args parsing in Model.save()/asave().
The transitional logic added to deprecate the usage of *args for Model.save()/asave() introduced two issues that this branch fixes: * Passing extra positional arguments no longer raised TypeError. * Passing a positional but empty update_fields would save all fields. Co-authored-by: Natalia <124304+nessita@users.noreply.github.com>
Diffstat (limited to 'tests/basic')
-rw-r--r--tests/basic/tests.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/basic/tests.py b/tests/basic/tests.py
index 38fb9ca200..4e89febed2 100644
--- a/tests/basic/tests.py
+++ b/tests/basic/tests.py
@@ -210,6 +210,35 @@ class ModelInstanceCreationTests(TestCase):
a.save(False, False, None, None)
self.assertEqual(Article.objects.count(), 1)
+ def test_save_deprecation_positional_arguments_used(self):
+ a = Article()
+ fields = ["headline"]
+ with (
+ self.assertWarns(RemovedInDjango60Warning),
+ mock.patch.object(a, "save_base") as mock_save_base,
+ ):
+ a.save(None, 1, 2, fields)
+ self.assertEqual(
+ mock_save_base.mock_calls,
+ [
+ mock.call(
+ using=2,
+ force_insert=None,
+ force_update=1,
+ update_fields=frozenset(fields),
+ )
+ ],
+ )
+
+ def test_save_too_many_positional_arguments(self):
+ a = Article()
+ msg = "Model.save() takes from 1 to 5 positional arguments but 6 were given"
+ with (
+ self.assertWarns(RemovedInDjango60Warning),
+ self.assertRaisesMessage(TypeError, msg),
+ ):
+ a.save(False, False, None, None, None)
+
async def test_asave_deprecation(self):
a = Article(headline="original", pub_date=datetime(2014, 5, 16))
msg = "Passing positional arguments to asave() is deprecated"
@@ -217,6 +246,35 @@ class ModelInstanceCreationTests(TestCase):
await a.asave(False, False, None, None)
self.assertEqual(await Article.objects.acount(), 1)
+ async def test_asave_deprecation_positional_arguments_used(self):
+ a = Article()
+ fields = ["headline"]
+ with (
+ self.assertWarns(RemovedInDjango60Warning),
+ mock.patch.object(a, "save_base") as mock_save_base,
+ ):
+ await a.asave(None, 1, 2, fields)
+ self.assertEqual(
+ mock_save_base.mock_calls,
+ [
+ mock.call(
+ using=2,
+ force_insert=None,
+ force_update=1,
+ update_fields=frozenset(fields),
+ )
+ ],
+ )
+
+ async def test_asave_too_many_positional_arguments(self):
+ a = Article()
+ msg = "Model.asave() takes from 1 to 5 positional arguments but 6 were given"
+ with (
+ self.assertWarns(RemovedInDjango60Warning),
+ self.assertRaisesMessage(TypeError, msg),
+ ):
+ await a.asave(False, False, None, None, None)
+
@ignore_warnings(category=RemovedInDjango60Warning)
def test_save_positional_arguments(self):
a = Article.objects.create(headline="original", pub_date=datetime(2014, 5, 16))