302 lines
8.7 KiB
Python
302 lines
8.7 KiB
Python
import pytest
|
|
from unittest.mock import MagicMock
|
|
from flask import url_for
|
|
|
|
from atst.eda_client import MockEDAClient
|
|
from atst.routes.requests.financial_verification import (
|
|
GetFinancialVerificationForm,
|
|
UpdateFinancialVerification,
|
|
SaveFinancialVerificationDraft,
|
|
)
|
|
|
|
from tests.mocks import MOCK_REQUEST, MOCK_USER, MOCK_VALID_PE_ID
|
|
from tests.factories import (
|
|
PENumberFactory,
|
|
RequestFactory,
|
|
UserFactory,
|
|
RequestStatusEventFactory,
|
|
RequestReviewFactory,
|
|
)
|
|
from atst.forms.exceptions import FormValidationError
|
|
from atst.domain.requests.financial_verification import (
|
|
PENumberValidator,
|
|
TaskOrderNumberValidator,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def fv_data():
|
|
return {
|
|
"pe_id": "123",
|
|
"task_order_number": MockEDAClient.MOCK_CONTRACT_NUMBER,
|
|
"fname_co": "Contracting",
|
|
"lname_co": "Officer",
|
|
"email_co": "jane@mail.mil",
|
|
"office_co": "WHS",
|
|
"fname_cor": "Officer",
|
|
"lname_cor": "Representative",
|
|
"email_cor": "jane@mail.mil",
|
|
"office_cor": "WHS",
|
|
"uii_ids": "1234",
|
|
"treasury_code": "00123456",
|
|
"ba_code": "02A",
|
|
}
|
|
|
|
|
|
TrueValidator = MagicMock()
|
|
TrueValidator.validate = MagicMock(return_value=True)
|
|
|
|
FalseValidator = MagicMock()
|
|
FalseValidator.validate = MagicMock(return_value=False)
|
|
|
|
|
|
def test_update_fv(fv_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {**fv_data, "pe_id": MOCK_VALID_PE_ID}
|
|
|
|
updated_request = UpdateFinancialVerification(
|
|
TrueValidator, TrueValidator, user, request, data, is_extended=False
|
|
).execute()
|
|
|
|
assert updated_request.is_pending_ccpo_approval
|
|
|
|
|
|
def test_update_fv_re_enter_pe_number(fv_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {**fv_data, "pe_id": "0101228M"}
|
|
update_fv = UpdateFinancialVerification(
|
|
PENumberValidator(), TrueValidator, user, request, data, is_extended=False
|
|
)
|
|
|
|
with pytest.raises(FormValidationError):
|
|
update_fv.execute()
|
|
updated_request = update_fv.execute()
|
|
|
|
assert updated_request.is_pending_ccpo_approval
|
|
|
|
|
|
def test_update_fv_invalid_task_order_number(fv_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {**fv_data, "task_order_number": "DCA10096D0051"}
|
|
update_fv = UpdateFinancialVerification(
|
|
TrueValidator,
|
|
TaskOrderNumberValidator(),
|
|
user,
|
|
request,
|
|
data,
|
|
is_extended=False,
|
|
)
|
|
|
|
with pytest.raises(FormValidationError):
|
|
update_fv.execute()
|
|
|
|
|
|
def test_update_fv_extended(fv_data, extended_financial_verification_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {**fv_data, **extended_financial_verification_data}
|
|
update_fv = UpdateFinancialVerification(
|
|
TrueValidator, TaskOrderNumberValidator(), user, request, data, is_extended=True
|
|
)
|
|
|
|
assert update_fv.execute()
|
|
|
|
|
|
def test_update_fv_missing_extended_data(fv_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
update_fv = UpdateFinancialVerification(
|
|
TrueValidator,
|
|
TaskOrderNumberValidator(),
|
|
user,
|
|
request,
|
|
fv_data,
|
|
is_extended=True,
|
|
)
|
|
|
|
with pytest.raises(FormValidationError):
|
|
update_fv.execute()
|
|
|
|
|
|
def test_update_fv_submission(fv_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
updated_request = UpdateFinancialVerification(
|
|
TrueValidator, TrueValidator, user, request, fv_data
|
|
).execute()
|
|
assert updated_request
|
|
|
|
|
|
def test_save_empty_draft():
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
save_draft = SaveFinancialVerificationDraft(
|
|
TrueValidator, TrueValidator, user, request, {}, is_extended=False
|
|
)
|
|
|
|
assert save_draft.execute()
|
|
|
|
|
|
def test_save_draft_with_ba_code():
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {"ba_code": "02A"}
|
|
save_draft = SaveFinancialVerificationDraft(
|
|
TrueValidator, TrueValidator, user, request, data, is_extended=False
|
|
)
|
|
|
|
assert save_draft.execute()
|
|
|
|
|
|
def test_save_draft_with_invalid_task_order(fv_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
save_draft = SaveFinancialVerificationDraft(
|
|
TrueValidator, FalseValidator, user, request, fv_data, is_extended=False
|
|
)
|
|
|
|
with pytest.raises(FormValidationError):
|
|
assert save_draft.execute()
|
|
|
|
|
|
def test_save_draft_with_invalid_pe_number(fv_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
save_draft = SaveFinancialVerificationDraft(
|
|
FalseValidator, TrueValidator, user, request, fv_data, is_extended=False
|
|
)
|
|
|
|
with pytest.raises(FormValidationError):
|
|
assert save_draft.execute()
|
|
|
|
|
|
def test_save_draft_re_enter_pe_number(fv_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {**fv_data, "pe_id": "0101228M"}
|
|
save_fv = SaveFinancialVerificationDraft(
|
|
PENumberValidator(), TrueValidator, user, request, data, is_extended=False
|
|
)
|
|
|
|
with pytest.raises(FormValidationError):
|
|
save_fv.execute()
|
|
save_fv.execute()
|
|
|
|
|
|
def test_save_draft_and_then_submit():
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {"ba_code": "02A"}
|
|
updated_request = SaveFinancialVerificationDraft(
|
|
TrueValidator, TrueValidator, user, request, data, is_extended=False
|
|
).execute()
|
|
|
|
with pytest.raises(FormValidationError):
|
|
UpdateFinancialVerification(
|
|
TrueValidator, TrueValidator, user, updated_request, data
|
|
).execute()
|
|
|
|
|
|
def test_updated_request_has_pdf(fv_data, extended_financial_verification_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {
|
|
**fv_data,
|
|
**extended_financial_verification_data,
|
|
"task_order_number": "DCA10096D0051",
|
|
}
|
|
updated_request = UpdateFinancialVerification(
|
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
|
).execute()
|
|
assert updated_request.task_order.pdf
|
|
|
|
|
|
def test_can_save_draft_with_just_pdf(extended_financial_verification_data):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {"task_order": extended_financial_verification_data["task_order"]}
|
|
SaveFinancialVerificationDraft(
|
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
|
).execute()
|
|
|
|
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
|
assert form.task_order
|
|
|
|
|
|
def test_task_order_info_present_in_extended_form(
|
|
fv_data, extended_financial_verification_data
|
|
):
|
|
request = RequestFactory.create()
|
|
user = UserFactory.create()
|
|
data = {
|
|
"clin_0001": extended_financial_verification_data["clin_0001"],
|
|
"task_order_number": fv_data["task_order_number"],
|
|
}
|
|
SaveFinancialVerificationDraft(
|
|
TrueValidator, TrueValidator, user, request, data, is_extended=True
|
|
).execute()
|
|
|
|
form = GetFinancialVerificationForm(user, request, is_extended=True).execute()
|
|
assert form.clin_0001.data
|
|
|
|
|
|
def test_update_fv_route(client, user_session, fv_data):
|
|
user = UserFactory.create()
|
|
request = RequestFactory.create(creator=user)
|
|
user_session(user)
|
|
response = client.post(
|
|
url_for("requests.financial_verification", request_id=request.id),
|
|
data=fv_data,
|
|
follow_redirects=False,
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
def test_save_fv_draft_route(client, user_session, fv_data):
|
|
user = UserFactory.create()
|
|
request = RequestFactory.create(creator=user)
|
|
user_session(user)
|
|
response = client.post(
|
|
url_for("requests.save_financial_verification_draft", request_id=request.id),
|
|
data=fv_data,
|
|
follow_redirects=False,
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
def test_get_fv_form_route(client, user_session, fv_data):
|
|
user = UserFactory.create()
|
|
request = RequestFactory.create(creator=user)
|
|
user_session(user)
|
|
response = client.get(
|
|
url_for("requests.financial_verification", request_id=request.id),
|
|
data=fv_data,
|
|
follow_redirects=False,
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
def test_manual_task_order_triggers_extended_form(client, user_session, fv_data):
|
|
user = UserFactory.create()
|
|
request = RequestFactory.create(creator=user)
|
|
|
|
data = {**fv_data, "task_order_number": "DCA10096D0053"}
|
|
|
|
UpdateFinancialVerification(
|
|
TrueValidator, TrueValidator, user, request, data, is_extended=False
|
|
).execute()
|
|
|
|
user_session(user)
|
|
response = client.get(
|
|
url_for("requests.financial_verification", request_id=request.id),
|
|
data=fv_data,
|
|
follow_redirects=False,
|
|
)
|
|
assert "extended" in response.headers["Location"]
|