test_splithiddendatetimewidget.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from datetime import datetime
  2. from django.forms import Form, SplitDateTimeField, SplitHiddenDateTimeWidget
  3. from django.utils import translation
  4. from .base import WidgetTest
  5. class SplitHiddenDateTimeWidgetTest(WidgetTest):
  6. widget = SplitHiddenDateTimeWidget()
  7. def test_render_empty(self):
  8. self.check_html(
  9. self.widget,
  10. "date",
  11. "",
  12. html=(
  13. '<input type="hidden" name="date_0"><input type="hidden" name="date_1">'
  14. ),
  15. )
  16. def test_render_value(self):
  17. d = datetime(2007, 9, 17, 12, 51, 34, 482548)
  18. self.check_html(
  19. self.widget,
  20. "date",
  21. d,
  22. html=(
  23. '<input type="hidden" name="date_0" value="2007-09-17">'
  24. '<input type="hidden" name="date_1" value="12:51:34">'
  25. ),
  26. )
  27. self.check_html(
  28. self.widget,
  29. "date",
  30. datetime(2007, 9, 17, 12, 51, 34),
  31. html=(
  32. '<input type="hidden" name="date_0" value="2007-09-17">'
  33. '<input type="hidden" name="date_1" value="12:51:34">'
  34. ),
  35. )
  36. self.check_html(
  37. self.widget,
  38. "date",
  39. datetime(2007, 9, 17, 12, 51),
  40. html=(
  41. '<input type="hidden" name="date_0" value="2007-09-17">'
  42. '<input type="hidden" name="date_1" value="12:51:00">'
  43. ),
  44. )
  45. @translation.override("de-at")
  46. def test_l10n(self):
  47. d = datetime(2007, 9, 17, 12, 51)
  48. self.check_html(
  49. self.widget,
  50. "date",
  51. d,
  52. html=(
  53. """
  54. <input type="hidden" name="date_0" value="17.09.2007">
  55. <input type="hidden" name="date_1" value="12:51:00">
  56. """
  57. ),
  58. )
  59. def test_constructor_different_attrs(self):
  60. html = (
  61. '<input type="hidden" class="foo" value="2006-01-10" name="date_0">'
  62. '<input type="hidden" class="bar" value="07:30:00" name="date_1">'
  63. )
  64. widget = SplitHiddenDateTimeWidget(
  65. date_attrs={"class": "foo"}, time_attrs={"class": "bar"}
  66. )
  67. self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
  68. widget = SplitHiddenDateTimeWidget(
  69. date_attrs={"class": "foo"}, attrs={"class": "bar"}
  70. )
  71. self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
  72. widget = SplitHiddenDateTimeWidget(
  73. time_attrs={"class": "bar"}, attrs={"class": "foo"}
  74. )
  75. self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
  76. def test_fieldset(self):
  77. class TestForm(Form):
  78. template_name = "forms_tests/use_fieldset.html"
  79. field = SplitDateTimeField(widget=self.widget)
  80. form = TestForm()
  81. self.assertIs(self.widget.use_fieldset, True)
  82. self.assertHTMLEqual(
  83. '<input type="hidden" name="field_0" id="id_field_0">'
  84. '<input type="hidden" name="field_1" id="id_field_1">',
  85. form.render(),
  86. )
  87. def test_fieldset_with_unhidden_field(self):
  88. class TestForm(Form):
  89. template_name = "forms_tests/use_fieldset.html"
  90. hidden_field = SplitDateTimeField(widget=self.widget)
  91. unhidden_field = SplitDateTimeField()
  92. form = TestForm()
  93. self.assertIs(self.widget.use_fieldset, True)
  94. self.assertHTMLEqual(
  95. "<div><fieldset><legend>Unhidden field:</legend>"
  96. '<input type="text" name="unhidden_field_0" required '
  97. 'id="id_unhidden_field_0"><input type="text" '
  98. 'name="unhidden_field_1" required id="id_unhidden_field_1">'
  99. '</fieldset><input type="hidden" name="hidden_field_0" '
  100. 'id="id_hidden_field_0"><input type="hidden" '
  101. 'name="hidden_field_1" id="id_hidden_field_1"></div>',
  102. form.render(),
  103. )