From 3e6c4d7f13485926162fb20a77df26330e2056b8 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Sun, 12 Aug 2018 12:06:12 -0400 Subject: [PATCH] Update flask form to require fields only when appropriate --- atst/forms/request.py | 16 ++++++++++ tests/forms/test_request.py | 63 +++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 tests/forms/test_request.py diff --git a/atst/forms/request.py b/atst/forms/request.py index a7e5214a..0d7fdb9b 100644 --- a/atst/forms/request.py +++ b/atst/forms/request.py @@ -1,11 +1,27 @@ from wtforms.fields.html5 import IntegerField from wtforms.fields import RadioField, TextAreaField, SelectField +from wtforms.validators import Optional from .fields import DateField from .forms import ValidatedForm class RequestForm(ValidatedForm): + def validate(self, *args, **kwargs): + if self.jedi_migration.data == 'no': + self.rationalization_software_systems.validators.append(Optional()) + self.technical_support_team.validators.append(Optional()) + self.organization_providing_assistance.validators.append(Optional()) + self.engineering_assessment.validators.append(Optional()) + self.data_transfers.validators.append(Optional()) + self.expected_completion_date.validators.append(Optional()) + elif self.jedi_migration.data == 'yes': + if self.technical_support_team.data == 'no': + self.organization_providing_assistance.validators.append(Optional()) + self.cloud_native.validators.append(Optional()) + + return super(RequestForm, self).validate(*args, **kwargs) + # Details of Use: General dod_component = SelectField( "DoD Component", diff --git a/tests/forms/test_request.py b/tests/forms/test_request.py new file mode 100644 index 00000000..d06a3c98 --- /dev/null +++ b/tests/forms/test_request.py @@ -0,0 +1,63 @@ +import pytest + +from atst.forms.request import RequestForm + + +class TestRequestForm: + + form_data = { + 'dod_component': 'us_air_force', + 'jedi_usage': 'cloud-ify all the things', + 'num_software_systems': '12', + 'estimated_monthly_spend': '34', + 'dollar_value': '42', + 'number_user_sessions': '6', + 'average_daily_traffic': '0', + 'start_date': '12/12/2012', + } + + def test_require_cloud_native_when_not_migrating(self): + extra_data = { 'jedi_migration': 'no' } + request_form = RequestForm(data={ **self.form_data, **extra_data }) + assert not request_form.validate() + assert request_form.errors == { 'cloud_native': ['Not a valid choice'] } + + def test_require_migration_questions_when_migrating(self): + extra_data = { 'jedi_migration': 'yes' } + request_form = RequestForm(data={ **self.form_data, **extra_data }) + assert not request_form.validate() + assert request_form.errors == { + 'rationalization_software_systems': ['Not a valid choice'], + 'technical_support_team': ['Not a valid choice'], + 'organization_providing_assistance': ['Not a valid choice'], + 'engineering_assessment': ['Not a valid choice'], + 'data_transfers': ['Not a valid choice'], + 'expected_completion_date': ['Not a valid choice'] + } + + def test_require_organization_when_technical_support_team(self): + extra_data = { + 'jedi_migration': 'yes', + 'rationalization_software_systems': 'yes', + 'technical_support_team': 'yes', + 'engineering_assessment': 'yes', + 'data_transfers': 'less_than_100gb', + 'expected_completion_date': 'less_than_1_month' + } + request_form = RequestForm(data={ **self.form_data, **extra_data }) + assert not request_form.validate() + assert request_form.errors == { + 'organization_providing_assistance': ['Not a valid choice'], + } + + def test_valid_form_data(self): + extra_data = { + 'jedi_migration': 'yes', + 'rationalization_software_systems': 'yes', + 'technical_support_team': 'no', + 'engineering_assessment': 'yes', + 'data_transfers': 'less_than_100gb', + 'expected_completion_date': 'less_than_1_month' + } + request_form = RequestForm(data={ **self.form_data, **extra_data }) + assert request_form.validate()