summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorWill Hardy <Will.Hardy@thermondo.de>2016-05-26 14:48:36 +0200
committerTim Graham <timograham@gmail.com>2016-07-14 13:34:15 -0400
commit8ef78b81654ebcf19a1fc241e2b1ede35100096b (patch)
tree67baaa077b5ed4530330a2202b5d3906708690b3 /tests
parenta7b5dfd1703a8fbed70b7aca5e6dda092af51154 (diff)
Fixed #26656 -- Added duration (timedelta) support to DjangoJSONEncoder.
Diffstat (limited to 'tests')
-rw-r--r--tests/serializers/test_json.py13
-rw-r--r--tests/utils_tests/test_duration.py40
2 files changed, 52 insertions, 1 deletions
diff --git a/tests/serializers/test_json.py b/tests/serializers/test_json.py
index d0c9656643..b191ce6644 100644
--- a/tests/serializers/test_json.py
+++ b/tests/serializers/test_json.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
+import datetime
import decimal
import json
import re
@@ -302,3 +303,15 @@ class DjangoJSONEncoderTests(SimpleTestCase):
json.dumps({'lang': ugettext_lazy("French")}, cls=DjangoJSONEncoder),
'{"lang": "Fran\\u00e7ais"}'
)
+
+ def test_timedelta(self):
+ duration = datetime.timedelta(days=1, hours=2, seconds=3)
+ self.assertEqual(
+ json.dumps({'duration': duration}, cls=DjangoJSONEncoder),
+ '{"duration": "P1DT02H00M03S"}'
+ )
+ duration = datetime.timedelta(0)
+ self.assertEqual(
+ json.dumps({'duration': duration}, cls=DjangoJSONEncoder),
+ '{"duration": "P0DT00H00M00S"}'
+ )
diff --git a/tests/utils_tests/test_duration.py b/tests/utils_tests/test_duration.py
index 559d2ef16f..d0564f396f 100644
--- a/tests/utils_tests/test_duration.py
+++ b/tests/utils_tests/test_duration.py
@@ -2,7 +2,7 @@ import datetime
import unittest
from django.utils.dateparse import parse_duration
-from django.utils.duration import duration_string
+from django.utils.duration import duration_iso_string, duration_string
class TestDurationString(unittest.TestCase):
@@ -41,3 +41,41 @@ class TestParseDurationRoundtrip(unittest.TestCase):
def test_negative(self):
duration = datetime.timedelta(days=-1, hours=1, minutes=3, seconds=5)
self.assertEqual(parse_duration(duration_string(duration)), duration)
+
+
+class TestISODurationString(unittest.TestCase):
+
+ def test_simple(self):
+ duration = datetime.timedelta(hours=1, minutes=3, seconds=5)
+ self.assertEqual(duration_iso_string(duration), 'P0DT01H03M05S')
+
+ def test_days(self):
+ duration = datetime.timedelta(days=1, hours=1, minutes=3, seconds=5)
+ self.assertEqual(duration_iso_string(duration), 'P1DT01H03M05S')
+
+ def test_microseconds(self):
+ duration = datetime.timedelta(hours=1, minutes=3, seconds=5, microseconds=12345)
+ self.assertEqual(duration_iso_string(duration), 'P0DT01H03M05.012345S')
+
+ def test_negative(self):
+ duration = -1 * datetime.timedelta(days=1, hours=1, minutes=3, seconds=5)
+ self.assertEqual(duration_iso_string(duration), '-P1DT01H03M05S')
+
+
+class TestParseISODurationRoundtrip(unittest.TestCase):
+
+ def test_simple(self):
+ duration = datetime.timedelta(hours=1, minutes=3, seconds=5)
+ self.assertEqual(parse_duration(duration_iso_string(duration)), duration)
+
+ def test_days(self):
+ duration = datetime.timedelta(days=1, hours=1, minutes=3, seconds=5)
+ self.assertEqual(parse_duration(duration_iso_string(duration)), duration)
+
+ def test_microseconds(self):
+ duration = datetime.timedelta(hours=1, minutes=3, seconds=5, microseconds=12345)
+ self.assertEqual(parse_duration(duration_iso_string(duration)), duration)
+
+ def test_negative(self):
+ duration = datetime.timedelta(days=-1, hours=1, minutes=3, seconds=5)
+ self.assertEqual(parse_duration(duration_iso_string(duration)).total_seconds(), duration.total_seconds())