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

174 lines
7.4 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.helpdesk.tests import common as helpdesk_common
from odoo.addons.mail.tests.common import mail_new_test_user
from odoo.exceptions import AccessError
from odoo.tests.common import tagged, users
@tagged('lead_manage')
class TestTicketConvertToLead(helpdesk_common.HelpdeskCommon):
@classmethod
def setUpClass(cls):
super(TestTicketConvertToLead, cls).setUpClass()
cls.helpdesk_user.write({'login': 'user_helpdesk_user'})
cls.user_sales_leads = mail_new_test_user(
cls.env, login='user_sales_leads',
name='Laetitia Sales Leads', email='crm_leads@test.example.com',
notification_type='inbox',
groups='sales_team.group_sale_salesman_all_leads,base.group_partner_manager',
)
cls.test_team = cls.env['crm.team'].create({
'name': 'Test Crm Team',
'member_ids': [(4, cls.user_sales_leads.id)]
})
# 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.test_ticket = cls.env["helpdesk.ticket"].create({
'name': 'Test Ticket',
'user_id': cls.helpdesk_user.id,
'partner_name': 'My Test Customer',
'partner_email': '"My Test Customer" <my.customer@example.com>',
'campaign_id': cls.test_campaign.id,
'team_id': False,
'medium_id': cls.test_medium.id,
'source_id': cls.test_source.id,
'company_id': cls.main_company_id
})
def assertLeadTicketConvertData(self, lead, ticket, partner, crm_team, user_id):
# ticket update: archived
self.assertFalse(ticket.active)
# new lead: data from ticket and convert options
self.assertEqual(lead.name, ticket.name)
self.assertEqual(lead.description, ticket.description)
self.assertEqual(lead.partner_id, partner)
self.assertEqual(lead.email_cc, ticket.email_cc)
self.assertEqual(lead.email_from, partner.email)
self.assertEqual(lead.phone, partner.phone)
self.assertEqual(lead.team_id, crm_team)
self.assertEqual(lead.user_id, user_id)
self.assertEqual(lead.campaign_id, ticket.campaign_id)
self.assertEqual(lead.medium_id, ticket.medium_id)
self.assertEqual(lead.source_id, ticket.source_id)
@users('user_helpdesk_user')
def test_convert_to_lead_rights(self):
# admin updates salesman to have helpdesk rights
self.helpdesk_user.write({'groups_id': [(4, self.env.ref('sales_team.group_sale_salesman_all_leads').id)]})
ticket = self.env["helpdesk.ticket"].browse(self.test_ticket.ids)
# add helpdesk user to sales team
self.test_team.write({'member_ids': [(4, self.helpdesk_user.id)]})
test_crm_team = self.env['crm.team'].browse(self.test_team.ids)
# invoke wizard and apply it
convert = self.env['helpdesk.ticket.to.lead'].with_context({
'active_model': ticket._name,
'active_id': ticket.id,
}).create({
'team_id': test_crm_team.id,
})
self.assertEqual(convert.ticket_id, ticket)
self.assertEqual(convert.user_id, self.helpdesk_user)
# update team / user
convert.update({'user_id': self.user_sales_leads.id})
action = convert.action_convert_to_lead()
# helpdesk user with salesman rights redirected to lead
lead = self.env['crm.lead'].search([('name', '=', ticket.name)])
self.assertEqual(action['res_model'], lead._name)
self.assertLeadTicketConvertData(lead, ticket, ticket.partner_id, test_crm_team, self.user_sales_leads)
# admin remove rights on helpdesk user -> wizard not invokable
ticket.write({'active': True})
self.helpdesk_user.write({'groups_id': [(3, self.env.ref('helpdesk.group_helpdesk_user').id)]})
# sneaky monkey tries to invoke the wizard
with self.assertRaises(AccessError):
convert = self.env['helpdesk.ticket.to.lead'].with_context({
'active_model': ticket._name,
'active_id': ticket.id,
}).create({
'team_id': test_crm_team.id,
})
@users('user_helpdesk_user')
def test_convert_to_lead_w_name_email(self):
""" Base test for convert: internal details, based on email """
ticket = self.env["helpdesk.ticket"].browse(self.test_ticket.ids)
# automatic partner creation on ticket model (TDE FIXME)
self.assertEqual(ticket.partner_id.name, ticket.partner_name)
self.assertEqual(ticket.partner_id.email, 'my.customer@example.com')
new_partner = self.env['res.partner'].search([('email_normalized', '=', 'my.customer@example.com')])
self.assertEqual(ticket.partner_id, new_partner)
# post a message to check thread change
msg = ticket.message_post(body='Youplaboum', subtype_xmlid='mail.mt_comment', message_type='comment')
ticket_message_ids = ticket.message_ids
# ensure basic rights on team and ticket type
test_crm_team = self.env['crm.team'].browse(self.test_team.ids)
# invoke wizard and apply it
convert = self.env['helpdesk.ticket.to.lead'].with_context({
'default_ticket_id': ticket.id,
}).create({
'team_id': test_crm_team.id,
})
self.assertEqual(convert.action, 'exist')
self.assertEqual(convert.user_id, self.env['res.users'])
action = convert.action_convert_to_lead()
# helpdesk user redirected to tickets
self.assertEqual(action['res_model'], ticket._name)
# check created lead coherency
lead = self.env['crm.lead'].sudo().search([('name', '=', ticket.name)])
self.assertLeadTicketConvertData(lead, ticket, new_partner, test_crm_team, self.env['res.users'])
# check discussion thread transfer
self.assertTrue(all(message in lead.message_ids for message in ticket_message_ids))
self.assertIn(msg, lead.message_ids)
@users('user_helpdesk_user')
def test_lead_convert_to_ticket_w_name(self):
""" Test matching partner based on name """
ticket = self.env["helpdesk.ticket"].browse(self.test_ticket.ids)
ticket.update({
'partner_id': False,
'partner_email': False,
})
new_partner = self.env['res.partner'].search([('name', '=', 'My Test Customer')])
self.assertTrue(len(new_partner))
# ensure basic rights on team and ticket type
test_crm_team = self.env['crm.team'].browse(self.test_team.ids)
# invoke wizard and apply it
convert = self.env['helpdesk.ticket.to.lead'].with_context({
'default_ticket_id': ticket.id,
}).create({
'team_id': test_crm_team.id,
})
self.assertEqual(convert.action, 'exist')
self.assertEqual(convert.partner_id, new_partner)
convert.action_convert_to_lead()
# check created lead coherency
lead = self.env['crm.lead'].sudo().search([('name', '=', ticket.name)])
self.assertLeadTicketConvertData(lead, ticket, new_partner, test_crm_team, self.env['res.users'])