diff --git a/atst/forms/new_request.py b/atst/forms/new_request.py index a4a30c3c..368fa63a 100644 --- a/atst/forms/new_request.py +++ b/atst/forms/new_request.py @@ -1,7 +1,7 @@ import pendulum from wtforms.fields.html5 import DateField, EmailField, IntegerField, TelField from wtforms.fields import BooleanField, RadioField, StringField, TextAreaField -from wtforms.validators import Email, Length, Optional, Required +from wtforms.validators import Email, Length, Optional, Required, DataRequired from .fields import SelectField from .forms import ValidatedForm @@ -136,7 +136,14 @@ class DetailsOfUseForm(ValidatedForm): start_date = DateField( description="When do you expect to start using the JEDI Cloud (not for billing purposes)?", - validators=[Required()], + validators=[ + DataRequired(), + DateRange( + lower_bound=pendulum.duration(days=1), + upper_bound=None, + message="Must be a date in the future.", + ), + ], format="%m/%d/%Y", ) diff --git a/atst/forms/validators.py b/atst/forms/validators.py index 47673101..9b094d1c 100644 --- a/atst/forms/validators.py +++ b/atst/forms/validators.py @@ -1,12 +1,17 @@ import re from wtforms.validators import ValidationError import pendulum +from datetime import datetime def DateRange(lower_bound=None, upper_bound=None, message=None): def _date_range(form, field): now = pendulum.now().date() - date = field.data + + if isinstance(field.data, str): + date = datetime.strptime(field.data, field.format) + else: + date = field.data if lower_bound is not None: if (now - lower_bound) > date: diff --git a/tests/forms/test_new_request.py b/tests/forms/test_new_request.py index a9a8b297..e97cc236 100644 --- a/tests/forms/test_new_request.py +++ b/tests/forms/test_new_request.py @@ -13,7 +13,7 @@ class TestDetailsOfUseForm: "dollar_value": "42", "number_user_sessions": "6", "average_daily_traffic": "0", - "start_date": "12/12/2012", + "start_date": "12/12/2050", } migration_data = { "jedi_migration": "yes", @@ -87,3 +87,11 @@ class TestDetailsOfUseForm: request_form = DetailsOfUseForm(data=data) assert request_form.validate() + + def test_start_date_must_be_in_the_future(self): + data = {**self.form_data, **self.migration_data} + data["start_date"] = "01/01/2018" + + request_form = DetailsOfUseForm(data=data) + assert not request_form.validate() + assert "Must be a date in the future." in request_form.errors["start_date"]