diff --git a/atst/forms/financial.py b/atst/forms/financial.py index e989d822..93d08258 100644 --- a/atst/forms/financial.py +++ b/atst/forms/financial.py @@ -1,7 +1,7 @@ import re from wtforms.fields.html5 import EmailField from wtforms.fields import StringField -from wtforms.validators import Required, Email, Regexp, ValidationError +from wtforms.validators import Required, Email, Regexp from atst.domain.exceptions import NotFoundError from atst.domain.pe_numbers import PENumbers @@ -58,6 +58,16 @@ def validate_pe_id(field, existing_request): return True +def validate_task_order_number(field): + try: + TaskOrders.get(field.data) + except NotFoundError: + field.errors += ("Task Order number not found",) + return False + + return True + + class BaseFinancialForm(ValidatedForm): def reset(self): """ @@ -119,11 +129,10 @@ class BaseFinancialForm(ValidatedForm): class FinancialForm(BaseFinancialForm): - def validate_task_order_number(form, field): - try: - TaskOrders.get(field.data) - except NotFoundError: - raise ValidationError("Task Order number not found") + def perform_extra_validation(self, existing_request): + previous_valid = super().perform_extra_validation(existing_request) + task_order_valid = validate_task_order_number(self.task_order_number) + return previous_valid and task_order_valid @property def is_missing_task_order_number(self): diff --git a/tests/forms/test_financial.py b/tests/forms/test_financial.py index 871c7c19..3f0d5e91 100644 --- a/tests/forms/test_financial.py +++ b/tests/forms/test_financial.py @@ -71,13 +71,14 @@ def test_ba_code_validation(input_, expected): def test_task_order_number_validation(monkeypatch): monkeypatch.setattr("atst.domain.task_orders.TaskOrders._client", lambda: MockEDAClient()) + monkeypatch.setattr("atst.forms.financial.validate_pe_id", lambda *args: True) form_invalid = FinancialForm(data={"task_order_number": "1234"}) - form_invalid.validate() + form_invalid.perform_extra_validation({}) assert "task_order_number" in form_invalid.errors form_valid = FinancialForm(data={"task_order_number": MockEDAClient.MOCK_CONTRACT_NUMBER}, eda_client=MockEDAClient()) - form_valid.validate() + form_valid.perform_extra_validation({}) assert "task_order_number" not in form_valid.errors