Files
opensearch-pyd/test_elasticsearch/test_serializer.py
T

83 lines
2.8 KiB
Python
Raw Normal View History

2013-12-04 15:07:56 +01:00
# -*- coding: utf-8 -*-
2013-10-22 00:26:58 +02:00
import sys
2015-12-09 23:15:59 -08:00
import uuid
2013-10-22 00:26:58 +02:00
2013-05-02 23:42:11 +02:00
from datetime import datetime
2013-10-22 00:26:58 +02:00
from decimal import Decimal
2013-05-02 23:42:11 +02:00
2019-05-10 09:16:33 -06:00
from elasticsearch.serializer import (
JSONSerializer,
Deserializer,
DEFAULT_SERIALIZERS,
TextSerializer,
)
from elasticsearch.exceptions import SerializationError, ImproperlyConfigured
2013-05-02 23:42:11 +02:00
2013-10-22 00:26:58 +02:00
from .test_cases import TestCase, SkipTest
2013-08-28 19:11:28 +02:00
2019-05-10 09:16:33 -06:00
2013-05-02 23:42:11 +02:00
class TestJSONSerializer(TestCase):
def test_datetime_serialization(self):
2019-05-10 09:16:33 -06:00
self.assertEquals(
'{"d":"2010-10-01T02:30:00"}',
JSONSerializer().dumps({"d": datetime(2010, 10, 1, 2, 30)}),
)
2013-05-03 17:56:27 +02:00
2013-10-22 00:26:58 +02:00
def test_decimal_serialization(self):
if sys.version_info[:2] == (2, 6):
raise SkipTest("Float rounding is broken in 2.6.")
2019-05-10 09:16:33 -06:00
self.assertEquals('{"d":3.8}', JSONSerializer().dumps({"d": Decimal("3.8")}))
2013-10-22 00:26:58 +02:00
2015-12-09 23:15:59 -08:00
def test_uuid_serialization(self):
2019-05-10 09:16:33 -06:00
self.assertEquals(
'{"d":"00000000-0000-0000-0000-000000000003"}',
JSONSerializer().dumps(
{"d": uuid.UUID("00000000-0000-0000-0000-000000000003")}
),
)
2015-12-09 23:15:59 -08:00
2013-05-03 17:56:27 +02:00
def test_raises_serialization_error_on_dump_error(self):
self.assertRaises(SerializationError, JSONSerializer().dumps, object())
def test_raises_serialization_error_on_load_error(self):
self.assertRaises(SerializationError, JSONSerializer().loads, object())
2019-05-10 09:16:33 -06:00
self.assertRaises(SerializationError, JSONSerializer().loads, "")
self.assertRaises(SerializationError, JSONSerializer().loads, "{{")
2013-06-20 14:07:09 +02:00
def test_strings_are_left_untouched(self):
2014-02-21 16:53:56 +01:00
self.assertEquals("你好", JSONSerializer().dumps("你好"))
class TestTextSerializer(TestCase):
def test_strings_are_left_untouched(self):
2014-02-21 16:53:56 +01:00
self.assertEquals("你好", TextSerializer().dumps("你好"))
def test_raises_serialization_error_on_dump_error(self):
self.assertRaises(SerializationError, TextSerializer().dumps, {})
class TestDeserializer(TestCase):
def setUp(self):
super(TestDeserializer, self).setUp()
self.de = Deserializer(DEFAULT_SERIALIZERS)
def test_deserializes_json_by_default(self):
self.assertEquals({"some": "data"}, self.de.loads('{"some":"data"}'))
def test_deserializes_text_with_correct_ct(self):
2019-05-10 09:16:33 -06:00
self.assertEquals(
'{"some":"data"}', self.de.loads('{"some":"data"}', "text/plain")
)
self.assertEquals(
'{"some":"data"}',
self.de.loads('{"some":"data"}', "text/plain; charset=whatever"),
)
def test_raises_serialization_error_on_unknown_mimetype(self):
2019-05-10 09:16:33 -06:00
self.assertRaises(SerializationError, self.de.loads, "{}", "text/html")
2019-05-10 09:16:33 -06:00
def test_raises_improperly_configured_when_default_mimetype_cannot_be_deserialized(
self
):
self.assertRaises(ImproperlyConfigured, Deserializer, {})