diff --git a/atst/routes/task_orders/index.py b/atst/routes/task_orders/index.py index 13010b88..af8d3dab 100644 --- a/atst/routes/task_orders/index.py +++ b/atst/routes/task_orders/index.py @@ -7,7 +7,6 @@ from atst.domain.task_orders import TaskOrders from atst.forms.task_order import SignatureForm from atst.models import Permissions from atst.models.task_order import Status as TaskOrderStatus -from atst.utils.flash import formatted_flash as flash @task_orders_bp.route("/task_orders//review") @@ -27,20 +26,6 @@ def review_task_order(task_order_id): ) -@task_orders_bp.route("/task_orders//submit", methods=["POST"]) -@user_can(Permissions.CREATE_TASK_ORDER, "submit task order") -def submit_task_order(task_order_id): - - task_order = TaskOrders.get(task_order_id) - TaskOrders.sign(task_order=task_order, signer_dod_id=g.current_user.dod_id) - - flash("task_order_submitted", task_order=task_order) - - return redirect( - url_for("task_orders.portfolio_funding", portfolio_id=task_order.portfolio.id) - ) - - @task_orders_bp.route("/portfolios//task_orders") @user_can(Permissions.VIEW_PORTFOLIO_FUNDING, message="view portfolio funding") def portfolio_funding(portfolio_id): diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index f6e04f46..24ecb265 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -5,6 +5,7 @@ from atst.domain.authz.decorator import user_can_access_decorator as user_can from atst.domain.task_orders import TaskOrders from atst.forms.task_order import TaskOrderForm, SignatureForm from atst.models.permissions import Permissions +from atst.utils.flash import formatted_flash as flash def render_task_orders_edit(template, portfolio_id=None, task_order_id=None, form=None): @@ -54,8 +55,8 @@ def update_task_order( ) -@task_orders_bp.route("/portfolios//task_orders/step_1") -@task_orders_bp.route("/task_orders//step_1") +@task_orders_bp.route("/portfolios//task_orders/form/step_1") +@task_orders_bp.route("/task_orders//form/step_1") @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def form_step_one_add_pdf(portfolio_id=None, task_order_id=None): return render_task_orders_edit( @@ -65,8 +66,10 @@ def form_step_one_add_pdf(portfolio_id=None, task_order_id=None): ) -@task_orders_bp.route("/portfolios//task_orders/step-1", methods=["POST"]) -@task_orders_bp.route("/task_orders//step_1", methods=["POST"]) +@task_orders_bp.route( + "/portfolios//task_orders/form/step-1", methods=["POST"] +) +@task_orders_bp.route("/task_orders//form/step_1", methods=["POST"]) @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def submit_form_step_one_add_pdf(portfolio_id=None, task_order_id=None): form_data = {**http_request.form, **http_request.files} @@ -82,7 +85,7 @@ def submit_form_step_one_add_pdf(portfolio_id=None, task_order_id=None): ) -@task_orders_bp.route("/task_orders//step_2") +@task_orders_bp.route("/task_orders//form/step_2") @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def form_step_two_add_number(task_order_id): return render_task_orders_edit( @@ -90,7 +93,7 @@ def form_step_two_add_number(task_order_id): ) -@task_orders_bp.route("/task_orders//step_2", methods=["POST"]) +@task_orders_bp.route("/task_orders//form/step_2", methods=["POST"]) @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def submit_form_step_two_add_number(task_order_id): form_data = {**http_request.form} @@ -102,7 +105,7 @@ def submit_form_step_two_add_number(task_order_id): ) -@task_orders_bp.route("/task_orders//step_3") +@task_orders_bp.route("/task_orders//form/step_3") @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def form_step_three_add_clins(task_order_id): return render_task_orders_edit( @@ -110,7 +113,7 @@ def form_step_three_add_clins(task_order_id): ) -@task_orders_bp.route("/task_orders//step_3", methods=["POST"]) +@task_orders_bp.route("/task_orders//form/step_3", methods=["POST"]) @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def submit_form_step_three_add_clins(task_order_id): form_data = {**http_request.form} @@ -122,7 +125,7 @@ def submit_form_step_three_add_clins(task_order_id): ) -@task_orders_bp.route("/task_orders//step_4") +@task_orders_bp.route("/task_orders//form/step_4") @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def form_step_four_review(task_order_id): return render_task_orders_edit( @@ -130,9 +133,22 @@ def form_step_four_review(task_order_id): ) -@task_orders_bp.route("/task_orders//step_5") +@task_orders_bp.route("/task_orders//form/step_5") @user_can(Permissions.CREATE_TASK_ORDER, message="view new task order form") def form_step_five_confirm_signature(task_order_id): return render_task_orders_edit( "task_orders/step_5.html", task_order_id=task_order_id, form=SignatureForm() ) + + +@task_orders_bp.route("/task_orders//submit", methods=["POST"]) +@user_can(Permissions.CREATE_TASK_ORDER, "submit task order") +def submit_task_order(task_order_id): + task_order = TaskOrders.get(task_order_id) + TaskOrders.sign(task_order=task_order, signer_dod_id=g.current_user.dod_id) + + flash("task_order_submitted", task_order=task_order) + + return redirect( + url_for("task_orders.portfolio_funding", portfolio_id=task_order.portfolio_id) + ) diff --git a/tests/routes/task_orders/test_index.py b/tests/routes/task_orders/test_index.py index c2beee75..33a75cd8 100644 --- a/tests/routes/task_orders/test_index.py +++ b/tests/routes/task_orders/test_index.py @@ -55,29 +55,3 @@ def test_review_task_order_draft(client, user_session, task_order): url_for("task_orders.form_step_one_add_pdf", task_order_id=task_order.id) in response.location ) - - -def test_submit_task_order(client, user_session, task_order): - user_session(task_order.portfolio.owner) - response = client.post( - url_for("task_orders.submit_task_order", task_order_id=task_order.id) - ) - assert response.status_code == 302 - - active_start_date = date.today() - timedelta(days=1) - active_task_order = TaskOrderFactory(portfolio=task_order.portfolio) - CLINFactory(task_order=active_task_order, start_date=active_start_date) - assert active_task_order.status == TaskOrderStatus.UNSIGNED - response = client.post( - url_for("task_orders.submit_task_order", task_order_id=active_task_order.id) - ) - assert active_task_order.status == TaskOrderStatus.ACTIVE - - upcoming_start_date = date.today() + timedelta(days=1) - upcoming_task_order = TaskOrderFactory(portfolio=task_order.portfolio) - CLINFactory(task_order=upcoming_task_order, start_date=upcoming_start_date) - assert upcoming_task_order.status == TaskOrderStatus.UNSIGNED - response = client.post( - url_for("task_orders.submit_task_order", task_order_id=upcoming_task_order.id) - ) - assert upcoming_task_order.status == TaskOrderStatus.UPCOMING diff --git a/tests/routes/task_orders/test_new.py b/tests/routes/task_orders/test_new.py index c2e1ea19..ab221bca 100644 --- a/tests/routes/task_orders/test_new.py +++ b/tests/routes/task_orders/test_new.py @@ -1,12 +1,15 @@ import pytest from flask import url_for +from datetime import timedelta, date from atst.domain.permission_sets import PermissionSets from atst.domain.task_orders import TaskOrders +from atst.models.task_order import Status as TaskOrderStatus from atst.models import Attachment, TaskOrder from atst.utils.localization import translate from tests.factories import ( + CLINFactory, PortfolioFactory, PortfolioRoleFactory, TaskOrderFactory, @@ -234,6 +237,32 @@ def test_task_orders_submit_form_step_three_add_clins_existing_to( assert len(task_order.clins) == 1 +def test_submit_task_order(client, user_session, task_order): + user_session(task_order.portfolio.owner) + response = client.post( + url_for("task_orders.submit_task_order", task_order_id=task_order.id) + ) + assert response.status_code == 302 + + active_start_date = date.today() - timedelta(days=1) + active_task_order = TaskOrderFactory(portfolio=task_order.portfolio) + CLINFactory(task_order=active_task_order, start_date=active_start_date) + assert active_task_order.status == TaskOrderStatus.UNSIGNED + response = client.post( + url_for("task_orders.submit_task_order", task_order_id=active_task_order.id) + ) + assert active_task_order.status == TaskOrderStatus.ACTIVE + + upcoming_start_date = date.today() + timedelta(days=1) + upcoming_task_order = TaskOrderFactory(portfolio=task_order.portfolio) + CLINFactory(task_order=upcoming_task_order, start_date=upcoming_start_date) + assert upcoming_task_order.status == TaskOrderStatus.UNSIGNED + response = client.post( + url_for("task_orders.submit_task_order", task_order_id=upcoming_task_order.id) + ) + assert upcoming_task_order.status == TaskOrderStatus.UPCOMING + + @pytest.mark.skip(reason="Reevaluate how form handles invalid data") def test_task_orders_update_invalid_data(client, user_session, portfolio): user_session(portfolio.owner)