diff options
| author | Amir Karimi <amk9978@gmail.com> | 2024-09-12 10:56:18 +0200 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-09-17 11:00:49 +0200 |
| commit | ee5147cfd7de2add74a285537a8968ec074e70cd (patch) | |
| tree | 64129a4de2722fb78dc486c83656f9d907aab296 /tests/serializers | |
| parent | a060a22ee2dde7aa29a5a29120087c4864887325 (diff) | |
Fixed #29522 -- Refactored the Deserializer functions to classes.
Co-authored-by: Emad Mokhtar <emad.mokhtar@veneficus.nl>
Diffstat (limited to 'tests/serializers')
| -rw-r--r-- | tests/serializers/test_deserialization.py | 125 | ||||
| -rw-r--r-- | tests/serializers/test_deserializedobject.py | 13 |
2 files changed, 125 insertions, 13 deletions
diff --git a/tests/serializers/test_deserialization.py b/tests/serializers/test_deserialization.py new file mode 100644 index 0000000000..3c4af2ce33 --- /dev/null +++ b/tests/serializers/test_deserialization.py @@ -0,0 +1,125 @@ +import json + +from django.core.serializers.base import DeserializationError, DeserializedObject +from django.core.serializers.json import Deserializer as JsonDeserializer +from django.core.serializers.jsonl import Deserializer as JsonlDeserializer +from django.core.serializers.python import Deserializer +from django.core.serializers.pyyaml import Deserializer as YamlDeserializer +from django.test import SimpleTestCase + +from .models import Author + + +class TestDeserializer(SimpleTestCase): + def setUp(self): + self.object_list = [ + {"pk": 1, "model": "serializers.author", "fields": {"name": "Jane"}}, + {"pk": 2, "model": "serializers.author", "fields": {"name": "Joe"}}, + ] + self.deserializer = Deserializer(self.object_list) + self.jane = Author(name="Jane", pk=1) + self.joe = Author(name="Joe", pk=2) + + def test_deserialized_object_repr(self): + deserial_obj = DeserializedObject(obj=self.jane) + self.assertEqual( + repr(deserial_obj), "<DeserializedObject: serializers.Author(pk=1)>" + ) + + def test_next_functionality(self): + first_item = next(self.deserializer) + + self.assertEqual(first_item.object, self.jane) + + second_item = next(self.deserializer) + self.assertEqual(second_item.object, self.joe) + + with self.assertRaises(StopIteration): + next(self.deserializer) + + def test_invalid_model_identifier(self): + invalid_object_list = [ + {"pk": 1, "model": "serializers.author2", "fields": {"name": "Jane"}} + ] + self.deserializer = Deserializer(invalid_object_list) + with self.assertRaises(DeserializationError): + next(self.deserializer) + + deserializer = Deserializer(object_list=[]) + with self.assertRaises(StopIteration): + next(deserializer) + + def test_custom_deserializer(self): + class CustomDeserializer(Deserializer): + @staticmethod + def _get_model_from_node(model_identifier): + return Author + + deserializer = CustomDeserializer(self.object_list) + result = next(iter(deserializer)) + deserialized_object = result.object + self.assertEqual( + self.jane, + deserialized_object, + ) + + def test_empty_object_list(self): + deserializer = Deserializer(object_list=[]) + with self.assertRaises(StopIteration): + next(deserializer) + + def test_json_bytes_input(self): + test_string = json.dumps(self.object_list) + stream = test_string.encode("utf-8") + deserializer = JsonDeserializer(stream_or_string=stream) + + first_item = next(deserializer) + second_item = next(deserializer) + + self.assertEqual(first_item.object, self.jane) + self.assertEqual(second_item.object, self.joe) + + def test_jsonl_bytes_input(self): + test_string = """ + {"pk": 1, "model": "serializers.author", "fields": {"name": "Jane"}} + {"pk": 2, "model": "serializers.author", "fields": {"name": "Joe"}} + {"pk": 3, "model": "serializers.author", "fields": {"name": "John"}} + {"pk": 4, "model": "serializers.author", "fields": {"name": "Smith"}}""" + stream = test_string.encode("utf-8") + deserializer = JsonlDeserializer(stream_or_string=stream) + + first_item = next(deserializer) + second_item = next(deserializer) + + self.assertEqual(first_item.object, self.jane) + self.assertEqual(second_item.object, self.joe) + + def test_yaml_bytes_input(self): + test_string = """- pk: 1 + model: serializers.author + fields: + name: Jane + +- pk: 2 + model: serializers.author + fields: + name: Joe + +- pk: 3 + model: serializers.author + fields: + name: John + +- pk: 4 + model: serializers.author + fields: + name: Smith +""" + stream = test_string.encode("utf-8") + deserializer = YamlDeserializer(stream_or_string=stream) + + first_item = next(deserializer) + second_item = next(deserializer) + + self.assertEqual(first_item.object, self.jane) + self.assertEqual(second_item.object, self.joe) diff --git a/tests/serializers/test_deserializedobject.py b/tests/serializers/test_deserializedobject.py deleted file mode 100644 index 1252052100..0000000000 --- a/tests/serializers/test_deserializedobject.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.core.serializers.base import DeserializedObject -from django.test import SimpleTestCase - -from .models import Author - - -class TestDeserializedObjectTests(SimpleTestCase): - def test_repr(self): - author = Author(name="John", pk=1) - deserial_obj = DeserializedObject(obj=author) - self.assertEqual( - repr(deserial_obj), "<DeserializedObject: serializers.Author(pk=1)>" - ) |
