From ce6b526da1e30cbe38501868e173ebe14a09c3fd Mon Sep 17 00:00:00 2001 From: richard-dds Date: Tue, 30 Jul 2019 13:54:47 -0400 Subject: [PATCH 1/6] Add task order /edit route --- atst/routes/task_orders/new.py | 22 ++++++++++++++++++++++ tests/routes/task_orders/test_new.py | 19 +++++++++++++++++++ 2 files changed, 41 insertions(+) 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) From 136b97b23f014904fae5c581ff11ad6541d9f5fd Mon Sep 17 00:00:00 2001 From: richard-dds Date: Tue, 30 Jul 2019 14:06:40 -0400 Subject: [PATCH 2/6] Use new edit route --- atst/routes/task_orders/index.py | 2 +- atst/routes/task_orders/new.py | 2 +- templates/portfolios/task_orders/index.html | 2 +- templates/portfolios/task_orders/review.html | 2 +- tests/routes/task_orders/test_new.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/atst/routes/task_orders/index.py b/atst/routes/task_orders/index.py index af8d3dab..34fa2754 100644 --- a/atst/routes/task_orders/index.py +++ b/atst/routes/task_orders/index.py @@ -15,7 +15,7 @@ def review_task_order(task_order_id): task_order = TaskOrders.get(task_order_id) if task_order.is_draft: return redirect( - url_for("task_orders.form_step_one_add_pdf", task_order_id=task_order.id) + url_for("task_orders.edit", task_order_id=task_order.id) ) else: signature_form = SignatureForm() diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index b38f4b18..8c5d4fd3 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -60,7 +60,7 @@ def update_task_order( def edit(task_order_id): task_order = TaskOrders.get(task_order_id) - if task_order.number is None: + if not task_order.number: return redirect( url_for("task_orders.form_step_two_add_number", task_order_id=task_order_id) ) diff --git a/templates/portfolios/task_orders/index.html b/templates/portfolios/task_orders/index.html index 991c98b1..e3d0f199 100644 --- a/templates/portfolios/task_orders/index.html +++ b/templates/portfolios/task_orders/index.html @@ -13,7 +13,7 @@ {% endmacro %} {% macro TaskOrderEditButton(task_order, text="Edit", secondary=False) %} - + {{ text }} {% endmacro %} diff --git a/templates/portfolios/task_orders/review.html b/templates/portfolios/task_orders/review.html index c935411d..b162e572 100644 --- a/templates/portfolios/task_orders/review.html +++ b/templates/portfolios/task_orders/review.html @@ -5,7 +5,7 @@ {% block portfolio_content %} {% call StickyCTA(text="Task order details") %} - Edit + Edit {% endcall %} {% include "fragments/task_order_review.html" %} diff --git a/tests/routes/task_orders/test_new.py b/tests/routes/task_orders/test_new.py index 0c3041e8..0dfa0b23 100644 --- a/tests/routes/task_orders/test_new.py +++ b/tests/routes/task_orders/test_new.py @@ -307,7 +307,7 @@ def test_task_orders_submit_task_order(client, user_session, task_order): @pytest.mark.parametrize( "to_factory_args,expected_step", [ - ({"number": None, "clins": []}, "step_2"), + ({"number": "", "clins": []}, "step_2"), ({"number": "1234567890123", "clins": []}, "step_3"), ({"number": "1234567890123", "create_clins": [1]}, "step_4"), ], From 43ed257f10c3164bc52b8aa6f6724c929104f8f8 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Tue, 30 Jul 2019 14:07:04 -0400 Subject: [PATCH 3/6] Future proof edit route --- atst/routes/task_orders/new.py | 6 +++++- tests/routes/task_orders/test_new.py | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 8c5d4fd3..ee639690 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -60,7 +60,11 @@ def update_task_order( def edit(task_order_id): task_order = TaskOrders.get(task_order_id) - if not task_order.number: + if not task_order.pdf: + return redirect( + url_for("task_orders.form_step_one_add_pdf", task_order_id=task_order_id) + ) + elif not task_order.number: return redirect( url_for("task_orders.form_step_two_add_number", task_order_id=task_order_id) ) diff --git a/tests/routes/task_orders/test_new.py b/tests/routes/task_orders/test_new.py index 0dfa0b23..feef2844 100644 --- a/tests/routes/task_orders/test_new.py +++ b/tests/routes/task_orders/test_new.py @@ -307,6 +307,7 @@ def test_task_orders_submit_task_order(client, user_session, task_order): @pytest.mark.parametrize( "to_factory_args,expected_step", [ + ({"pdf": None, "number": "", "clins": []}, "step_1"), ({"number": "", "clins": []}, "step_2"), ({"number": "1234567890123", "clins": []}, "step_3"), ({"number": "1234567890123", "create_clins": [1]}, "step_4"), From 581b55b2ebff81b12feaf2353f65da107e2030d4 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Tue, 30 Jul 2019 14:11:20 -0400 Subject: [PATCH 4/6] Formatting --- atst/routes/task_orders/index.py | 4 +--- atst/routes/task_orders/new.py | 4 +++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/atst/routes/task_orders/index.py b/atst/routes/task_orders/index.py index 34fa2754..beb1d653 100644 --- a/atst/routes/task_orders/index.py +++ b/atst/routes/task_orders/index.py @@ -14,9 +14,7 @@ from atst.models.task_order import Status as TaskOrderStatus def review_task_order(task_order_id): task_order = TaskOrders.get(task_order_id) if task_order.is_draft: - return redirect( - url_for("task_orders.edit", task_order_id=task_order.id) - ) + return redirect(url_for("task_orders.edit", task_order_id=task_order.id)) else: signature_form = SignatureForm() return render_template( diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index ee639690..fd358429 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -79,7 +79,9 @@ def edit(task_order_id): 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)) + 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") From 8edfd1c3552feebab3e7b5ba86886634f6526c09 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Tue, 30 Jul 2019 14:24:07 -0400 Subject: [PATCH 5/6] Restrict access to edit route --- atst/routes/task_orders/new.py | 1 + 1 file changed, 1 insertion(+) diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index fd358429..43736e1a 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -57,6 +57,7 @@ def update_task_order( @task_orders_bp.route("/task_orders//edit") +@user_can(Permissions.CREATE_TASK_ORDER, message="edit task order form") def edit(task_order_id): task_order = TaskOrders.get(task_order_id) From c9451e0f93b889f520f6ecf6272b191803014ce5 Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Tue, 30 Jul 2019 15:26:07 -0400 Subject: [PATCH 6/6] Update tests to use proper route Pass portfolio and creator to TOFactory so user has perms to edit TO --- tests/routes/task_orders/test_index.py | 5 +---- tests/routes/task_orders/test_new.py | 6 ++++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/routes/task_orders/test_index.py b/tests/routes/task_orders/test_index.py index 33a75cd8..c800ce25 100644 --- a/tests/routes/task_orders/test_index.py +++ b/tests/routes/task_orders/test_index.py @@ -51,7 +51,4 @@ def test_review_task_order_draft(client, user_session, task_order): url_for("task_orders.review_task_order", task_order_id=task_order.id) ) assert response.status_code == 302 - assert ( - url_for("task_orders.form_step_one_add_pdf", task_order_id=task_order.id) - in response.location - ) + assert url_for("task_orders.edit", task_order_id=task_order.id) in response.location diff --git a/tests/routes/task_orders/test_new.py b/tests/routes/task_orders/test_new.py index feef2844..b88bbf7b 100644 --- a/tests/routes/task_orders/test_new.py +++ b/tests/routes/task_orders/test_new.py @@ -307,7 +307,7 @@ def test_task_orders_submit_task_order(client, user_session, task_order): @pytest.mark.parametrize( "to_factory_args,expected_step", [ - ({"pdf": None, "number": "", "clins": []}, "step_1"), + ({"_pdf": None, "number": "", "clins": []}, "step_1"), ({"number": "", "clins": []}, "step_2"), ({"number": "1234567890123", "clins": []}, "step_3"), ({"number": "1234567890123", "create_clins": [1]}, "step_4"), @@ -316,7 +316,9 @@ def test_task_orders_submit_task_order(client, user_session, task_order): 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) + task_order = TaskOrderFactory.create( + portfolio=portfolio, creator=portfolio.owner, **to_factory_args + ) user_session(portfolio.owner) response = client.get(url_for("task_orders.edit", task_order_id=task_order.id))