diff --git a/addons/crm/tests/common.py b/addons/crm/tests/common.py index fd5cdd5632b..2e299d7eb07 100644 --- a/addons/crm/tests/common.py +++ b/addons/crm/tests/common.py @@ -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" ', + '"Philip, J. Fry" ', + '"Turanga Leela" ', + ] + 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({ diff --git a/addons/crm/tests/test_crm_lead.py b/addons/crm/tests/test_crm_lead.py index 48aebecc9e9..667a1a6db16 100644 --- a/addons/crm/tests/test_crm_lead.py +++ b/addons/crm/tests/test_crm_lead.py @@ -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" ' 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): 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({