diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index fba36ac7..b716d069 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -100,11 +100,14 @@ class ShowTaskOrderWorkflow: class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): - def __init__(self, user, form_data, screen=1, task_order_id=None): + def __init__( + self, user, form_data, screen=1, task_order_id=None, portfolio_id=None + ): self.user = user self.form_data = form_data self.screen = screen self.task_order_id = task_order_id + self.portfolio_id = portfolio_id self._task_order = None self._section = TASK_ORDER_SECTIONS[screen - 1] self._form = self._section["form"](self.form_data) @@ -144,7 +147,10 @@ class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): Portfolios.update(self.task_order.portfolio, {"name": new_name}) TaskOrders.update(self.user, self.task_order, **self.task_order_form_data) else: - pf = Portfolios.create(self.user, self.form.portfolio_name.data) + if self.portfolio_id: + pf = Portfolios.get(self.user, self.portfolio_id) + else: + pf = Portfolios.create(self.user, self.form.portfolio_name.data) self._task_order = TaskOrders.create(portfolio=pf, creator=self.user) TaskOrders.update(self.user, self.task_order, **self.task_order_form_data) @@ -217,13 +223,15 @@ def get_started(): @task_orders_bp.route("/task_orders/new/") @task_orders_bp.route("/task_orders/new//") -def new(screen, task_order_id=None): +@task_orders_bp.route("/portfolios//task_orders/new/") +def new(screen, task_order_id=None, portfolio_id=None): workflow = ShowTaskOrderWorkflow(g.current_user, screen, task_order_id) return render_template( workflow.template, current=screen, task_order_id=task_order_id, task_order=workflow.task_order, + portfolio_id=portfolio_id, screens=workflow.display_screens, form=workflow.form, ) @@ -231,9 +239,12 @@ def new(screen, task_order_id=None): @task_orders_bp.route("/task_orders/new/", methods=["POST"]) @task_orders_bp.route("/task_orders/new//", methods=["POST"]) -def update(screen, task_order_id=None): +@task_orders_bp.route( + "/portfolios//task_orders/new/", methods=["POST"] +) +def update(screen, task_order_id=None, portfolio_id=None): workflow = UpdateTaskOrderWorkflow( - g.current_user, http_request.form, screen, task_order_id + g.current_user, http_request.form, screen, task_order_id, portfolio_id ) if workflow.validate(): @@ -250,6 +261,7 @@ def update(screen, task_order_id=None): workflow.template, current=screen, task_order_id=task_order_id, + portfolio_id=portfolio_id, screens=TASK_ORDER_SECTIONS, form=workflow.form, ) diff --git a/templates/task_orders/_new.html b/templates/task_orders/_new.html index ec860310..7af31965 100644 --- a/templates/task_orders/_new.html +++ b/templates/task_orders/_new.html @@ -12,7 +12,7 @@ {% if task_order_id %}
{% else %} - + {% endif %} {% endblock %} diff --git a/tests/routes/task_orders/test_new_task_order.py b/tests/routes/task_orders/test_new_task_order.py index 672bace0..13c1e49d 100644 --- a/tests/routes/task_orders/test_new_task_order.py +++ b/tests/routes/task_orders/test_new_task_order.py @@ -48,6 +48,8 @@ def test_create_new_task_order(client, user_session): task_order_data = TaskOrderFactory.dictionary() app_info_data = slice_data_for_section(task_order_data, "app_info") + portfolio_name = "Mos Eisley" + app_info_data["portfolio_name"] = portfolio_name response = client.post( url_for("task_orders.update", screen=1), @@ -56,6 +58,11 @@ def test_create_new_task_order(client, user_session): ) assert url_for("task_orders.new", screen=2) in response.headers["Location"] + created_task_order_id = response.headers["Location"].split("/")[-1] + created_task_order = TaskOrders.get(creator, created_task_order_id) + assert created_task_order.portfolio is not None + assert created_task_order.portfolio.name == portfolio_name + funding_data = slice_data_for_section(task_order_data, "funding") funding_data = serialize_dates(funding_data) response = client.post( @@ -70,6 +77,28 @@ def test_create_new_task_order(client, user_session): assert url_for("task_orders.new", screen=4) in response.headers["Location"] +def test_create_new_task_order_for_portfolio(client, user_session): + portfolio = PortfolioFactory.create() + creator = portfolio.owner + user_session(creator) + + task_order_data = TaskOrderFactory.dictionary() + app_info_data = slice_data_for_section(task_order_data, "app_info") + portfolio_name = "This is ignored for now" + app_info_data["portfolio_name"] = portfolio_name + + response = client.post( + url_for("task_orders.update", screen=1, portfolio_id=portfolio.id), + data=app_info_data, + follow_redirects=False, + ) + assert url_for("task_orders.new", screen=2) in response.headers["Location"] + + created_task_order_id = response.headers["Location"].split("/")[-1] + created_task_order = TaskOrders.get(creator, created_task_order_id) + assert created_task_order.portfolio == portfolio + + def test_task_order_form_shows_errors(client, user_session): creator = UserFactory.create() user_session(creator)