diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 8d91ca7d..b38f4b18 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -56,6 +56,28 @@ def update_task_order( ) +@task_orders_bp.route("/task_orders//edit") +def edit(task_order_id): + task_order = TaskOrders.get(task_order_id) + + if task_order.number is None: + return redirect( + url_for("task_orders.form_step_two_add_number", task_order_id=task_order_id) + ) + elif not task_order.clins_are_completed: + return redirect( + url_for( + "task_orders.form_step_three_add_clins", task_order_id=task_order_id + ) + ) + elif task_order.is_completed: + return redirect( + url_for("task_orders.form_step_four_review", task_order_id=task_order_id) + ) + else: + return redirect(url_for("task_orders.form_step_one_add_pdf", task_order_id=task_order_id)) + + @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 task order form") diff --git a/tests/routes/task_orders/test_new.py b/tests/routes/task_orders/test_new.py index 74229e00..0c3041e8 100644 --- a/tests/routes/task_orders/test_new.py +++ b/tests/routes/task_orders/test_new.py @@ -304,6 +304,25 @@ def test_task_orders_submit_task_order(client, user_session, task_order): assert upcoming_task_order.status == TaskOrderStatus.UPCOMING +@pytest.mark.parametrize( + "to_factory_args,expected_step", + [ + ({"number": None, "clins": []}, "step_2"), + ({"number": "1234567890123", "clins": []}, "step_3"), + ({"number": "1234567890123", "create_clins": [1]}, "step_4"), + ], +) +def test_task_orders_edit_redirects_to_latest_incomplete_step( + client, user_session, portfolio, to_factory_args, expected_step +): + task_order = TaskOrderFactory.create(**to_factory_args) + user_session(portfolio.owner) + + response = client.get(url_for("task_orders.edit", task_order_id=task_order.id)) + + assert expected_step in response.location + + @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)