1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/crm_helpdesk/tests/test_crm_helpdesk_convert_ticket.py
2024-12-10 09:04:09 +07:00

233 lines
9.7 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.crm.tests import common as crm_common
from odoo.exceptions import AccessError
from odoo.tests.common import tagged, users
@tagged('lead_manage')
class TestLeadConvertToTicket(crm_common.TestCrmCommon):
@classmethod
def setUpClass(cls):
super(TestLeadConvertToTicket, cls).setUpClass()
cls.test_team = cls.env['helpdesk.team'].create({
'name': 'Test HD Team',
'stage_ids': [(0, 0, {
'name': 'New',
'sequence': 0,
'template_id': cls.env.ref('helpdesk.new_ticket_request_email_template').id
})],
})
cls.test_ticket_type = cls.env['helpdesk.ticket.type'].create({
'name': 'Test Type'
})
# UTM fields
cls.test_campaign = cls.env["utm.campaign"].create({
'name': 'A test UTM campaign',
})
cls.test_medium = cls.env["utm.medium"].create({
'name': 'A test UTM medium'
})
cls.test_source = cls.env["utm.source"].create({
'name': 'A test UTM source'
})
cls.lead_1.write({
'user_id': cls.user_sales_salesman.id,
'description': 'Lead Description',
'campaign_id': cls.test_campaign.id,
'medium_id': cls.test_medium.id,
'source_id': cls.test_source.id
})
def assertTicketLeadConvertData(self, ticket, lead, team, ticket_type, partner):
# lead update: archived
self.assertFalse(lead.active)
# new ticket: data from lead and convert options
self.assertEqual(ticket.description, lead.description)
self.assertEqual(ticket.partner_id, partner)
self.assertEqual(ticket.partner_email, lead.email_from if lead.email_from else partner.email)
self.assertIn(partner, ticket.message_partner_ids)
self.assertEqual(ticket.partner_email, lead.email_from if lead.email_from else partner.email)
self.assertEqual(ticket.partner_phone, lead.phone if lead.phone else partner.phone or lead.mobile or partner.mobile)
self.assertEqual(ticket.partner_name, partner.name)
self.assertEqual(ticket.ticket_type_id, ticket_type)
self.assertFalse(ticket.user_id)
self.assertEqual(ticket.campaign_id, lead.campaign_id)
self.assertEqual(ticket.medium_id, lead.medium_id)
self.assertEqual(ticket.source_id, lead.source_id)
@users('user_sales_salesman')
def test_lead_convert_to_ticket_corner_cases(self):
# admin updates salesman to have helpdesk rights
self.user_sales_salesman.write({'groups_id': [(4, self.env.ref('helpdesk.group_helpdesk_user').id)]})
lead = self.lead_1.with_user(self.env.user)
# invoke wizard and apply it
convert = self.env['crm.lead.convert2ticket'].with_context({
'active_model': 'crm.lead',
'active_id': lead.id
}).create({
'team_id': self.test_team.id,
'ticket_type_id': self.test_ticket_type.id
})
action = convert.action_lead_to_helpdesk_ticket()
# salesmen with helpdesk rights redirected to ticket
ticket = self.env['helpdesk.ticket'].search([('name', '=', lead.name)])
self.assertEqual(action['res_model'], ticket._name)
# admin remove rights on salesman
lead.write({'active': True})
self.user_sales_salesman.write({'groups_id': [(3, self.env.ref('sales_team.group_sale_salesman').id)]})
# sneaky monkey tries to invoke the wizard
with self.assertRaises(AccessError):
convert = self.env['crm.lead.convert2ticket'].with_context({
'active_model': 'crm.lead',
'active_id': self.lead_1.id
}).create({
'team_id': self.test_team.id,
'ticket_type_id': self.test_ticket_type.id
})
@users('user_sales_salesman')
def test_lead_convert_to_ticket_w_email_rights(self):
""" Base test for ticket convertion: internal details, based on email """
lead = self.lead_1.with_user(self.env.user)
self.assertEqual(lead.partner_id, self.env['res.partner'])
new_partner = self.env['res.partner'].search([('email_normalized', '=', 'amy.wong@test.example.com')])
self.assertEqual(new_partner, self.env['res.partner'])
msg = lead.message_post(body='Youplaboum', subtype_xmlid='mail.mt_comment', message_type='comment')
lead_message_ids = lead.message_ids
# ensure basic rights on team and ticket type
test_team = self.env['helpdesk.team'].search([('id', '=', self.test_team.id)])
test_ticket_type = self.env['helpdesk.ticket.type'].search([('id', '=', self.test_ticket_type.id)])
# invoke wizard and apply it
convert = self.env['crm.lead.convert2ticket'].with_context({
'active_model': 'crm.lead',
'active_id': self.lead_1.id
}).create({
'team_id': test_team.id,
'ticket_type_id': test_ticket_type.id
})
action = convert.action_lead_to_helpdesk_ticket()
# salesmen redirected to ticket
self.assertEqual(action['res_model'], 'helpdesk.ticket')
# check created ticket coherency
ticket = self.env['helpdesk.ticket'].sudo().search([('name', '=', lead.name)])
new_partner = self.env['res.partner'].search([('email_normalized', '=', 'amy.wong@test.example.com')])
self.assertTrue(len(new_partner), 1)
self.assertTicketLeadConvertData(ticket, lead, test_team, test_ticket_type, new_partner)
# check discussion thread transfer
self.assertTrue(all(message in ticket.message_ids for message in lead_message_ids))
self.assertIn(msg, ticket.message_ids)
@users('user_sales_salesman')
def test_lead_convert_to_ticket_w_name(self):
lead = self.lead_1.with_user(self.env.user)
lead.write({
'name': 'planet EX',
'email_from': False,
'contact_name': False,
})
self.assertEqual(lead.partner_id, self.env['res.partner'])
# invoke wizard and apply it
convert = self.env['crm.lead.convert2ticket'].with_context({
'active_model': 'crm.lead',
'active_id': self.lead_1.id
}).create({
'team_id': self.test_team.id,
'ticket_type_id': self.test_ticket_type.id
})
convert.action_lead_to_helpdesk_ticket()
# check created ticket coherency
ticket = self.env['helpdesk.ticket'].sudo().search([('name', '=', lead.name)])
self.assertTicketLeadConvertData(ticket, lead, self.test_team, self.test_ticket_type, self.contact_company_1)
@users('user_sales_salesman')
def test_lead_convert_to_ticket_w_partner(self):
lead = self.lead_1.with_user(self.env.user)
lead.write({
'partner_id': self.contact_1.id,
})
# ensure partner updated lead information
self.assertEqual(lead.partner_id, self.contact_1)
self.assertEqual(lead.email_from, self.contact_1.email)
self.assertEqual(lead.partner_name, self.contact_company_1.name)
self.assertEqual(lead.contact_name, self.contact_1.name)
# ensure partner did not void existing information
self.assertEqual(lead.phone, '+1 202 555 9999')
# invoke wizard and apply it
convert = self.env['crm.lead.convert2ticket'].with_context({
'active_model': 'crm.lead',
'active_id': self.lead_1.id
}).create({
'team_id': self.test_team.id,
'ticket_type_id': self.test_ticket_type.id
})
convert.action_lead_to_helpdesk_ticket()
# check created ticket coherency
ticket = self.env['helpdesk.ticket'].sudo().search([('name', '=', lead.name)])
self.assertTicketLeadConvertData(ticket, lead, self.test_team, self.test_ticket_type, self.contact_1)
@users('user_sales_salesman')
def test_lead_convert_to_ticket_w_partner_name(self):
lead = self.lead_1.with_user(self.env.user)
lead.write({
'email_from': False,
'partner_name': self.contact_1.name,
})
self.assertEqual(lead.partner_id, self.env['res.partner'])
# invoke wizard and apply it
convert = self.env['crm.lead.convert2ticket'].with_context({
'active_model': 'crm.lead',
'active_id': self.lead_1.id
}).create({
'team_id': self.test_team.id,
'ticket_type_id': self.test_ticket_type.id
})
convert.action_lead_to_helpdesk_ticket()
# check created ticket coherency
ticket = self.env['helpdesk.ticket'].sudo().search([('name', '=', lead.name)])
self.assertTicketLeadConvertData(ticket, lead, self.test_team, self.test_ticket_type, self.contact_1)
@users('user_sales_salesman')
def test_lead_convert_to_ticket_w_contact_name(self):
lead = self.lead_1.with_user(self.env.user)
lead.write({
'email_from': False,
'contact_name': 'TURANGA',
})
self.assertEqual(lead.partner_id, self.env['res.partner'])
# invoke wizard and apply it
convert = self.env['crm.lead.convert2ticket'].with_context({
'active_model': 'crm.lead',
'active_id': self.lead_1.id
}).create({
'team_id': self.test_team.id,
'ticket_type_id': self.test_ticket_type.id
})
convert.action_lead_to_helpdesk_ticket()
# check created ticket coherency
ticket = self.env['helpdesk.ticket'].sudo().search([('name', '=', lead.name)])
self.assertTicketLeadConvertData(ticket, lead, self.test_team, self.test_ticket_type, self.contact_2)