From 24cbb90ce2076060f33b65a413c9c9a40aa1ec85 Mon Sep 17 00:00:00 2001 From: dandds Date: Mon, 10 Sep 2018 11:17:47 -0400 Subject: [PATCH] ccpo can request changes on a request --- atst/domain/requests.py | 16 +++++++++++++--- atst/routes/requests/approval.py | 6 +++++- templates/requests/approval.html | 6 +++--- tests/domain/test_requests.py | 4 ++-- tests/routes/test_request_approval.py | 16 ++++++++++++++++ 5 files changed, 39 insertions(+), 9 deletions(-) diff --git a/atst/domain/requests.py b/atst/domain/requests.py index c34009e5..3eb3617f 100644 --- a/atst/domain/requests.py +++ b/atst/domain/requests.py @@ -268,12 +268,22 @@ WHERE requests_with_status.status = :status return request @classmethod - def approve_for_financial_verification(cls, request, review_data): - Requests.set_status(request, RequestStatus.PENDING_FINANCIAL_VERIFICATION) - + def _add_review(cls, request, review_data): request.latest_status.review = RequestReview(**review_data) db.session.add(request) db.session.commit() return request + + @classmethod + def accept_for_financial_verification(cls, request, review_data): + Requests.set_status(request, RequestStatus.PENDING_FINANCIAL_VERIFICATION) + + return Requests._add_review(request, review_data) + + @classmethod + def request_changes(cls, request, review_data): + Requests.set_status(request, RequestStatus.CHANGES_REQUESTED) + + return Requests._add_review(request, review_data) diff --git a/atst/routes/requests/approval.py b/atst/routes/requests/approval.py index 9bb09294..b78b0375 100644 --- a/atst/routes/requests/approval.py +++ b/atst/routes/requests/approval.py @@ -48,7 +48,11 @@ def submit_approval(request_id): form = CCPOReviewForm(http_request.form) if form.validate(): - Requests.approve_for_financial_verification(request, form.data) + if http_request.form.get("approved"): + Requests.accept_for_financial_verification(request, form.data) + else: + Requests.request_changes(request, form.data) + return redirect(url_for("requests.requests_index")) else: return render_approval(request, form) diff --git a/templates/requests/approval.html b/templates/requests/approval.html index 49a526d8..3135f0f5 100644 --- a/templates/requests/approval.html +++ b/templates/requests/approval.html @@ -117,9 +117,9 @@
- - Mark as Changes Requested - + + + {{ Icon('x') }} Cancel diff --git a/tests/domain/test_requests.py b/tests/domain/test_requests.py index 3d587cfa..50227ba1 100644 --- a/tests/domain/test_requests.py +++ b/tests/domain/test_requests.py @@ -181,10 +181,10 @@ def test_set_status_sets_revision(): assert request.latest_revision == request.status_events[-1].revision -def test_approve_for_financial_verification(): +def test_accept_for_financial_verification(): request = RequestFactory.create() review_data = RequestReviewFactory.dictionary() - Requests.approve_for_financial_verification(request, review_data) + Requests.accept_for_financial_verification(request, review_data) assert request.status == RequestStatus.PENDING_FINANCIAL_VERIFICATION current_review = request.latest_status.review assert current_review.fname_mao == review_data["fname_mao"] diff --git a/tests/routes/test_request_approval.py b/tests/routes/test_request_approval.py index 36881805..3a0a05c2 100644 --- a/tests/routes/test_request_approval.py +++ b/tests/routes/test_request_approval.py @@ -2,6 +2,7 @@ import os from flask import url_for from atst.models.attachment import Attachment +from atst.models.request_status_event import RequestStatus from atst.domain.roles import Roles from tests.factories import ( @@ -68,7 +69,22 @@ def test_can_submit_request_approval(client, user_session): user_session(user) request = RequestFactory.create() review_data = RequestReviewFactory.dictionary() + review_data["approved"] = True response = client.post( url_for("requests.submit_approval", request_id=request.id), data=review_data ) assert response.status_code == 302 + assert request.status == RequestStatus.PENDING_FINANCIAL_VERIFICATION + + +def test_can_submit_request_denial(client, user_session): + user = UserFactory.from_atat_role("ccpo") + user_session(user) + request = RequestFactory.create() + review_data = RequestReviewFactory.dictionary() + review_data["denied"] = True + response = client.post( + url_for("requests.submit_approval", request_id=request.id), data=review_data + ) + assert response.status_code == 302 + assert request.status == RequestStatus.CHANGES_REQUESTED