1. from datetime import date, datetime, time
    
  2. 
    
  3. from django.forms import Form, SplitDateTimeField, SplitDateTimeWidget
    
  4. 
    
  5. from .base import WidgetTest
    
  6. 
    
  7. 
    
  8. class SplitDateTimeWidgetTest(WidgetTest):
    
  9.     widget = SplitDateTimeWidget()
    
  10. 
    
  11.     def test_render_empty(self):
    
  12.         self.check_html(
    
  13.             self.widget,
    
  14.             "date",
    
  15.             "",
    
  16.             html=('<input type="text" name="date_0"><input type="text" name="date_1">'),
    
  17.         )
    
  18. 
    
  19.     def test_render_none(self):
    
  20.         self.check_html(
    
  21.             self.widget,
    
  22.             "date",
    
  23.             None,
    
  24.             html=('<input type="text" name="date_0"><input type="text" name="date_1">'),
    
  25.         )
    
  26. 
    
  27.     def test_render_datetime(self):
    
  28.         self.check_html(
    
  29.             self.widget,
    
  30.             "date",
    
  31.             datetime(2006, 1, 10, 7, 30),
    
  32.             html=(
    
  33.                 '<input type="text" name="date_0" value="2006-01-10">'
    
  34.                 '<input type="text" name="date_1" value="07:30:00">'
    
  35.             ),
    
  36.         )
    
  37. 
    
  38.     def test_render_date_and_time(self):
    
  39.         self.check_html(
    
  40.             self.widget,
    
  41.             "date",
    
  42.             [date(2006, 1, 10), time(7, 30)],
    
  43.             html=(
    
  44.                 '<input type="text" name="date_0" value="2006-01-10">'
    
  45.                 '<input type="text" name="date_1" value="07:30:00">'
    
  46.             ),
    
  47.         )
    
  48. 
    
  49.     def test_constructor_attrs(self):
    
  50.         widget = SplitDateTimeWidget(attrs={"class": "pretty"})
    
  51.         self.check_html(
    
  52.             widget,
    
  53.             "date",
    
  54.             datetime(2006, 1, 10, 7, 30),
    
  55.             html=(
    
  56.                 '<input type="text" class="pretty" value="2006-01-10" name="date_0">'
    
  57.                 '<input type="text" class="pretty" value="07:30:00" name="date_1">'
    
  58.             ),
    
  59.         )
    
  60. 
    
  61.     def test_constructor_different_attrs(self):
    
  62.         html = (
    
  63.             '<input type="text" class="foo" value="2006-01-10" name="date_0">'
    
  64.             '<input type="text" class="bar" value="07:30:00" name="date_1">'
    
  65.         )
    
  66.         widget = SplitDateTimeWidget(
    
  67.             date_attrs={"class": "foo"}, time_attrs={"class": "bar"}
    
  68.         )
    
  69.         self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
    
  70.         widget = SplitDateTimeWidget(
    
  71.             date_attrs={"class": "foo"}, attrs={"class": "bar"}
    
  72.         )
    
  73.         self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
    
  74.         widget = SplitDateTimeWidget(
    
  75.             time_attrs={"class": "bar"}, attrs={"class": "foo"}
    
  76.         )
    
  77.         self.check_html(widget, "date", datetime(2006, 1, 10, 7, 30), html=html)
    
  78. 
    
  79.     def test_formatting(self):
    
  80.         """
    
  81.         Use 'date_format' and 'time_format' to change the way a value is
    
  82.         displayed.
    
  83.         """
    
  84.         widget = SplitDateTimeWidget(
    
  85.             date_format="%d/%m/%Y",
    
  86.             time_format="%H:%M",
    
  87.         )
    
  88.         self.check_html(
    
  89.             widget,
    
  90.             "date",
    
  91.             datetime(2006, 1, 10, 7, 30),
    
  92.             html=(
    
  93.                 '<input type="text" name="date_0" value="10/01/2006">'
    
  94.                 '<input type="text" name="date_1" value="07:30">'
    
  95.             ),
    
  96.         )
    
  97.         self.check_html(
    
  98.             widget,
    
  99.             "date",
    
  100.             datetime(2006, 1, 10, 7, 30),
    
  101.             html=(
    
  102.                 '<input type="text" name="date_0" value="10/01/2006">'
    
  103.                 '<input type="text" name="date_1" value="07:30">'
    
  104.             ),
    
  105.         )
    
  106. 
    
  107.     def test_fieldset(self):
    
  108.         class TestForm(Form):
    
  109.             template_name = "forms_tests/use_fieldset.html"
    
  110.             field = SplitDateTimeField(widget=self.widget)
    
  111. 
    
  112.         form = TestForm()
    
  113.         self.assertIs(self.widget.use_fieldset, True)
    
  114.         self.assertHTMLEqual(
    
  115.             '<div><fieldset><legend>Field:</legend><input type="text" '
    
  116.             'name="field_0" required id="id_field_0"><input type="text" '
    
  117.             'name="field_1" required id="id_field_1"></fieldset></div>',
    
  118.             form.render(),
    
  119.         )