Skip to content
This repository has been archived by the owner on Sep 11, 2019. It is now read-only.

Commit

Permalink
Merge pull request #1640 from 18F/django-1-11
Browse files Browse the repository at this point in the history
Upgrade to Django 1.11, use uswds_forms.
  • Loading branch information
toolness committed Mar 21, 2018
2 parents f3a41b2 + af0da00 commit 316d6d2
Show file tree
Hide file tree
Showing 15 changed files with 66 additions and 296 deletions.
11 changes: 5 additions & 6 deletions data_capture/forms/price_list.py
@@ -1,11 +1,10 @@
from django import forms
from django.core.exceptions import ValidationError
from uswds_forms import UswdsRadioSelect, UswdsDateField

from ..models import SubmittedPriceList
from ..schedules import registry
from frontend.upload import UploadWidget
from frontend.widgets import UswdsRadioSelect
from frontend.date import SplitDateField
from contracts.models import MIN_ESCALATION_RATE, MAX_ESCALATION_RATE


Expand Down Expand Up @@ -99,10 +98,10 @@ class Step2Form(forms.ModelForm):
choices=SubmittedPriceList.CONTRACTOR_SITE_CHOICES,
widget=UswdsRadioSelect,
)
contract_start = SplitDateField(
contract_start = UswdsDateField(
label='Contract or current option period start'
)
contract_end = SplitDateField(
contract_end = UswdsDateField(
label='Contract or current option period end'
)
escalation_rate = EscalationRateField()
Expand Down Expand Up @@ -194,10 +193,10 @@ class PriceListDetailsForm(forms.ModelForm):
choices=SubmittedPriceList.CONTRACTOR_SITE_CHOICES,
widget=UswdsRadioSelect,
)
contract_start = SplitDateField(
contract_start = UswdsDateField(
label='Contract or current option period start'
)
contract_end = SplitDateField(
contract_end = UswdsDateField(
label='Contract or current option period end'
)
escalation_rate = EscalationRateField()
Expand Down
5 changes: 2 additions & 3 deletions data_capture/tests/browsers/base.py
@@ -1,7 +1,6 @@
import abc


from frontend.date import SplitDateWidget
from uswds_forms import UswdsDateWidget


class AbstractBrowserForm(abc.ABC):
Expand All @@ -24,7 +23,7 @@ def set_date(self, name, month, day, year):
Given a split date widget's name, set its individual fields.
'''

names = SplitDateWidget.get_field_names(name)
names = UswdsDateWidget.get_field_names(name)

self.set_text(names.year, str(year))
self.set_text(names.month, str(month))
Expand Down
102 changes: 0 additions & 102 deletions frontend/date.py

This file was deleted.

17 changes: 0 additions & 17 deletions frontend/templates/frontend/date.html

This file was deleted.

22 changes: 22 additions & 0 deletions frontend/templates/uswds_forms/date.html
@@ -0,0 +1,22 @@
<span class="form-hint" id="{{ widget.hint_id }}">For example: 04 28 2016</span>

<uswds-date class="date-mm-dd-yy">
<div class="form-group form-group-month">
{% with widget=widget.subwidgets.month %}
<label for="{{ widget.attrs.id }}">Month</label>
{% include widget.template_name %}
{% endwith %}
</div>
<div class="form-group form-group-day">
{% with widget=widget.subwidgets.day %}
<label for="{{ widget.attrs.id }}">Day</label>
{% include widget.template_name %}
{% endwith %}
</div>
<div class="form-group form-group-year">
{% with widget=widget.subwidgets.year %}
<label for="{{ widget.attrs.id }}">Year</label>
{% include widget.template_name %}
{% endwith %}
</div>
</uswds-date>
4 changes: 2 additions & 2 deletions frontend/templatetags/frontend.py
@@ -1,5 +1,5 @@
from django import template, forms
from .. import date
from uswds_forms import UswdsDateWidget


register = template.Library()
Expand All @@ -9,7 +9,7 @@
# like to use a <legend> element with these, instead of a <label>, so
# that screen-readers contextualize them properly.
LEGEND_WIDGETS = (
date.SplitDateWidget,
UswdsDateWidget,
forms.RadioSelect
)

Expand Down
65 changes: 21 additions & 44 deletions frontend/tests/test_date.py
@@ -1,13 +1,23 @@
from datetime import date
from django.test import TestCase
from django.core.exceptions import ValidationError

from ..date import SplitDateWidget, SplitDateField
from uswds_forms import UswdsDateWidget


class SplitDateWidgetTests(TestCase):
class UswdsDateWidgetTests(TestCase):
'''
We have a custom template override for UswdsDateWidget, so this
test suite just makes sure it works properly.
'''

def test_render_uses_uswds_date_custom_element(self):
widget = UswdsDateWidget()
content = widget.render('boop', None, {'id': 'blarg'})
self.assertIn('<uswds-date', content)
self.assertIn('</uswds-date>', content)

def test_render_assigns_ids_and_labels(self):
widget = SplitDateWidget()
widget = UswdsDateWidget()
content = widget.render('boop', None, {'id': 'blarg'})
self.assertRegexpMatches(content, 'id="blarg_0"')
self.assertRegexpMatches(content, 'id="blarg_1"')
Expand All @@ -17,61 +27,28 @@ def test_render_assigns_ids_and_labels(self):
self.assertRegexpMatches(content, 'for="blarg_2"')

def test_render_assigns_names(self):
widget = SplitDateWidget()
content = widget.render('boop', None)
widget = UswdsDateWidget()
content = widget.render('boop', None, {'id': 'foo'})
self.assertRegexpMatches(content, 'name="boop_0"')
self.assertRegexpMatches(content, 'name="boop_1"')
self.assertRegexpMatches(content, 'name="boop_2"')

def test_render_assigns_hint_id_and_aria_describedby(self):
widget = SplitDateWidget()
widget = UswdsDateWidget()
content = widget.render('boop', None, {'id': 'foo'})
self.assertRegexpMatches(content, 'id="foo_hint"')
self.assertRegexpMatches(content, 'aria-describedby="foo_hint"')

def test_render_takes_value_as_list(self):
widget = SplitDateWidget()
content = widget.render('boop', [2006, 7, 29])
widget = UswdsDateWidget()
content = widget.render('boop', [2006, 7, 29], {'id': 'foo'})
self.assertRegexpMatches(content, 'value="2006"')
self.assertRegexpMatches(content, 'value="7"')
self.assertRegexpMatches(content, 'value="29"')

def test_render_takes_value_as_date(self):
widget = SplitDateWidget()
content = widget.render('boop', date(2005, 6, 28))
widget = UswdsDateWidget()
content = widget.render('boop', date(2005, 6, 28), {'id': 'foo'})
self.assertRegexpMatches(content, 'value="2005"')
self.assertRegexpMatches(content, 'value="6"')
self.assertRegexpMatches(content, 'value="28"')

def test_render_does_not_raise_exception_on_empty_lists(self):
widget = SplitDateWidget()
content = widget.render('boop', [])
self.assertRegexpMatches(content, 'value=""')

def test_decompress_works_with_dates(self):
widget = SplitDateWidget()
self.assertEqual(widget.decompress(date(2005, 6, 28)), [2005, 6, 28])

def test_decompress_works_with_none(self):
widget = SplitDateWidget()
self.assertEqual(widget.decompress(None), [None, None, None])


class SplitDateFieldTests(TestCase):
def test_compress_returns_date_for_valid_dates(self):
field = SplitDateField()
self.assertEqual(field.compress([2005, 6, 28]), date(2005, 6, 28))

def test_compress_raises_validation_errors_for_invalid_dates(self):
field = SplitDateField()

with self.assertRaisesRegexp(
ValidationError,
'Invalid date: day is out of range for month.'
):
field.compress([2001, 2, 31])

def test_compress_returns_none_when_data_list_is_falsy(self):
field = SplitDateField()
self.assertEqual(field.compress(None), None)
self.assertEqual(field.compress([]), None)
65 changes: 0 additions & 65 deletions frontend/tests/test_widgets.py

This file was deleted.

0 comments on commit 316d6d2

Please sign in to comment.