diff options
| author | Thibault Delavallée <tde@odoo.com> | 2021-03-15 09:43:55 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2021-03-15 11:34:03 +0000 |
| commit | 9733c22d0645459a0e5f280f59242dd31070d9b2 (patch) | |
| tree | 5858593c99a896e1255b7247ee0f49bed9038eb6 | |
| parent | ab189bbaa723003223fab5b7f58044fd5ef021cd (diff) | |
[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
| -rw-r--r-- | addons/crm/tests/common.py | 34 | ||||
| -rw-r--r-- | addons/crm/tests/test_crm_lead.py | 64 | ||||
| -rw-r--r-- | addons/crm/tests/test_crm_lead_convert.py | 1 |
3 files changed, 80 insertions, 19 deletions
diff --git a/addons/crm/tests/common.py b/addons/crm/tests/common.py index 5e8e18251d4..cc880bad7ca 100644 --- a/addons/crm/tests/common.py +++ b/addons/crm/tests/common.py @@ -118,9 +118,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', @@ -129,8 +152,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, @@ -143,13 +166,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': cls.env.ref('base.us').id, - 'mobile': '+1 202 555 0999', 'zip': '97648', }) diff --git a/addons/crm/tests/test_crm_lead.py b/addons/crm/tests/test_crm_lead.py index 8897aa3e845..66317593391 100644 --- a/addons/crm/tests/test_crm_lead.py +++ b/addons/crm/tests/test_crm_lead.py @@ -216,26 +216,47 @@ 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.ribbon_message) lead_form.save() - self.assertEqual(partner.phone, partner_phone) - self.assertEqual(lead.phone, partner_phone_formatted) - self.assertEqual(lead.phone_sanitized, partner_phone_sanitized) - - # writing on the lead field must change the partner field + 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') + + # 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 @@ -251,13 +272,28 @@ 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.assertIn('the customer email and phone number will', lead_form.ribbon_message) 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): diff --git a/addons/crm/tests/test_crm_lead_convert.py b/addons/crm/tests/test_crm_lead_convert.py index c381afdf30a..63a81cc5de5 100644 --- a/addons/crm/tests/test_crm_lead_convert.py +++ b/addons/crm/tests/test_crm_lead_convert.py @@ -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({ |
