diff --git a/atst/domain/requests.py b/atst/domain/requests.py index 57a636a4..2c2ccdab 100644 --- a/atst/domain/requests.py +++ b/atst/domain/requests.py @@ -291,6 +291,9 @@ WHERE requests_with_status.status = :status @classmethod def request_changes(cls, user, request, review_data): - Requests.set_status(request, RequestStatus.CHANGES_REQUESTED) + if request.status == RequestStatus.PENDING_CCPO_ACCEPTANCE: + Requests.set_status(request, RequestStatus.CHANGES_REQUESTED) + elif request.status == RequestStatus.PENDING_CCPO_APPROVAL: + Requests.set_status(request, RequestStatus.CHANGES_REQUESTED_TO_FINVER) return Requests._add_review(user, request, review_data) diff --git a/tests/domain/test_requests.py b/tests/domain/test_requests.py index d49379b5..bb4d8949 100644 --- a/tests/domain/test_requests.py +++ b/tests/domain/test_requests.py @@ -182,11 +182,8 @@ def test_set_status_sets_revision(): def test_advance_to_financial_verification(): - request = RequestFactory.create() - RequestStatusEventFactory.create( - request=request, - revision=request.latest_revision, - new_status=RequestStatus.PENDING_CCPO_ACCEPTANCE, + request = RequestFactory.create_with_status( + status=RequestStatus.PENDING_CCPO_ACCEPTANCE ) review_data = RequestReviewFactory.dictionary() Requests.advance(UserFactory.create(), request, review_data) @@ -196,12 +193,31 @@ def test_advance_to_financial_verification(): def test_advance_to_approval(): - request = RequestFactory.create() - RequestStatusEventFactory.create( - request=request, - revision=request.latest_revision, - new_status=RequestStatus.PENDING_CCPO_APPROVAL, + request = RequestFactory.create_with_status( + status=RequestStatus.PENDING_CCPO_APPROVAL ) review_data = RequestReviewFactory.dictionary() Requests.advance(UserFactory.create(), request, review_data) assert request.status == RequestStatus.APPROVED + + +def test_request_changes_to_request_application(): + request = RequestFactory.create_with_status( + status=RequestStatus.PENDING_CCPO_ACCEPTANCE + ) + review_data = RequestReviewFactory.dictionary() + Requests.request_changes(UserFactory.create(), request, review_data) + assert request.status == RequestStatus.CHANGES_REQUESTED + current_review = request.latest_status.review + assert current_review.fname_mao == review_data["fname_mao"] + + +def test_request_changes_to_financial_verification_info(): + request = RequestFactory.create_with_status( + status=RequestStatus.PENDING_CCPO_APPROVAL + ) + review_data = RequestReviewFactory.dictionary() + Requests.request_changes(UserFactory.create(), request, review_data) + assert request.status == RequestStatus.CHANGES_REQUESTED_TO_FINVER + current_review = request.latest_status.review + assert current_review.fname_mao == review_data["fname_mao"] diff --git a/tests/factories.py b/tests/factories.py index ad8cb048..ab6e964a 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -148,6 +148,14 @@ class RequestFactory(Base): return RequestRevisionFactory.build(**data) + @classmethod + def create_with_status(cls, status=RequestStatus.STARTED, **kwargs): + request = RequestFactory(**kwargs) + RequestStatusEventFactory.create( + request=request, revision=request.latest_revision, new_status=status + ) + return request + class PENumberFactory(Base): class Meta: diff --git a/tests/routes/test_request_approval.py b/tests/routes/test_request_approval.py index df3b698d..ec110eb1 100644 --- a/tests/routes/test_request_approval.py +++ b/tests/routes/test_request_approval.py @@ -71,11 +71,8 @@ def test_task_order_download_does_not_exist(client, user_session): def test_can_submit_request_approval(client, user_session): user = UserFactory.from_atat_role("ccpo") user_session(user) - request = RequestFactory.create() - RequestStatusEventFactory.create( - request=request, - revision=request.latest_revision, - new_status=RequestStatus.PENDING_CCPO_ACCEPTANCE, + request = RequestFactory.create_with_status( + status=RequestStatus.PENDING_CCPO_ACCEPTANCE ) review_data = RequestReviewFactory.dictionary() review_data["approved"] = True @@ -89,7 +86,9 @@ def test_can_submit_request_approval(client, user_session): def test_can_submit_request_denial(client, user_session): user = UserFactory.from_atat_role("ccpo") user_session(user) - request = RequestFactory.create() + request = RequestFactory.create_with_status( + status=RequestStatus.PENDING_CCPO_ACCEPTANCE + ) review_data = RequestReviewFactory.dictionary() review_data["denied"] = True response = client.post(