diff --git a/atst/routes/task_orders/new.py b/atst/routes/task_orders/new.py index 48f59a13..4c9d40e7 100644 --- a/atst/routes/task_orders/new.py +++ b/atst/routes/task_orders/new.py @@ -120,6 +120,23 @@ class ShowTaskOrderWorkflow: else: return False + def can_edit_pf_attributes(self, portfolio_id=None): + if self.task_order: + if ( + self.task_order.portfolio.num_task_orders > 1 + or not portfolio_id is None + ): + return False + elif portfolio_id: + if self.get_portfolio(portfolio_id).num_task_orders > 0: + return False + return True + + def get_portfolio(self, portfolio_id=None): + if self.task_order: + return self.task_order.portfolio + return Portfolios.get(self.user, portfolio_id) + class UpdateTaskOrderWorkflow(ShowTaskOrderWorkflow): def __init__( @@ -221,6 +238,9 @@ def new(screen, task_order_id=None, portfolio_id=None): "complete": workflow.is_complete, } + if not workflow.can_edit_pf_attributes(portfolio_id): + template_args["portfolio"] = workflow.get_portfolio(portfolio_id=portfolio_id) + if task_order_id and screen is 4: task_order = TaskOrders.get(g.current_user, task_order_id) if not TaskOrders.all_sections_complete(task_order): diff --git a/tests/routes/task_orders/test_new_task_order.py b/tests/routes/task_orders/test_new_task_order.py index 2b3117db..e600f7db 100644 --- a/tests/routes/task_orders/test_new_task_order.py +++ b/tests/routes/task_orders/test_new_task_order.py @@ -42,6 +42,54 @@ def serialize_dates(data): return data +def test_new_to_can_edit_pf_attributes_screen_1(): + portfolio = PortfolioFactory.create() + workflow = ShowTaskOrderWorkflow(user=portfolio.owner) + assert workflow.can_edit_pf_attributes(portfolio.id) + + +def test_new_to_can_edit_pf_attributes_on_return_to_screen_1(): + portfolio = PortfolioFactory.create() + workflow = ShowTaskOrderWorkflow(user=portfolio.owner) + assert workflow.can_edit_pf_attributes() + + +def test_to_on_pf_cannot_edit_pf_attributes(): + portfolio = PortfolioFactory.create() + pf_task_order = TaskOrderFactory(portfolio=portfolio) + + workflow = ShowTaskOrderWorkflow(user=portfolio.owner) + assert portfolio.num_task_orders == 1 + # case: TO is created from am existing portfolio + assert not workflow.can_edit_pf_attributes(portfolio.id) + # case: Portfolio is being created and user navigates back to app_info screen + assert workflow.can_edit_pf_attributes() + + second_task_order = TaskOrderFactory(portfolio=portfolio) + workflow = ShowTaskOrderWorkflow( + user=second_task_order.creator, task_order_id=second_task_order.id + ) + assert portfolio.num_task_orders > 1 + assert not workflow.can_edit_pf_attributes() + +def test_get_portfolio_when_task_order_exists(): + portfolio = PortfolioFactory.create() + task_order = TaskOrderFactory(portfolio=portfolio) + assert portfolio.num_task_orders > 0 + + workflow = ShowTaskOrderWorkflow( + user=task_order.creator, task_order_id=task_order.id + ) + assert portfolio == workflow.get_portfolio() + + +def test_get_portfolio_with_portfolio_id(): + user = UserFactory.create() + portfolio = PortfolioFactory.create(owner=user) + workflow = ShowTaskOrderWorkflow(user=portfolio.owner) + assert portfolio == workflow.get_portfolio(portfolio_id=portfolio.id) + + # TODO: this test will need to be more complicated when we add validation to # the forms def test_create_new_task_order(client, user_session, pdf_upload):