mirror of
https://github.com/django/django.git
synced 2025-01-08 17:37:20 +00:00
126 lines
4.1 KiB
Python
126 lines
4.1 KiB
Python
|
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)
|