Odoo18-Base/addons/phone_validation/tests/test_phonenumbers.py

63 lines
2.6 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.phone_validation.tools import phone_validation
from odoo.exceptions import UserError
from odoo.tests import tagged
from odoo.tests.common import BaseCase
@tagged('phone_validation')
class TestPhonenumbers(BaseCase):
def test_country_code_falsy(self):
self.assertEqual(
phone_validation.phone_format('0456998877', 'BE', '32', force_format='E164'),
'+32456998877'
)
# no country code -> UserError, no internal traceback
with self.assertRaises(UserError):
self.assertEqual(
phone_validation.phone_format('0456998877', None, '32', force_format='E164'),
'+32456998877'
)
def test_get_region_data_for_number(self):
for source, (exp_code, exp_national_number, exp_phone_code) in zip(
[
'+32456998877', # all hail Philippe
'+1-613-555-0177', # canada, same phone_code as US
'+1-202-555-0124', # us, same phone_code as CA
],
[
('BE', '456998877', '32'),
('CA', '6135550177', '1'),
('US', '2025550124', '1'),
],
):
with self.subTest(source=source):
self.assertDictEqual(
phone_validation.phone_get_region_data_for_number(source),
{
'code': exp_code,
'national_number': exp_national_number,
'phone_code': exp_phone_code,
}
)
def test_phone_format_e164_brazil(self):
""" In the new brazilian phone numbers system, phone numbers add a '9'
in front of the last 8 digits of mobile numbers.
Phonenumbers metadata is patched in odoo, however, when E164 is selected,
phone numbers aren't formatted, thus patched metadata not being applied.
See format_number in phonenumbers "Early exit for E164 case"
"""
for number, expected_number in [
('11 6123 4560', '+5511961234560'), # mobile number, must have 9 added
('+55 11 6123 4561', '+5511961234561'), # mobile number, must have 9 added
('11 2345 6789', '+551123456789'), # landline, must NOT have 9 added
('+55 11 2345 6798', '+551123456798'), # landline, must NOT have 9 added
]:
res = phone_validation.phone_format(number, 'BR', '55', force_format='E164')
self.assertEqual(res, expected_number)