summaryrefslogtreecommitdiff
path: root/tests/serializers
diff options
context:
space:
mode:
authorAmir Karimi <amk9978@gmail.com>2024-09-12 10:56:18 +0200
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-09-17 11:00:49 +0200
commitee5147cfd7de2add74a285537a8968ec074e70cd (patch)
tree64129a4de2722fb78dc486c83656f9d907aab296 /tests/serializers
parenta060a22ee2dde7aa29a5a29120087c4864887325 (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.py125
-rw-r--r--tests/serializers/test_deserializedobject.py13
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)>"
- )