From dd93dd5aeaddfc2879af38bd5395fb55c390e334 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Tue, 30 Jul 2019 10:30:06 -0400 Subject: [PATCH] Allow user to cancel without saving --- atst/routes/task_orders/new.py | 12 ++++++---- templates/task_orders/builder_base.html | 4 ++-- tests/routes/task_orders/test_new.py | 32 +++++++++++++++++++++++-- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index fc4535b8..7f888536 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -21,7 +21,10 @@ def render_task_orders_edit(template, portfolio_id=None, task_order_id=None, for else: render_args["form"] = form or TaskOrderForm() - render_args["cancel_url"] = url_for( + render_args["cancel_save_url"] = url_for( + "task_orders.portfolio_funding", portfolio_id=portfolio_id, save=True + ) + render_args["cancel_discard_url"] = url_for( "task_orders.portfolio_funding", portfolio_id=portfolio_id ) @@ -116,7 +119,7 @@ def submit_form_step_one_add_pdf(portfolio_id=None, task_order_id=None): @task_orders_bp.route("/task_orders//form/cancel", methods=["POST"]) -@user_can(Permissions.CREATE_TASK_ORDER, message="view task order form") +@user_can(Permissions.CREATE_TASK_ORDER, message="cancel task order form") def cancel_edit(task_order_id): save = http_request.args.get("save", False) if save: @@ -132,13 +135,14 @@ def cancel_edit(task_order_id): task_order = None if task_order_id: task_order = TaskOrders.update(task_order_id, **form.data) - portfolio_id = task_order.portfolio_id else: task_order = TaskOrders.create( g.current_user, portfolio_id, **form.data ) - return redirect(url_for("task_orders.portfolio_funding", portfolio_id=portfolio_id)) + return redirect( + url_for("task_orders.portfolio_funding", portfolio_id=g.portfolio.id) + ) @task_orders_bp.route("/task_orders//form/step_2") diff --git a/templates/task_orders/builder_base.html b/templates/task_orders/builder_base.html index 01e63d4a..c1931693 100644 --- a/templates/task_orders/builder_base.html +++ b/templates/task_orders/builder_base.html @@ -37,8 +37,8 @@ {% call Modal(name='cancel', dismissable=True) %}

Do you want to save this draft?

- No, delete it - Yes, save for later + No, delete it + Yes, save for later
{% endcall %} diff --git a/tests/routes/task_orders/test_new.py b/tests/routes/task_orders/test_new.py index 90e34209..cc22094d 100644 --- a/tests/routes/task_orders/test_new.py +++ b/tests/routes/task_orders/test_new.py @@ -322,12 +322,40 @@ def test_can_cancel_edit_and_save_task_order(client, user_session, task_order, s user_session(task_order.portfolio.owner) response = client.post( url_for("task_orders.cancel_edit", task_order_id=task_order.id, save=True), - data={"number": "0123456789012"}, + data={"number": "7896564324567"}, ) assert response.status_code == 302 updated_task_order = session.query(TaskOrder).get(task_order.id) - assert updated_task_order.number == "0123456789012" + assert updated_task_order.number == "7896564324567" + + +def test_cancel_edit_does_not_save_invalid_form_input(client, user_session, session): + task_order = TaskOrderFactory.create() + user_session(task_order.portfolio.owner) + response = client.post( + url_for("task_orders.cancel_edit", task_order_id=task_order.id, save=True), + data={"clins": "not really clins"}, + ) + assert response.status_code == 302 + + # CLINs should be unchanged + updated_task_order = session.query(TaskOrder).get(task_order.id) + assert updated_task_order.clins == task_order.clins + + +def test_cancel_edit_without_saving(client, user_session, session): + task_order = TaskOrderFactory.create(number=None) + user_session(task_order.portfolio.owner) + response = client.post( + url_for("task_orders.cancel_edit", task_order_id=task_order.id), + data={"number": "7643906432984"}, + ) + assert response.status_code == 302 + + # TO number should be unchanged + updated_task_order = session.query(TaskOrder).get(task_order.id) + assert updated_task_order.number is None @pytest.mark.skip(reason="Reevaluate how form handles invalid data")