1
0
mirror of https://github.com/django/django.git synced 2025-07-03 17:29:12 +00:00

Refs #36383 -- Added extra tests for serializing functools.partial in tests/migrations/test_writer.py.

This includes a test helper to better assert over the expected output.

Co-authored-by: Natalia <124304+nessita@users.noreply.github.com>
This commit is contained in:
Adam Johnson 2025-05-12 17:49:38 -03:00 committed by nessita
parent 4647e2b866
commit 57fdc104d2

View File

@ -300,6 +300,18 @@ class WriterTests(SimpleTestCase):
self.assertEqual(value.null, new_value.null)
self.assertEqual(value.unique, new_value.unique)
def assertSerializedFunctoolsPartialEqual(
self, value, expected_string, expected_imports
):
string, imports = MigrationWriter.serialize(value)
self.assertEqual(string, expected_string)
self.assertEqual(imports, expected_imports)
result = self.serialize_round_trip(value)
self.assertEqual(result.func, value.func)
self.assertEqual(result.args, value.args)
self.assertEqual(result.keywords, value.keywords)
return result
def test_serialize_numbers(self):
self.assertSerializedEqual(1)
self.assertSerializedEqual(1.2)
@ -895,19 +907,59 @@ class WriterTests(SimpleTestCase):
self.assertSerializedEqual(datetime.timedelta(minutes=42))
def test_serialize_functools_partial(self):
value = functools.partial(datetime.timedelta)
string, imports = MigrationWriter.serialize(value)
self.assertSerializedFunctoolsPartialEqual(
value,
"functools.partial(datetime.timedelta, *(), **{})",
{"import datetime", "import functools"},
)
def test_serialize_functools_partial_posarg(self):
value = functools.partial(datetime.timedelta, 1)
string, imports = MigrationWriter.serialize(value)
self.assertSerializedFunctoolsPartialEqual(
value,
"functools.partial(datetime.timedelta, *(1,), **{})",
{"import datetime", "import functools"},
)
def test_serialize_functools_partial_kwarg(self):
value = functools.partial(datetime.timedelta, seconds=2)
string, imports = MigrationWriter.serialize(value)
self.assertSerializedFunctoolsPartialEqual(
value,
"functools.partial(datetime.timedelta, *(), **{'seconds': 2})",
{"import datetime", "import functools"},
)
def test_serialize_functools_partial_mixed(self):
value = functools.partial(datetime.timedelta, 1, seconds=2)
result = self.serialize_round_trip(value)
self.assertEqual(result.func, value.func)
self.assertEqual(result.args, value.args)
self.assertEqual(result.keywords, value.keywords)
string, imports = MigrationWriter.serialize(value)
self.assertSerializedFunctoolsPartialEqual(
value,
"functools.partial(datetime.timedelta, *(1,), **{'seconds': 2})",
{"import datetime", "import functools"},
)
def test_serialize_functools_partial_non_identifier_keyword(self):
value = functools.partial(datetime.timedelta, **{"kebab-case": 1})
string, imports = MigrationWriter.serialize(value)
self.assertSerializedFunctoolsPartialEqual(
value,
"functools.partial(datetime.timedelta, *(), **{'kebab-case': 1})",
{"import datetime", "import functools"},
)
def test_serialize_functools_partialmethod(self):
value = functools.partialmethod(datetime.timedelta, 1, seconds=2)
result = self.serialize_round_trip(value)
string, imports = MigrationWriter.serialize(value)
result = self.assertSerializedFunctoolsPartialEqual(
value,
"functools.partialmethod(datetime.timedelta, *(1,), **{'seconds': 2})",
{"import datetime", "import functools"},
)
self.assertIsInstance(result, functools.partialmethod)
self.assertEqual(result.func, value.func)
self.assertEqual(result.args, value.args)
self.assertEqual(result.keywords, value.keywords)
def test_serialize_type_none(self):
self.assertSerializedEqual(NoneType)