コード例 #1
0
ファイル: test_crm_lead.py プロジェクト: mausvt/flectra
    def test_crm_lead_partner_sync_email_phone_corner_cases(self):
        """ Test corner cases of email and phone sync (False versus '', formatting
        differences, wrong input, ...) """
        test_email = '*****@*****.**'
        lead = self.lead_1.with_user(self.env.user)
        contact = self.env['res.partner'].create({
            'name': 'NoContact Partner',
            'phone': '',
            'email': '',
            'mobile': '',
        })

        lead_form = Form(lead)
        self.assertEqual(lead_form.email_from, test_email)
        self.assertFalse(lead_form.ribbon_message)

        # email: False versus empty string
        lead_form.partner_id = contact
        self.assertIn('the customer email', lead_form.ribbon_message)
        lead_form.email_from = ''
        self.assertFalse(lead_form.ribbon_message)
        lead_form.email_from = False
        self.assertFalse(lead_form.ribbon_message)

        # phone: False versus empty string
        lead_form.phone = '+1 202-555-0888'
        self.assertIn('the customer phone', lead_form.ribbon_message)
        lead_form.phone = ''
        self.assertFalse(lead_form.ribbon_message)
        lead_form.phone = False
        self.assertFalse(lead_form.ribbon_message)

        # email/phone: formatting should not trigger ribbon
        lead.write({
            'email_from': '"My Name" <%s>' % test_email,
            'phone': '+1 202-555-0888',
        })
        contact.write({
            'email': '"My Name" <%s>' % test_email,
            'phone': '+1 202-555-0888',
        })

        lead_form = Form(lead)
        self.assertFalse(lead_form.ribbon_message)
        lead_form.partner_id = contact
        self.assertFalse(lead_form.ribbon_message)
        lead_form.email_from = '"Another Name" <%s>' % test_email  # same email normalized
        self.assertFalse(lead_form.ribbon_message,
                         'Formatting-only change should not trigger write')
        lead_form.phone = '2025550888'  # same number but another format
        self.assertFalse(lead_form.ribbon_message,
                         'Formatting-only change should not trigger write')

        # wrong value are also propagated
        lead_form.phone = '666 789456789456789456'
        self.assertIn('the customer phone', lead_form.ribbon_message)
コード例 #2
0
ファイル: test_crm_lead.py プロジェクト: mausvt/flectra
    def test_crm_lead_partner_sync_email_phone(self):
        """ Specifically test synchronize between a lead and its partner about
        phone and email fields. Phone especially has some corner cases due to
        automatic formatting (notably with onchange in form view). """
        lead, partner = self.lead_1.with_user(self.env.user), self.contact_2
        lead_form = Form(lead)

        # reset partner phone to a local number and prepare formatted / sanitized values
        partner_phone, partner_mobile = self.test_phone_data[
            2], self.test_phone_data[1]
        partner_phone_formatted = phone_format(partner_phone, 'US', '1')
        partner_phone_sanitized = phone_format(partner_phone,
                                               'US',
                                               '1',
                                               force_format='E164')
        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_phone_data_sanitized[2])
        self.assertEqual(partner_mobile_formatted, '+1 202-555-0999')
        self.assertEqual(partner_mobile_sanitized,
                         self.test_phone_data_sanitized[1])
        # ensure initial data
        self.assertEqual(partner.phone, partner_phone)
        self.assertEqual(partner.mobile, partner_mobile)
        self.assertEqual(partner.email, partner_email)

        # 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,
                         '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,
                         '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')

        # for email_from, if only formatting differs, warning ribbon should
        # not appear and email on partner should not be updated
        lead_form.email_from = '"Hermes Conrad" <%s>' % partner_email_normalized
        self.assertFalse(lead_form.ribbon_message)
        lead_form.save()
        self.assertEqual(lead_form.partner_id.email, partner_email)

        # LEAD/PARTNER SYNC: lead updates partner
        new_email = '"John Zoidberg" <*****@*****.**>'
        new_email_normalized = '*****@*****.**'
        lead_form.email_from = new_email
        self.assertIn('the customer email will', lead_form.ribbon_message)
        new_phone = '+1 202 555 7799'
        new_phone_formatted = phone_format(new_phone, 'US', '1')
        lead_form.phone = new_phone
        self.assertEqual(lead_form.phone, new_phone_formatted)
        self.assertIn('the customer email and phone number will',
                      lead_form.ribbon_message)

        lead_form.save()
        self.assertEqual(partner.email, new_email)
        self.assertEqual(partner.email_normalized, new_email_normalized)
        self.assertEqual(partner.phone, new_phone_formatted)

        # 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')