forked from Mapan/odoo17e
233 lines
9.7 KiB
Python
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)
|