diff options
| author | Berker Peksag <berker.peksag@gmail.com> | 2016-06-28 14:48:19 +0300 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-06-28 11:10:07 -0400 |
| commit | c1b6f554e405fe733e8d80f7e3d77c277810e707 (patch) | |
| tree | afd5589a9ff11d2d6a9fcd189d6edeb8eab1f7c2 /tests/serializers/test_json.py | |
| parent | 6bf7964023487f2a352084e74aca27aecb354d6c (diff) | |
Fixed #15091 -- Allowed passing custom encoder to JSON serializer.
Diffstat (limited to 'tests/serializers/test_json.py')
| -rw-r--r-- | tests/serializers/test_json.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/serializers/test_json.py b/tests/serializers/test_json.py index d8d445d1f9..45b3ab1527 100644 --- a/tests/serializers/test_json.py +++ b/tests/serializers/test_json.py @@ -1,13 +1,16 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals +import decimal import json import re from django.core import serializers from django.core.serializers.base import DeserializationError from django.core.serializers.json import DjangoJSONEncoder +from django.db import models from django.test import SimpleTestCase, TestCase, TransactionTestCase +from django.test.utils import isolate_apps from django.utils.translation import override, ugettext_lazy from .models import Score @@ -80,6 +83,23 @@ class JsonSerializerTestCase(SerializersTestBase, TestCase): if re.search(r'.+,\s*$', line): self.assertEqual(line, line.rstrip()) + @isolate_apps('serializers') + def test_custom_encoder(self): + class ScoreDecimal(models.Model): + score = models.DecimalField() + + class CustomJSONEncoder(json.JSONEncoder): + def default(self, o): + if isinstance(o, decimal.Decimal): + return str(o) + return super(CustomJSONEncoder, self).default(o) + + s = serializers.json.Serializer() + json_data = s.serialize( + [ScoreDecimal(score=decimal.Decimal(1.0))], cls=CustomJSONEncoder + ) + self.assertIn('"fields": {"score": "1"}', json_data) + def test_json_deserializer_exception(self): with self.assertRaises(DeserializationError): for obj in serializers.deserialize("json", """[{"pk":1}"""): |
