File: carriertest.py

package info (click to toggle)
python-phonenumbers 8.12.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 38,060 kB
  • sloc: python: 309,533; xml: 44,338; makefile: 119; java: 91
file content (112 lines) | stat: -rw-r--r-- 5,384 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
"""Unit tests for carrier.py"""

# Based on original Java code:
#     java/carrier/test/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapperTest.java
# Copyright (C) 2013 The Libphonenumber Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import unittest

from phonenumbers import FrozenPhoneNumber
from phonenumbers import carrier
from phonenumbers.carrier import name_for_number, name_for_valid_number, safe_display_name
from phonenumbers.util import u

# Allow override library carrier metadata with the test metadata.
REAL_CARRIER_DATA = carrier.CARRIER_DATA
REAL_CARRIER_LONGEST_PREFIX = carrier.CARRIER_LONGEST_PREFIX
from .testcarrierdata import CARRIER_DATA as TEST_CARRIER_DATA
from .testcarrierdata import CARRIER_LONGEST_PREFIX as TEST_CARRIER_LONGEST_PREFIX


def reinstate_real_carrierdata():
    """Reinstate real phone number carrier metadata"""
    carrier.CARRIER_DATA = REAL_CARRIER_DATA
    carrier.CARRIER_LONGEST_PREFIX = REAL_CARRIER_LONGEST_PREFIX


def insert_test_carrierdata():
    """Insert test carrier metadata into library"""
    carrier.CARRIER_DATA = TEST_CARRIER_DATA
    carrier.CARRIER_LONGEST_PREFIX = TEST_CARRIER_LONGEST_PREFIX


# Set up some test numbers to re-use.
AO_MOBILE1 = FrozenPhoneNumber(country_code=244, national_number=917654321)
AO_MOBILE2 = FrozenPhoneNumber(country_code=244, national_number=927654321)
AO_FIXED1 = FrozenPhoneNumber(country_code=244, national_number=22254321)
AO_FIXED2 = FrozenPhoneNumber(country_code=244, national_number=26254321)
AO_INVALID_NUMBER = FrozenPhoneNumber(country_code=244, national_number=101234)
UK_MOBILE1 = FrozenPhoneNumber(country_code=44, national_number=7387654321)
UK_MOBILE2 = FrozenPhoneNumber(country_code=44, national_number=7487654321)
UK_FIXED1 = FrozenPhoneNumber(country_code=44, national_number=1123456789)
UK_FIXED2 = FrozenPhoneNumber(country_code=44, national_number=2987654321)
UK_INVALID_NUMBER = FrozenPhoneNumber(country_code=44, national_number=7301234)
UK_PAGER = FrozenPhoneNumber(country_code=44, national_number=7601234567)
US_FIXED_OR_MOBILE = FrozenPhoneNumber(country_code=1, national_number=6502123456)
NUMBER_WITH_INVALID_COUNTRY_CODE = FrozenPhoneNumber(country_code=999, national_number=2423651234)
INTERNATIONAL_TOLL_FREE = FrozenPhoneNumber(country_code=800, national_number=12345678)

# Language/country codes
_ENGLISH = "en"
_FRENCH = "fr"


class PhoneNumberToCarrierMapperTest(unittest.TestCase):
    """Unit tests for carrier.py"""

    def setUp(self):
        insert_test_carrierdata()

    def tearDown(self):
        reinstate_real_carrierdata()

    def testGetDescriptionForMobilePortableRegion(self):
        self.assertEqual("British carrier", name_for_number(UK_MOBILE1, _ENGLISH))
        self.assertEqual(u("Brittisk operat\u00F6r"), name_for_number(UK_MOBILE1, "sv", region="SE"))
        self.assertEqual("British carrier", name_for_number(UK_MOBILE1, _FRENCH))
        # Returns an empty string because the UK implements mobile number portability.
        self.assertEqual("", safe_display_name(UK_MOBILE1, _ENGLISH))

    def testGetDescriptionForNonMobilePortableRegion(self):
        self.assertEqual("Angolan carrier", name_for_number(AO_MOBILE1, _ENGLISH))
        self.assertEqual("Angolan carrier", safe_display_name(AO_MOBILE1, _ENGLISH))

    def testGetDescriptionForFixedLineNumber(self):
        self.assertEqual("", name_for_number(AO_FIXED1, _ENGLISH))
        self.assertEqual("", name_for_number(UK_FIXED1, _ENGLISH))
        # If the carrier information is present in the files and the method
        # that assumes a valid number is used, a carrier is returned.
        self.assertEqual("Angolan fixed line carrier", name_for_valid_number(AO_FIXED2, _ENGLISH))
        self.assertEqual("", name_for_valid_number(UK_FIXED2, _ENGLISH))

    def testGetDescriptionForFixedOrMobileNumber(self):
        self.assertEqual("US carrier", name_for_number(US_FIXED_OR_MOBILE, _ENGLISH))

    def testGetDescriptionForPagerNumber(self):
        self.assertEqual("British pager", name_for_number(UK_PAGER, _ENGLISH))

    def testGetDescriptionForNumberWithNoDataFile(self):
        self.assertEqual("", name_for_number(NUMBER_WITH_INVALID_COUNTRY_CODE, _ENGLISH))
        self.assertEqual("", name_for_number(INTERNATIONAL_TOLL_FREE, _ENGLISH))
        self.assertEqual("", name_for_valid_number(NUMBER_WITH_INVALID_COUNTRY_CODE, _ENGLISH))
        self.assertEqual("", name_for_valid_number(INTERNATIONAL_TOLL_FREE, _ENGLISH))

    def testGetDescriptionForNumberWithMissingPrefix(self):
        self.assertEqual("", name_for_number(UK_MOBILE2, _ENGLISH))
        self.assertEqual("", name_for_number(AO_MOBILE2, _ENGLISH))

    def testGetDescriptionForInvalidNumber(self):
        self.assertEqual("", name_for_number(UK_INVALID_NUMBER, _ENGLISH))
        self.assertEqual("", name_for_number(AO_INVALID_NUMBER, _ENGLISH))