From c966af334303a889a42964d2b186e5379489a4ca Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Thu, 3 Aug 2023 09:51:02 -0400 Subject: [PATCH] bemade_fsm: Explicitly set user_ids=False on visit task creation. Fixes Dur-Pro/bemade-addons#90 --- bemade_fsm/models/sale_order.py | 1 + bemade_fsm/tests/test_bemade_fsm_common.py | 24 +++++++++++++ bemade_fsm/tests/test_fsm_visit.py | 31 ++--------------- bemade_fsm/tests/test_sale_order.py | 39 +++++++++++++++++----- 4 files changed, 57 insertions(+), 38 deletions(-) diff --git a/bemade_fsm/models/sale_order.py b/bemade_fsm/models/sale_order.py index e557d4d..e7b9b37 100644 --- a/bemade_fsm/models/sale_order.py +++ b/bemade_fsm/models/sale_order.py @@ -216,6 +216,7 @@ class SaleOrderLine(models.Model): 'visit_id': self.visit_id.id, 'date_deadline': self.visit_id.approx_date, 'planned_hours': self.task_duration, + 'user_ids': False, # Force to empty or it uses the current user }) return task diff --git a/bemade_fsm/tests/test_bemade_fsm_common.py b/bemade_fsm/tests/test_bemade_fsm_common.py index 2abc0e9..613db7b 100644 --- a/bemade_fsm/tests/test_bemade_fsm_common.py +++ b/bemade_fsm/tests/test_bemade_fsm_common.py @@ -168,3 +168,27 @@ class BemadeFSMBaseTest(TransactionCase): names.pop(0) parent = subtasks[0] return template + + def _invoice_sale_order(self, so): + wiz = self.env['sale.advance.payment.inv'].with_context( + {'active_ids': [so.id]}).create({}) + wiz.create_invoices() + inv = so.invoice_ids[-1] + inv.action_post() + return inv + + def _generate_visit(self, sale_order, label="Test Label"): + return self.env['bemade_fsm.visit'].create([{ + 'sale_order_id': sale_order.id, + 'label': label, + }]) + + def _generate_so_with_one_visit_two_lines(self): + so = self._generate_sale_order() + visit = self._generate_visit(sale_order=so) + sol1 = self._generate_sale_order_line(sale_order=so) + sol2 = self._generate_sale_order_line(sale_order=so) + visit.so_section_id.sequence = 1 + sol1.sequence = 2 + sol2.sequence = 3 + return so, visit, sol1, sol2 diff --git a/bemade_fsm/tests/test_fsm_visit.py b/bemade_fsm/tests/test_fsm_visit.py index acc00b4..23bd99e 100644 --- a/bemade_fsm/tests/test_fsm_visit.py +++ b/bemade_fsm/tests/test_fsm_visit.py @@ -57,13 +57,7 @@ class FSMVisitTest(BemadeFSMBaseTest): self.assertTrue(visit.is_invoiced) def test_visit_groups_section_tasks_when_confirmed(self): - so = self._generate_sale_order() - visit = self._generate_visit(sale_order=so) - sol1 = self._generate_sale_order_line(sale_order=so) - sol2 = self._generate_sale_order_line(sale_order=so) - visit.so_section_id.sequence = 1 - sol1.sequence = 2 - sol2.sequence = 3 + so, visit, sol1, sol2 = self._generate_so_with_one_visit_two_lines() so.action_confirm() @@ -74,15 +68,7 @@ class FSMVisitTest(BemadeFSMBaseTest): visit_subtasks and sol1.task_id in visit_subtasks and sol2.task_id in visit_subtasks) def test_visit_task_gets_correct_due_date_on_confirmation(self): - partner = self._generate_partner() - so = self._generate_sale_order(partner=partner) - visit = self._generate_visit(sale_order=so) - sol1 = self._generate_sale_order_line(sale_order=so, qty=4.0) - sol2 = self._generate_sale_order_line(sale_order=so, qty=4.0) - visit.approx_date = date.today() + timedelta(days=7) - visit.so_section_id.sequence = 1 - sol1.sequence = 2 - sol2.sequence = 3 + so, visit, sol1, sol2 = self._generate_so_with_one_visit_two_lines() so.action_confirm() @@ -115,16 +101,3 @@ class FSMVisitTest(BemadeFSMBaseTest): self.assertEqual(len(so.order_line), 3) - def _invoice_sale_order(self, so): - wiz = self.env['sale.advance.payment.inv'].with_context( - {'active_ids': [so.id]}).create({}) - wiz.create_invoices() - inv = so.invoice_ids[-1] - inv.action_post() - return inv - - def _generate_visit(self, sale_order, label="Test Label"): - return self.env['bemade_fsm.visit'].create([{ - 'sale_order_id': sale_order.id, - 'label': label, - }]) diff --git a/bemade_fsm/tests/test_sale_order.py b/bemade_fsm/tests/test_sale_order.py index e1202d1..99cfdc0 100644 --- a/bemade_fsm/tests/test_sale_order.py +++ b/bemade_fsm/tests/test_sale_order.py @@ -25,7 +25,8 @@ class TestSalesOrder(BemadeFSMBaseTest): partner = self._generate_partner() so = self._generate_sale_order(partner=partner) parent_task = self._generate_task_template(structure=[2, 1], - names=['Parent Template', 'Child Template', + names=['Parent Template', + 'Child Template', 'Grandchild Template']) child_task_1 = parent_task.subtasks[0] child_task_2 = parent_task.subtasks[1] @@ -39,7 +40,8 @@ class TestSalesOrder(BemadeFSMBaseTest): self.assertTrue(parent_task.name in sol.task_id.name) self.assertTrue(child_task_1.name in sol.task_id.child_ids[0].name) self.assertTrue(child_task_2.name in sol.task_id.child_ids[1].name) - self.assertTrue(sol.task_id.child_ids[0].child_ids and len(sol.task_id.child_ids[0].child_ids) == 1) + self.assertTrue(sol.task_id.child_ids[0].child_ids and len( + sol.task_id.child_ids[0].child_ids) == 1) self.assertTrue(grandchild_task.name in sol.task_id.child_ids.child_ids[0].name) def test_order_confirmation_single_equipment(self): @@ -65,10 +67,14 @@ class TestSalesOrder(BemadeFSMBaseTest): partner = self._generate_partner() for i in range(5): self._generate_equipment(partner=partner) - sale_order = self._generate_sale_order(partner=partner) # No default equipment since more than 3 on partner - sol1, sol2, sol3 = [self._generate_sale_order_line(sale_order=sale_order) for i in range(3)] - sol1.equipment_ids = [Command.set([partner.equipment_ids[i].id for i in range(2)])] - sol3.equipment_ids = [Command.set([partner.equipment_ids[i].id for i in range(2, 5)])] + sale_order = self._generate_sale_order( + partner=partner) # No default equipment since more than 3 on partner + sol1, sol2, sol3 = [self._generate_sale_order_line(sale_order=sale_order) for i + in range(3)] + sol1.equipment_ids = [ + Command.set([partner.equipment_ids[i].id for i in range(2)])] + sol3.equipment_ids = [ + Command.set([partner.equipment_ids[i].id for i in range(2, 5)])] sale_order.action_confirm() @@ -76,7 +82,6 @@ class TestSalesOrder(BemadeFSMBaseTest): self.assertEqual(sol2.equipment_ids, sol2.task_id.equipment_ids) self.assertEqual(sol3.equipment_ids, sol3.task_id.equipment_ids) - def test_task_template_with_equipment_flow(self): """ The equipment selected on a task template should flow down to the task created on SO confirmation.""" partner = self._generate_partner() @@ -167,7 +172,8 @@ class TestSalesOrder(BemadeFSMBaseTest): """ Marking the task linked to an SO line should mark the line delivered. Marking sub-tasks done should not.""" partner = self._generate_partner() so = self._generate_sale_order(partner=partner) - task_template = self._generate_task_template(structure=[2], names=["Parent Task", "Subtask"]) + task_template = self._generate_task_template(structure=[2], + names=["Parent Task", "Subtask"]) product = self._generate_product(task_template=task_template) sol = self._generate_sale_order_line(so, product=product) so.action_confirm() @@ -230,6 +236,20 @@ class TestSalesOrder(BemadeFSMBaseTest): self.assertEqual(task.site_contacts, so.site_contacts) self.assertEqual(task.work_order_contacts, so.work_order_contacts) + def test_tasks_created_at_order_confirmation_have_no_assignees(self): + so, visit, sol1, sol2 = self._generate_so_with_one_visit_two_lines() + user = self._generate_project_user(name="User", login='login') + + # We test as a specific user since testing as root may not produce the error + so.with_user(user).action_confirm() + + visit_task = visit.task_id + subtask1 = visit_task.child_ids[0] + subtask2 = visit_task.child_ids[1] + self.assertFalse(visit_task.user_ids) + self.assertFalse(subtask1.user_ids) + self.assertFalse(subtask2.user_ids) + @tagged("-at_install", "post_install", "slow") class TestSaleOrderTour(HttpCase, TestSalesOrder): @@ -247,7 +267,8 @@ class TestSaleOrderTour(HttpCase, TestSalesOrder): def test_task_mark_to_invoice(self): # Make sure that when a manager clicks the ready to invoice button, the qty delivered is updated on the SO so = self._generate_sale_order(client_order_ref='TEST ORDER 2') - sol = self._generate_sale_order_line(so, self._generate_product(name='Test Product 3')) + sol = self._generate_sale_order_line(so, self._generate_product( + name='Test Product 3')) so.action_confirm() user = self._generate_project_manager_user('Mr. User', 'mruser') self.start_tour('/web', 'sale_order_tour', login=user.login)