Odoo18-Base/addons/event_crm/tests/test_crm_lead_merge.py
2025-03-10 11:12:23 +07:00

84 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.crm.tests.test_crm_lead_merge import TestLeadMergeCommon
from odoo.addons.event_crm.tests.common import TestEventCrmCommon
from odoo.tests.common import tagged, users
@tagged('lead_manage')
class TestLeadCrmMerge(TestLeadMergeCommon, TestEventCrmCommon):
@users('user_sales_manager')
def test_merge_different_events_and_update(self):
"""Check that merging leads related to different events works and keeps the sync working.
If leads are merged after being linked to registrations on different events, sync should
still be able to pick values to set on the lead.
"""
other_event = self.env['event.event'].sudo().create({
'name': 'TestOtherEvent',
'date_tz': 'Europe/Brussels',
})
self.test_rule_order_done.event_registration_filter = repr(
[('name', 'like', 'test-send-email-on-leads-with-multiple-events-_')]
)
# create registrations and check rule generated leads
registrations = self.env['event.registration'].sudo().create([{
'email': self.event_customer.email,
'event_id': self.event_0.id,
'name': 'test-send-email-on-leads-with-multiple-events-1',
'partner_id': False,
'state': 'done',
}, {
'email': self.event_customer.email,
'event_id': other_event.id,
'name': 'test-send-email-on-leads-with-multiple-events-2',
'partner_id': False,
'state': 'done',
}])
self.assertTrue(registrations[0].lead_ids, "Order rule should have created leads for both registrations")
self.assertTrue(registrations[1].lead_ids, "Order rule should have created leads for both registrations")
self.assertFalse(
registrations[0].lead_ids & registrations[1].lead_ids,
"Different events should create different leads"
)
self.assertFalse(
registrations.lead_ids.partner_id,
"Leads are expected to have no partner, like the original registration"
)
# merge into one lead with multiple registrations
final_lead = registrations.lead_ids._merge_opportunity(auto_unlink=False, max_length=None)
self.assertEqual(final_lead.registration_ids, registrations)
# update customer to trigger sync
registrations[0].partner_id = self.event_customer
self.assertEqual(registrations.lead_ids.partner_id, registrations[0].partner_id)
@users('user_sales_manager')
def test_merge_method_dependencies(self):
""" Test if dependences for leads are not lost while merging leads. In
this test leads are ordered as
lead_w_contact -----------lead---seq=30
lead_w_email -------------lead---seq=3
lead_1 -------------------lead---seq=1
lead_w_partner_company ---lead---seq=1----------------registrations
lead_w_partner -----------lead---seq=False
"""
TestLeadMergeCommon.merge_fields.append('registration_ids')
registration = self.env['event.registration'].sudo().create({
'partner_id': self.event_customer.id,
'event_id': self.event_0.id,
'lead_ids': [(4, self.lead_w_partner_company.id)],
})
self.assertEqual(self.lead_w_partner_company.registration_ids, registration)
leads = self.env['crm.lead'].browse(self.leads.ids)._sort_by_confidence_level(reverse=True)
with self.assertLeadMerged(self.lead_w_contact, leads,
name=self.lead_w_contact.name,
registration_ids=registration
):
leads._merge_opportunity(auto_unlink=False, max_length=None)