From 928c12eb1a75dbcab22b64f8cf0afb17389c20d2 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Mon, 15 Feb 2016 19:28:49 +0100 Subject: Fixed #26215 -- Fixed RangeField/ArrayField serialization with None values Also added tests for HStoreField and JSONField. Thanks Aleksey Bukin for the report and Tim Graham for the initial patch and the review. --- tests/postgres_tests/test_array.py | 6 +++--- tests/postgres_tests/test_hstore.py | 9 ++++++++- tests/postgres_tests/test_json.py | 6 +++--- tests/postgres_tests/test_ranges.py | 11 +++++++++++ 4 files changed, 25 insertions(+), 7 deletions(-) (limited to 'tests/postgres_tests') diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py index 24a47db1d7..5df25c1c0f 100644 --- a/tests/postgres_tests/test_array.py +++ b/tests/postgres_tests/test_array.py @@ -448,17 +448,17 @@ class TestMigrations(TransactionTestCase): class TestSerialization(PostgreSQLTestCase): test_data = ( - '[{"fields": {"field": "[\\"1\\", \\"2\\"]"}, "model": "postgres_tests.integerarraymodel", "pk": null}]' + '[{"fields": {"field": "[\\"1\\", \\"2\\", null]"}, "model": "postgres_tests.integerarraymodel", "pk": null}]' ) def test_dumping(self): - instance = IntegerArrayModel(field=[1, 2]) + instance = IntegerArrayModel(field=[1, 2, None]) data = serializers.serialize('json', [instance]) self.assertEqual(json.loads(data), json.loads(self.test_data)) def test_loading(self): instance = list(serializers.deserialize('json', self.test_data))[0].object - self.assertEqual(instance.field, [1, 2]) + self.assertEqual(instance.field, [1, 2, None]) class TestValidation(PostgreSQLTestCase): diff --git a/tests/postgres_tests/test_hstore.py b/tests/postgres_tests/test_hstore.py index 13c08386e2..8ebd757098 100644 --- a/tests/postgres_tests/test_hstore.py +++ b/tests/postgres_tests/test_hstore.py @@ -165,7 +165,8 @@ class TestQuerying(PostgreSQLTestCase): class TestSerialization(PostgreSQLTestCase): - test_data = '[{"fields": {"field": "{\\"a\\": \\"b\\"}"}, "model": "postgres_tests.hstoremodel", "pk": null}]' + test_data = ('[{"fields": {"field": "{\\"a\\": \\"b\\"}"}, ' + '"model": "postgres_tests.hstoremodel", "pk": null}]') def test_dumping(self): instance = HStoreModel(field={'a': 'b'}) @@ -176,6 +177,12 @@ class TestSerialization(PostgreSQLTestCase): instance = list(serializers.deserialize('json', self.test_data))[0].object self.assertEqual(instance.field, {'a': 'b'}) + 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) + class TestValidation(PostgreSQLTestCase): diff --git a/tests/postgres_tests/test_json.py b/tests/postgres_tests/test_json.py index b4f0dd4ecf..59e5fe3fe7 100644 --- a/tests/postgres_tests/test_json.py +++ b/tests/postgres_tests/test_json.py @@ -213,16 +213,16 @@ class TestQuerying(TestCase): @skipUnlessPG94 class TestSerialization(TestCase): - test_data = '[{"fields": {"field": {"a": "b"}}, "model": "postgres_tests.jsonmodel", "pk": null}]' + test_data = '[{"fields": {"field": {"a": "b", "c": null}}, "model": "postgres_tests.jsonmodel", "pk": null}]' def test_dumping(self): - instance = JSONModel(field={'a': 'b'}) + instance = JSONModel(field={'a': 'b', 'c': None}) data = serializers.serialize('json', [instance]) self.assertJSONEqual(data, self.test_data) def test_loading(self): instance = list(serializers.deserialize('json', self.test_data))[0].object - self.assertEqual(instance.field, {'a': 'b'}) + self.assertEqual(instance.field, {'a': 'b', 'c': None}) class TestValidation(PostgreSQLTestCase): diff --git a/tests/postgres_tests/test_ranges.py b/tests/postgres_tests/test_ranges.py index dd676f96be..692fb54a89 100644 --- a/tests/postgres_tests/test_ranges.py +++ b/tests/postgres_tests/test_ranges.py @@ -309,6 +309,17 @@ class TestSerialization(PostgreSQLTestCase): self.assertEqual(instance.dates, DateRange(self.lower_date, self.upper_date)) self.assertEqual(instance.timestamps, DateTimeTZRange(self.lower_dt, self.upper_dt)) + def test_serialize_range_with_null(self): + instance = RangesModel(ints=NumericRange(None, 10)) + data = serializers.serialize('json', [instance]) + new_instance = list(serializers.deserialize('json', data))[0].object + self.assertEqual(new_instance.ints, NumericRange(None, 10)) + + instance = RangesModel(ints=NumericRange(10, None)) + data = serializers.serialize('json', [instance]) + new_instance = list(serializers.deserialize('json', data))[0].object + self.assertEqual(new_instance.ints, NumericRange(10, None)) + class TestValidators(PostgreSQLTestCase): -- cgit v1.3