summaryrefslogtreecommitdiff
path: root/tests/serializers/test_json.py
diff options
context:
space:
mode:
authorBerker Peksag <berker.peksag@gmail.com>2016-06-28 14:48:19 +0300
committerTim Graham <timograham@gmail.com>2016-06-28 11:10:07 -0400
commitc1b6f554e405fe733e8d80f7e3d77c277810e707 (patch)
treeafd5589a9ff11d2d6a9fcd189d6edeb8eab1f7c2 /tests/serializers/test_json.py
parent6bf7964023487f2a352084e74aca27aecb354d6c (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.py20
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}"""):