diff options
| author | Will Hardy <Will.Hardy@thermondo.de> | 2016-05-26 14:48:36 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-07-14 13:34:15 -0400 |
| commit | 8ef78b81654ebcf19a1fc241e2b1ede35100096b (patch) | |
| tree | 67baaa077b5ed4530330a2202b5d3906708690b3 /tests | |
| parent | a7b5dfd1703a8fbed70b7aca5e6dda092af51154 (diff) | |
Fixed #26656 -- Added duration (timedelta) support to DjangoJSONEncoder.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/serializers/test_json.py | 13 | ||||
| -rw-r--r-- | tests/utils_tests/test_duration.py | 40 |
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()) |
