[FW][IMP] crm: improve phone / email tests for lead / partner sync
Purpose of this commit is to improve phone, email and mobile synchronization
tests for lead / partner. Notably
* mobile is not synchronized: only a void mobile is set to partner's mobile
when changing partner. It is not synchronized back onto partner;
* email / phone are correctly synchronized;
* phone_sanitized is computed on both lead and partner based first on mobile
then on phone. It means records having the same phone numbers could have
different phone_sanitized values if mobile numbers differ;
Task ID-2461308
PR odoo/odoo#66890
X-Original-Commit odoo/odoo@0adecd9a6e
This commit is contained in:
@@ -141,9 +141,32 @@ class TestCrmCommon(TestSalesCommon, MailCase):
|
||||
cls.lead_team_1_lost.action_set_lost()
|
||||
(cls.lead_team_1_won | cls.lead_team_1_lost).flush()
|
||||
|
||||
# email / phone data
|
||||
cls.test_email_data = [
|
||||
'"Planet Express" <planet.express@test.example.com>',
|
||||
'"Philip, J. Fry" <philip.j.fry@test.example.com>',
|
||||
'"Turanga Leela" <turanga.leela@test.example.com>',
|
||||
]
|
||||
cls.test_email_data_normalized = [
|
||||
'planet.express@test.example.com',
|
||||
'philip.j.fry@test.example.com',
|
||||
'turanga.leela@test.example.com',
|
||||
]
|
||||
cls.test_pĥone_data = [
|
||||
'+1 202 555 0122', # formatted US number
|
||||
'202 555 0999', # local US number
|
||||
'202 555 0888', # local US number
|
||||
]
|
||||
cls.test_pĥone_data_sanitized = [
|
||||
'+12025550122',
|
||||
'+12025550999',
|
||||
'+12025550888',
|
||||
]
|
||||
|
||||
# create some test contact and companies
|
||||
cls.contact_company_1 = cls.env['res.partner'].create({
|
||||
'name': 'Planet Express',
|
||||
'email': 'planet.express@test.example.com',
|
||||
'email': cls.test_email_data[0],
|
||||
'is_company': True,
|
||||
'street': '57th Street',
|
||||
'city': 'New New York',
|
||||
@@ -152,8 +175,8 @@ class TestCrmCommon(TestSalesCommon, MailCase):
|
||||
})
|
||||
cls.contact_1 = cls.env['res.partner'].create({
|
||||
'name': 'Philip J Fry',
|
||||
'email': 'philip.j.fry@test.example.com',
|
||||
'mobile': '+1 202 555 0122',
|
||||
'email': cls.test_email_data[1],
|
||||
'mobile': cls.test_pĥone_data[0],
|
||||
'title': cls.env.ref('base.res_partner_title_mister').id,
|
||||
'function': 'Delivery Boy',
|
||||
'phone': False,
|
||||
@@ -166,13 +189,14 @@ class TestCrmCommon(TestSalesCommon, MailCase):
|
||||
})
|
||||
cls.contact_2 = cls.env['res.partner'].create({
|
||||
'name': 'Turanga Leela',
|
||||
'email': 'turanga.leela@test.example.com',
|
||||
'email': cls.test_email_data[2],
|
||||
'mobile': cls.test_pĥone_data[1],
|
||||
'phone': cls.test_pĥone_data[2],
|
||||
'parent_id': False,
|
||||
'is_company': False,
|
||||
'street': 'Cookieville Minimum-Security Orphanarium',
|
||||
'city': 'New New York',
|
||||
'country_id': base_us.id,
|
||||
'mobile': '+1 202 555 0999',
|
||||
'country_id': cls.env.ref('base.us').id,
|
||||
'zip': '97648',
|
||||
})
|
||||
cls.contact_company = cls.env['res.partner'].create({
|
||||
|
||||
@@ -237,27 +237,48 @@ class TestCRMLead(TestCrmCommon):
|
||||
lead, partner = self.lead_1.with_user(self.env.user), self.contact_2
|
||||
lead_form = Form(lead)
|
||||
|
||||
# reset partner phone to a local number
|
||||
partner_phone, partner_email = '202 555 0999', partner.email
|
||||
# reset partner phone to a local number and prepare formatted / sanitized values
|
||||
partner_phone, partner_mobile = self.test_pĥone_data[2], self.test_pĥone_data[1]
|
||||
partner_phone_formatted = phone_format(partner_phone, 'US', '1')
|
||||
partner_phone_sanitized = phone_format(partner_phone, 'US', '1', force_format='E164')
|
||||
self.assertEqual(partner_phone_formatted, '+1 202-555-0999')
|
||||
self.assertEqual(partner_phone_sanitized, '+12025550999')
|
||||
partner.phone = partner_phone
|
||||
partner_mobile_formatted = phone_format(partner_mobile, 'US', '1')
|
||||
partner_mobile_sanitized = phone_format(partner_mobile, 'US', '1', force_format='E164')
|
||||
partner_email, partner_email_normalized = self.test_email_data[2], self.test_email_data_normalized[2]
|
||||
self.assertEqual(partner_phone_formatted, '+1 202-555-0888')
|
||||
self.assertEqual(partner_phone_sanitized, self.test_pĥone_data_sanitized[2])
|
||||
self.assertEqual(partner_mobile_formatted, '+1 202-555-0999')
|
||||
self.assertEqual(partner_mobile_sanitized, self.test_pĥone_data_sanitized[1])
|
||||
# ensure initial data
|
||||
self.assertEqual(partner.phone, partner_phone)
|
||||
self.assertEqual(partner.mobile, partner_mobile)
|
||||
self.assertEqual(partner.email, partner_email)
|
||||
|
||||
# email & phone must be automatically set on the lead
|
||||
# LEAD/PARTNER SYNC: email and phone are propagated to lead
|
||||
# as well as mobile (who does not trigger the reverse sync)
|
||||
lead_form.partner_id = partner
|
||||
self.assertEqual(lead_form.email_from, partner_email)
|
||||
self.assertEqual(lead_form.phone, partner_phone_formatted)
|
||||
self.assertEqual(lead_form.phone, partner_phone_formatted,
|
||||
'Lead: form automatically formats numbers')
|
||||
self.assertEqual(lead_form.mobile, partner_mobile_formatted,
|
||||
'Lead: form automatically formats numbers')
|
||||
self.assertFalse(lead_form.partner_email_update)
|
||||
self.assertFalse(lead_form.partner_phone_update)
|
||||
|
||||
lead_form.save()
|
||||
self.assertEqual(partner.phone, partner_phone)
|
||||
self.assertEqual(lead.phone, partner_phone_formatted)
|
||||
self.assertEqual(lead.phone_sanitized, partner_phone_sanitized)
|
||||
self.assertEqual(partner.phone, partner_phone,
|
||||
'Lead / Partner: partner values sent to lead')
|
||||
self.assertEqual(lead.email_from, partner_email,
|
||||
'Lead / Partner: partner values sent to lead')
|
||||
self.assertEqual(lead.email_normalized, partner_email_normalized,
|
||||
'Lead / Partner: equal emails should lead to equal normalized emails')
|
||||
self.assertEqual(lead.phone, partner_phone_formatted,
|
||||
'Lead / Partner: partner values (formatted) sent to lead')
|
||||
self.assertEqual(lead.mobile, partner_mobile_formatted,
|
||||
'Lead / Partner: partner values (formatted) sent to lead')
|
||||
self.assertEqual(lead.phone_sanitized, partner_mobile_sanitized,
|
||||
'Lead: phone_sanitized computed field on mobile')
|
||||
|
||||
# writing on the lead field must change the partner field
|
||||
# LEAD/PARTNER SYNC: lead updates partner
|
||||
new_email = '"John Zoidberg" <john.zoidberg@test.example.com>'
|
||||
new_email_normalized = 'john.zoidberg@test.example.com'
|
||||
lead_form.email_from = new_email
|
||||
@@ -274,14 +295,29 @@ class TestCRMLead(TestCrmCommon):
|
||||
self.assertEqual(partner.email_normalized, new_email_normalized)
|
||||
self.assertEqual(partner.phone, new_phone_formatted)
|
||||
|
||||
# resetting lead values also resets partner
|
||||
lead_form.email_from, lead_form.phone = False, False
|
||||
# LEAD/PARTNER SYNC: mobile does not update partner
|
||||
new_mobile = '+1 202 555 6543'
|
||||
new_mobile_formatted = phone_format(new_mobile, 'US', '1')
|
||||
lead_form.mobile = new_mobile
|
||||
lead_form.save()
|
||||
self.assertEqual(lead.mobile, new_mobile_formatted)
|
||||
self.assertEqual(partner.mobile, partner_mobile)
|
||||
|
||||
# LEAD/PARTNER SYNC: reseting lead values also resets partner for email
|
||||
# and phone, but not for mobile
|
||||
lead_form.email_from, lead_form.phone, lead.mobile = False, False, False
|
||||
self.assertTrue(lead_form.partner_email_update)
|
||||
self.assertTrue(lead_form.partner_phone_update)
|
||||
lead_form.save()
|
||||
self.assertFalse(partner.email)
|
||||
self.assertFalse(partner.email_normalized)
|
||||
self.assertFalse(partner.phone)
|
||||
self.assertFalse(lead.phone)
|
||||
self.assertFalse(lead.mobile)
|
||||
self.assertFalse(lead.phone_sanitized)
|
||||
self.assertEqual(partner.mobile, partner_mobile)
|
||||
self.assertEqual(partner.phone_sanitized, partner_mobile_sanitized,
|
||||
'Partner sanitized should be computed on mobile')
|
||||
|
||||
@users('user_sales_manager')
|
||||
def test_crm_lead_stages(self):
|
||||
|
||||
@@ -31,6 +31,7 @@ class TestLeadConvert(crm_common.TestLeadConvertCommon):
|
||||
@users('user_sales_manager')
|
||||
def test_lead_convert_base(self):
|
||||
""" Test base method ``convert_opportunity`` or crm.lead model """
|
||||
self.contact_2.phone = False # force Falsy to compare with mobile
|
||||
self.assertFalse(self.contact_2.phone)
|
||||
lead = self.lead_1.with_user(self.env.user)
|
||||
lead.write({
|
||||
|
||||
Reference in New Issue
Block a user