test_durationfield.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from __future__ import unicode_literals
  2. import datetime
  3. from django.forms import DurationField
  4. from django.test import SimpleTestCase
  5. from django.utils.duration import duration_string
  6. from . import FormFieldAssertionsMixin
  7. class DurationFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
  8. def test_durationfield_clean(self):
  9. f = DurationField()
  10. self.assertEqual(datetime.timedelta(seconds=30), f.clean('30'))
  11. self.assertEqual(datetime.timedelta(minutes=15, seconds=30), f.clean('15:30'))
  12. self.assertEqual(datetime.timedelta(hours=1, minutes=15, seconds=30), f.clean('1:15:30'))
  13. self.assertEqual(
  14. datetime.timedelta(days=1, hours=1, minutes=15, seconds=30, milliseconds=300),
  15. f.clean('1 1:15:30.3')
  16. )
  17. def test_durationfield_render(self):
  18. self.assertWidgetRendersTo(
  19. DurationField(initial=datetime.timedelta(hours=1)),
  20. '<input id="id_f" type="text" name="f" value="01:00:00" required>',
  21. )
  22. def test_durationfield_integer_value(self):
  23. f = DurationField()
  24. self.assertEqual(datetime.timedelta(0, 10800), f.clean(10800))
  25. def test_durationfield_prepare_value(self):
  26. field = DurationField()
  27. td = datetime.timedelta(minutes=15, seconds=30)
  28. self.assertEqual(field.prepare_value(td), duration_string(td))
  29. self.assertEqual(field.prepare_value('arbitrary'), 'arbitrary')
  30. self.assertIsNone(field.prepare_value(None))