# Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.addons.helpdesk.tests.common import HelpdeskCommon from odoo.tests import Form class TestHelpdeskFsm(HelpdeskCommon): def test_helpdesk_fsm(self): self.test_team.use_fsm = True ticket = self.env['helpdesk.ticket'].create({ 'name': 'test', 'partner_id': self.partner.id, 'team_id': self.test_team.id, }) task_form = Form(self.env['helpdesk.create.fsm.task'].with_context(default_helpdesk_ticket_id=ticket.id)) task_form.name = ticket.name task_form.partner_id = self.partner task = task_form.save().action_generate_task() self.assertTrue(task.is_fsm, 'The created task should be in an fsm project.') self.assertEqual(task.name, ticket.name, 'The created task should have the same name as the ticket.') self.assertEqual(task.partner_id, ticket.partner_id, 'The created task should have the same customer as the ticket.') self.assertEqual(task.helpdesk_ticket_id, ticket, 'The created task should be linked to the ticket.') task.action_fsm_validate() last_message = ticket.message_ids[0].body self.assertTrue(task.name in last_message, 'Marking the task as done should be logged on the ticket.') def test_fsm_project(self): # Enable field service on the helpdesk team self.test_team.use_fsm = True # Find the first fsm project fsm_project = self.env['project.project'].search([('is_fsm', '=', True), ('company_id', '=', self.test_team.company_id.id)], limit=1) # Default fsm_project should be the first fsm project with the oldest id self.assertEqual(self.test_team.fsm_project_id, fsm_project, "The default fsm project should be from the same company.") def test_fsm_project_multicompany(self): extra_company = self.env['res.company'].create({'name': 'Extra Company'}) fsm_project = self.env['project.project'].search([('is_fsm', '=', True), ('company_id', '=', extra_company.id)], limit=1) self.test_team.write({'company_id': extra_company.id}) self.test_team.use_fsm = True self.assertEqual(self.test_team.fsm_project_id, fsm_project, "The default fsm project should be from the same company.") def test_fsm_task_invited_user(self): invited_team = self.env['helpdesk.team'].create({ 'name': 'Test team invited internal', 'use_fsm': True, 'privacy_visibility': 'invited_internal' }) ticket = self.env['helpdesk.ticket'].with_user(self.helpdesk_manager).create({ 'name': 'Ticket', 'partner_id': self.partner.id, 'team_id': invited_team.id, 'user_id': self.helpdesk_user.id, }) ticket_form = Form(ticket) ticket = ticket_form.save() action = ticket.with_user(self.helpdesk_user).action_generate_fsm_task() # should not raise AccessError action_context = action['context'] self.assertEqual(action_context['default_project_id'], ticket.team_id.fsm_project_id.id) self.assertEqual(action_context['default_helpdesk_ticket_id'], ticket.id) def test_generate_fsm_task_no_partner(self): self.test_team.use_fsm = True ticket = self.env['helpdesk.ticket'].with_user(self.helpdesk_manager).create({ 'name': 'Ticket', 'team_id': self.test_team.id, 'user_id': self.helpdesk_user.id, }) wizard_action = ticket.action_generate_fsm_task() context = wizard_action['context'] self.assertFalse(context['default_partner_id']) wizard = self.env[wizard_action['res_model']].with_context(context).new() wizard.partner_id = self.partner task_action = wizard.action_generate_and_view_task() task = self.env['project.task'].browse(task_action['res_id']) self.assertEqual(task.project_id, wizard.project_id) self.assertTrue(task.partner_id == wizard.partner_id == ticket.partner_id)