diff options
| author | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-01-06 11:40:05 +0100 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-01-08 14:52:59 +0100 |
| commit | 6a1a9c0eade674780060cf8af5f5b3375156cdd5 (patch) | |
| tree | ea64fa386b19271bd81ea88926197b80fe358d64 /tests/composite_pk/tests.py | |
| parent | 15e207ce80581ec64bd790c37cce1bc07d01a744 (diff) | |
Fixed #36062 -- Handled serialization of CompositePrimaryKeys.
Diffstat (limited to 'tests/composite_pk/tests.py')
| -rw-r--r-- | tests/composite_pk/tests.py | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/tests/composite_pk/tests.py b/tests/composite_pk/tests.py index 4ebdbc371e..303c6592fb 100644 --- a/tests/composite_pk/tests.py +++ b/tests/composite_pk/tests.py @@ -17,7 +17,7 @@ from django.db.models import CompositePrimaryKey from django.forms import modelform_factory from django.test import TestCase -from .models import Comment, Post, Tenant, User +from .models import Comment, Post, Tenant, TimeStamped, User class CommentForm(forms.ModelForm): @@ -224,6 +224,13 @@ class CompositePKFixturesTests(TestCase): self.assertEqual(post_2.tenant_id, 2) self.assertEqual(post_2.pk, (post_2.tenant_id, post_2.id)) + def assert_deserializer(self, format, users, serialized_users): + deserialized_user = list(serializers.deserialize(format, serialized_users))[0] + self.assertEqual(deserialized_user.object.email, users[0].email) + self.assertEqual(deserialized_user.object.id, users[0].id) + self.assertEqual(deserialized_user.object.tenant, users[0].tenant) + self.assertEqual(deserialized_user.object.pk, users[0].pk) + def test_serialize_user_json(self): users = User.objects.filter(pk=(1, 1)) result = serializers.serialize("json", users) @@ -241,6 +248,7 @@ class CompositePKFixturesTests(TestCase): } ], ) + self.assert_deserializer(format="json", users=users, serialized_users=result) def test_serialize_user_jsonl(self): users = User.objects.filter(pk=(1, 2)) @@ -257,6 +265,7 @@ class CompositePKFixturesTests(TestCase): }, }, ) + self.assert_deserializer(format="jsonl", users=users, serialized_users=result) @unittest.skipUnless(HAS_YAML, "No yaml library detected") def test_serialize_user_yaml(self): @@ -276,6 +285,7 @@ class CompositePKFixturesTests(TestCase): }, ], ) + self.assert_deserializer(format="yaml", users=users, serialized_users=result) def test_serialize_user_python(self): users = User.objects.filter(pk=(2, 4)) @@ -294,6 +304,13 @@ class CompositePKFixturesTests(TestCase): }, ], ) + self.assert_deserializer(format="python", users=users, serialized_users=result) + + def test_serialize_user_xml(self): + users = User.objects.filter(pk=(1, 1)) + result = serializers.serialize("xml", users) + self.assertIn('<object model="composite_pk.user" pk=\'["1", "1"]\'>', result) + self.assert_deserializer(format="xml", users=users, serialized_users=result) def test_serialize_post_uuid(self): posts = Post.objects.filter(pk=(2, "11111111-1111-1111-1111-111111111111")) @@ -311,3 +328,27 @@ class CompositePKFixturesTests(TestCase): }, ], ) + + def test_serialize_datetime(self): + result = serializers.serialize("json", TimeStamped.objects.all()) + self.assertEqual( + json.loads(result), + [ + { + "model": "composite_pk.timestamped", + "pk": [1, "2022-01-12T05:55:14.956"], + "fields": { + "id": 1, + "created": "2022-01-12T05:55:14.956", + }, + }, + ], + ) + + def test_invalid_pk_extra_field(self): + json = ( + '[{"fields": {"email": "user0001@example.com", "id": 1, "tenant": 1}, ' + '"pk": [1, 1, "extra"], "model": "composite_pk.user"}]' + ) + with self.assertRaises(serializers.base.DeserializationError): + next(serializers.deserialize("json", json)) |
