summaryrefslogtreecommitdiff
path: root/tests/postgres_tests
diff options
context:
space:
mode:
authorOleg Sverdlov <oleg@ols.co.il>2024-12-05 14:12:45 +0100
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-12-05 15:31:50 +0100
commitded485464214a3f69b64402b7d82221279f80008 (patch)
tree23af65e8dc8814d0cd2b7c8f0d237e2335b41bd5 /tests/postgres_tests
parentedd74c3417fa3a0b29295012ff31dbe44843303c (diff)
Fixed #35944 -- Handled serialization of Unicode values in ArrayField and HStoreField.
Diffstat (limited to 'tests/postgres_tests')
-rw-r--r--tests/postgres_tests/test_array.py26
-rw-r--r--tests/postgres_tests/test_hstore.py68
2 files changed, 67 insertions, 27 deletions
diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py
index ea7807687e..ba7151d4a2 100644
--- a/tests/postgres_tests/test_array.py
+++ b/tests/postgres_tests/test_array.py
@@ -1008,6 +1008,32 @@ class TestSerialization(PostgreSQLSimpleTestCase):
self.assertEqual(instance.field, [1, 2, None])
+class TestStringSerialization(PostgreSQLSimpleTestCase):
+ field_values = [["Django", "Python", None], ["Джанго", "פייתון", None, "król"]]
+
+ @staticmethod
+ def create_json_data(array_field_value):
+ fields = {"field": json.dumps(array_field_value, ensure_ascii=False)}
+ return json.dumps(
+ [{"model": "postgres_tests.chararraymodel", "pk": None, "fields": fields}]
+ )
+
+ def test_encode(self):
+ for field_value in self.field_values:
+ with self.subTest(field_value=field_value):
+ instance = CharArrayModel(field=field_value)
+ data = serializers.serialize("json", [instance])
+ json_data = self.create_json_data(field_value)
+ self.assertEqual(json.loads(data), json.loads(json_data))
+
+ def test_decode(self):
+ for field_value in self.field_values:
+ with self.subTest(field_value=field_value):
+ json_data = self.create_json_data(field_value)
+ instance = list(serializers.deserialize("json", json_data))[0].object
+ self.assertEqual(instance.field, field_value)
+
+
class TestValidation(PostgreSQLSimpleTestCase):
def test_unbounded(self):
field = ArrayField(models.IntegerField())
diff --git a/tests/postgres_tests/test_hstore.py b/tests/postgres_tests/test_hstore.py
index cac3eb742a..2d19364736 100644
--- a/tests/postgres_tests/test_hstore.py
+++ b/tests/postgres_tests/test_hstore.py
@@ -297,39 +297,53 @@ class TestChecks(PostgreSQLSimpleTestCase):
class TestSerialization(PostgreSQLSimpleTestCase):
- test_data = json.dumps(
- [
- {
- "model": "postgres_tests.hstoremodel",
- "pk": None,
- "fields": {
- "field": json.dumps({"a": "b"}),
- "array_field": json.dumps(
- [
- json.dumps({"a": "b"}),
- json.dumps({"b": "a"}),
- ]
- ),
- },
- }
- ]
- )
+ field_values = [
+ ({"a": "b"}, [{"a": "b"}, {"b": "a"}]),
+ (
+ {"все": "Трурль и Клапауций"},
+ [{"Трурль": "Клапауций"}, {"Клапауций": "Трурль"}],
+ ),
+ ]
+
+ @staticmethod
+ def create_json_data(field_value, array_field_value):
+ fields = {
+ "field": json.dumps(field_value, ensure_ascii=False),
+ "array_field": json.dumps(
+ [json.dumps(item, ensure_ascii=False) for item in array_field_value],
+ ensure_ascii=False,
+ ),
+ }
+ return json.dumps(
+ [{"model": "postgres_tests.hstoremodel", "pk": None, "fields": fields}]
+ )
def test_dumping(self):
- instance = HStoreModel(field={"a": "b"}, array_field=[{"a": "b"}, {"b": "a"}])
- data = serializers.serialize("json", [instance])
- self.assertEqual(json.loads(data), json.loads(self.test_data))
+ for field_value, array_field_value in self.field_values:
+ with self.subTest(field_value=field_value, array_value=array_field_value):
+ instance = HStoreModel(field=field_value, array_field=array_field_value)
+ data = serializers.serialize("json", [instance])
+ json_data = self.create_json_data(field_value, array_field_value)
+ self.assertEqual(json.loads(data), json.loads(json_data))
def test_loading(self):
- instance = list(serializers.deserialize("json", self.test_data))[0].object
- self.assertEqual(instance.field, {"a": "b"})
- self.assertEqual(instance.array_field, [{"a": "b"}, {"b": "a"}])
+ for field_value, array_field_value in self.field_values:
+ with self.subTest(field_value=field_value, array_value=array_field_value):
+ json_data = self.create_json_data(field_value, array_field_value)
+ instance = list(serializers.deserialize("json", json_data))[0].object
+ self.assertEqual(instance.field, field_value)
+ self.assertEqual(instance.array_field, array_field_value)
def test_roundtrip_with_null(self):
- instance = HStoreModel(field={"a": "b", "c": None})
- data = serializers.serialize("json", [instance])
- new_instance = list(serializers.deserialize("json", data))[0].object
- self.assertEqual(instance.field, new_instance.field)
+ for field_value in [
+ {"a": "b", "c": None},
+ {"Енеїда": "Ти знаєш, він який суціга", "Зефір": None},
+ ]:
+ with self.subTest(field_value=field_value):
+ instance = HStoreModel(field=field_value)
+ data = serializers.serialize("json", [instance])
+ new_instance = list(serializers.deserialize("json", data))[0].object
+ self.assertEqual(instance.field, new_instance.field)
class TestValidation(PostgreSQLSimpleTestCase):