From 370ebae08bf321494813b7eea3e227d7011bf4e7 Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Mon, 27 Jan 2025 08:42:37 -0500 Subject: [PATCH] bemade_fsm: Fix broken tests --- bemade_fsm/tests/test_bemade_fsm_common.py | 4 + bemade_fsm/tests/test_equipment.py | 2 +- bemade_fsm/tests/test_sale_order.py | 125 ++++++++++++++++++++- 3 files changed, 126 insertions(+), 5 deletions(-) diff --git a/bemade_fsm/tests/test_bemade_fsm_common.py b/bemade_fsm/tests/test_bemade_fsm_common.py index 0c1fb31..1d6996a 100644 --- a/bemade_fsm/tests/test_bemade_fsm_common.py +++ b/bemade_fsm/tests/test_bemade_fsm_common.py @@ -42,6 +42,9 @@ class BemadeFSMBaseTest(TransactionCase): user_group_fsm_user = cls.env.ref("industry_fsm.group_fsm_user") user_group_sales_user = cls.env.ref("sales_team.group_sale_salesman") user_group_sales_manager = cls.env.ref("sales_team.group_sale_manager") + user_group_delivery_address = cls.env.ref( + "account.group_delivery_invoice_address" + ) user_product_customer = cls.env.ref( "customer_product_code.group_product_customer_code_user", raise_if_not_found=False, @@ -53,6 +56,7 @@ class BemadeFSMBaseTest(TransactionCase): user_group_fsm_user.id, user_group_sales_manager.id, user_group_sales_user.id, + user_group_delivery_address.id, ] if user_product_customer: group_ids.append(user_product_customer.id) diff --git a/bemade_fsm/tests/test_equipment.py b/bemade_fsm/tests/test_equipment.py index d87239c..ce0ad2b 100644 --- a/bemade_fsm/tests/test_equipment.py +++ b/bemade_fsm/tests/test_equipment.py @@ -10,7 +10,7 @@ class TestEquipment(BemadeFSMBaseTest): partner = self._generate_partner() partner_2 = self._generate_partner() equipment_1 = self._generate_equipment(partner=partner) - equipment_2 = self._generate_equipment(partner_2) + equipment_2 = self._generate_equipment(partner=partner_2) sale_order = self._generate_sale_order(partner=partner) product = self._generate_product() self.assertEqual(sale_order.valid_equipment_ids, equipment_1) diff --git a/bemade_fsm/tests/test_sale_order.py b/bemade_fsm/tests/test_sale_order.py index 28d357c..44863cf 100644 --- a/bemade_fsm/tests/test_sale_order.py +++ b/bemade_fsm/tests/test_sale_order.py @@ -127,7 +127,7 @@ class TestSalesOrder(BemadeFSMBaseTest): parent = self._generate_partner() child = self._generate_partner(parent=parent) for i in range(3): - self._generate_equipment(child) + self._generate_equipment(partner=child) sale_order = self._generate_sale_order(partner=parent) @@ -139,11 +139,11 @@ class TestSalesOrder(BemadeFSMBaseTest): parent = self._generate_partner() child = self._generate_partner(parent=parent) for i in range(4): - self._generate_equipment(child) + self._generate_equipment(partner=child) sale_order = self._generate_sale_order(partner=parent) - self.assertEqual(sale_order.default_equipment_ids, parent.owned_equipment_ids) + self.assertEqual(sale_order.default_equipment_ids, self.env["fsm.equipment"]) def test_sale_order_resets_default_equipment_on_partner_change(self): partner_1 = self._generate_partner() @@ -360,4 +360,121 @@ class TestSalesOrder(BemadeFSMBaseTest): } ) for task in parent_task._get_all_subtasks() | parent_task: - self.assertEqual(so.partner_shipping_id, task.partner_id) + self.assertEqual( + so.partner_shipping_id, + task.partner_id, + f"{task.name} has a different partner than the SO", + ) + + def test_task_hierarchy_maintained_after_cancel_reconfirm(self): + """Test that task hierarchy and project assignments are maintained when canceling + and reconfirming a sale order with a templated FSM product.""" + self.env.user.groups_id |= self.env.ref( + "account.group_delivery_invoice_address" + ) + # Create a task template with subtasks + parent_template = self._generate_task_template( + structure=[2], # Two subtasks + names=["Main Service", "Subtask"], + planned_hours=8, + ) + + # Create FSM product with template + product = self._generate_product(task_template=parent_template) + + # Create and confirm sale order + partner = self._generate_partner() + partner_2 = self._generate_partner(parent=partner) + so = self._generate_sale_order(partner=partner) + sol = self._generate_sale_order_line(so, product=product) + so.action_confirm() + + # Get initial tasks and verify setup + main_task = sol.task_id + self.assertTrue(main_task, "Main task should be created") + self.assertTrue(main_task.project_id, "Main task should have a project") + + subtasks = main_task.child_ids + self.assertEqual(len(subtasks), 2, "Should have created 2 subtasks") + self.assertEqual(so.tasks_count, 1, "Should have only 1 task on confirmation") + + # Verify initial task hierarchy + initial_project = main_task.project_id + for subtask in subtasks: + self.assertEqual( + subtask.project_id, + initial_project, + "Subtask should have same project as main task", + ) + self.assertFalse( + subtask.sale_order_id, "Subtask should not be linked to sale order" + ) + self.assertFalse( + subtask.sale_line_id, "Subtask should not be linked to sale order line" + ) + + # Store initial names for comparison + initial_subtask_names = subtasks.mapped("name") + + original_task_names = (main_task | main_task._get_all_subtasks()).mapped("name") + # Cancel and reconfirm the sale order + so.with_context(disable_cancel_warning=True).action_cancel() + + so.action_draft() + with Form(so) as so_form: + so_form.partner_shipping_id = partner_2 + so_form.save() + + so = so_form.record + so.action_confirm() + + self.assertEqual(so.tasks_count, 1, "Should only have 1 task after reconfirm") + self.assertEqual( + so.tasks_ids, + main_task, + "Main task should still be the only one linked to SO", + ) + # Get new tasks + new_main_task = sol.task_id + self.assertEqual( + new_main_task, main_task, "New main task should be same as old" + ) + + new_subtasks = new_main_task.child_ids + self.assertEqual( + len(new_subtasks), 2, "Should still have 2 subtasks after reconfirmation" + ) + new_task_names = (new_main_task | new_main_task._get_all_subtasks()).mapped( + "name" + ) + self.assertEqual( + new_task_names, original_task_names, "New task names should be the same" + ) + + # Verify task hierarchy is maintained + self.assertEqual( + new_main_task.project_id, + initial_project, + "New main task should have same project", + ) + + for subtask in new_subtasks: + self.assertEqual( + subtask.project_id, + initial_project, + "New subtask should maintain same project as main task", + ) + self.assertFalse( + subtask.sale_order_id, "New subtask should not be linked to sale order" + ) + self.assertFalse( + subtask.sale_line_id, + "New subtask should not be linked to sale order line", + ) + + # Verify subtask names are maintained + self.assertEqual( + sorted(new_subtasks.mapped("name")), + sorted(initial_subtask_names), + "Subtask names should be maintained after reconfirmation", + )