From f1683e8ff7abdefd31bfeb0bd6e369ed1359015c Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Mon, 4 Feb 2019 13:19:34 -0500 Subject: [PATCH] Validate email addresses in oversight form --- atst/forms/task_order.py | 17 ++++++++++++---- templates/components/user_info.html | 2 +- .../routes/task_orders/test_new_task_order.py | 20 +++++++++++++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/atst/forms/task_order.py b/atst/forms/task_order.py index 9a536db1..7d1c2167 100644 --- a/atst/forms/task_order.py +++ b/atst/forms/task_order.py @@ -10,7 +10,7 @@ from wtforms.fields import ( ) from wtforms.fields.html5 import DateField, TelField from wtforms.widgets import ListWidget, CheckboxInput -from wtforms.validators import Length, Required, Optional +from wtforms.validators import Email, Length, Required, Optional from flask_wtf.file import FileAllowed from atst.forms.validators import IsNumber, PhoneNumber, RequiredIf @@ -132,7 +132,10 @@ class OversightForm(CacheableForm): translate("forms.task_order.oversight_first_name_label") ) ko_last_name = StringField(translate("forms.task_order.oversight_last_name_label")) - ko_email = StringField(translate("forms.task_order.oversight_email_label")) + ko_email = StringField( + translate("forms.task_order.oversight_email_label"), + validators=[Optional(), Email()], + ) ko_phone_number = TelField( translate("forms.task_order.oversight_phone_label"), validators=[Optional(), PhoneNumber()], @@ -151,7 +154,10 @@ class OversightForm(CacheableForm): translate("forms.task_order.oversight_first_name_label") ) cor_last_name = StringField(translate("forms.task_order.oversight_last_name_label")) - cor_email = StringField(translate("forms.task_order.oversight_email_label")) + cor_email = StringField( + translate("forms.task_order.oversight_email_label"), + validators=[Optional(), Email()], + ) cor_phone_number = TelField( translate("forms.task_order.oversight_phone_label"), validators=[ @@ -176,7 +182,10 @@ class OversightForm(CacheableForm): translate("forms.task_order.oversight_first_name_label") ) so_last_name = StringField(translate("forms.task_order.oversight_last_name_label")) - so_email = StringField(translate("forms.task_order.oversight_email_label")) + so_email = StringField( + translate("forms.task_order.oversight_email_label"), + validators=[Optional(), Email()], + ) so_phone_number = TelField( translate("forms.task_order.oversight_phone_label"), validators=[Optional(), PhoneNumber()], diff --git a/templates/components/user_info.html b/templates/components/user_info.html index cd5e8c6e..aa2507ee 100644 --- a/templates/components/user_info.html +++ b/templates/components/user_info.html @@ -13,7 +13,7 @@
- {{ TextInput(email, placeholder='name@mail.mil') }} + {{ TextInput(email, placeholder='name@mail.mil', validation='email') }}
diff --git a/tests/routes/task_orders/test_new_task_order.py b/tests/routes/task_orders/test_new_task_order.py index bbe461e9..6e78a6f1 100644 --- a/tests/routes/task_orders/test_new_task_order.py +++ b/tests/routes/task_orders/test_new_task_order.py @@ -122,6 +122,26 @@ def test_task_order_form_shows_errors(client, user_session): assert "Not a valid decimal" in body +def test_task_order_validates_email_address(client, user_session): + to = task_order() + creator = to.creator + user_session(creator) + + task_order_data = TaskOrderFactory.dictionary() + oversight_data = slice_data_for_section(task_order_data, "oversight") + oversight_data.update({"ko_email": "not an email"}) + + response = client.post( + url_for("task_orders.update", screen=3, task_order_id=to.id), + data=oversight_data, + follow_redirects=False, + ) + + body = response.data.decode() + assert "There were some errors" in body + assert "Invalid email" in body + + @pytest.fixture def task_order(): user = UserFactory.create()