From 470df0a5723b73757647c09feaa05742afd7ee8b Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 29 Jul 2019 15:48:30 -0400 Subject: [PATCH] New route for cancelling TO form --- atst/routes/task_orders/new.py | 24 ++++++++++++++++++++++++ tests/routes/task_orders/test_new.py | 14 ++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 43736e1a..9d55ed02 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -115,6 +115,30 @@ 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") +def cancel_edit(task_order_id): + save = http_request.args.get("save", False) + if save: + form_data = {**http_request.form} + form = None + if task_order_id: + task_order = TaskOrders.get(task_order_id) + form = TaskOrderForm(form_data, obj=task_order) + else: + form = TaskOrderForm(form_data) + + if form.validate(): + 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)) + + @task_orders_bp.route("/task_orders//form/step_2") @user_can(Permissions.CREATE_TASK_ORDER, message="view task order form") def form_step_two_add_number(task_order_id): diff --git a/tests/routes/task_orders/test_new.py b/tests/routes/task_orders/test_new.py index b88bbf7b..1ed515bd 100644 --- a/tests/routes/task_orders/test_new.py +++ b/tests/routes/task_orders/test_new.py @@ -2,16 +2,13 @@ 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 atst.models import TaskOrder from tests.factories import ( CLINFactory, PortfolioFactory, - PortfolioRoleFactory, TaskOrderFactory, UserFactory, ) @@ -326,6 +323,15 @@ def test_task_orders_edit_redirects_to_latest_incomplete_step( assert expected_step in response.location +def test_can_cancel_edit_and_save_task_order(client, user_session, task_order, session): + 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"}) + assert response.status_code == 302 + + updated_task_order = session.query(TaskOrder).get(task_order.id) + assert updated_task_order.number == "0123456789012" + + @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)