Passed
Push — master ( 1fe033...85608f )
by Joshua
08:13
created

PhoneNumberToCarrierMapperTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 130
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 4
dl 0
loc 130
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace libphonenumber\Tests\carrier;
4
5
use libphonenumber\PhoneNumber;
6
use libphonenumber\PhoneNumberToCarrierMapper;
7
use libphonenumber\PhoneNumberUtil;
8
9
class PhoneNumberToCarrierMapperTest extends \PHPUnit_Framework_TestCase
10
{
11
    const TEST_META_DATA_FILE_PREFIX = "/../tests/carrier/data/";
12
    private static $AO_MOBILE1;
13
    private static $AO_MOBILE2;
14
    private static $AO_FIXED1;
15
    private static $AO_FIXED2;
16
    private static $AO_INVALID_NUMBER;
17
    private static $UK_MOBILE1;
18
    private static $UK_MOBILE2;
19
    private static $UK_FIXED1;
20
    private static $UK_FIXED2;
21
    private static $UK_INVALID_NUMBER;
22
    private static $UK_PAGER;
23
    private static $US_FIXED_OR_MOBILE;
24
    private static $NUMBER_WITH_INVALID_COUNTRY_CODE;
25
    private static $INTERNATIONAL_TOLL_FREE;
26
    /**
27
     * @var PhoneNumberToCarrierMapper
28
     */
29
    protected $carrierMapper;
30
31
    public static function setUpBeforeClass()
32
    {
33
        PhoneNumberUtil::resetInstance();
34
35
        self::$AO_MOBILE1 = new PhoneNumber();
36
        self::$AO_MOBILE1->setCountryCode(244)->setNationalNumber(917654321);
37
38
        self::$AO_MOBILE2 = new PhoneNumber();
39
        self::$AO_MOBILE2->setCountryCode(244)->setNationalNumber(927654321);
40
41
        self::$AO_FIXED1 = new PhoneNumber();
42
        self::$AO_FIXED1->setCountryCode(244)->setNationalNumber(22254321);
43
44
        self::$AO_FIXED2 = new PhoneNumber();
45
        self::$AO_FIXED2->setCountryCode(244)->setNationalNumber(26254321);
46
47
        self::$AO_INVALID_NUMBER = new PhoneNumber();
48
        self::$AO_INVALID_NUMBER->setCountryCode(244)->setNationalNumber(101234);
49
50
        self::$UK_MOBILE1 = new PhoneNumber();
51
        self::$UK_MOBILE1->setCountryCode(44)->setNationalNumber(7387654321);
52
53
        self::$UK_MOBILE2 = new PhoneNumber();
54
        self::$UK_MOBILE2->setCountryCode(44)->setNationalNumber(7487654321);
55
56
        self::$UK_FIXED1 = new PhoneNumber();
57
        self::$UK_FIXED1->setCountryCode(44)->setNationalNumber(1123456789);
58
59
        self::$UK_FIXED2 = new PhoneNumber();
60
        self::$UK_FIXED2->setCountryCode(44)->setNationalNumber(2987654321);
61
62
        self::$UK_INVALID_NUMBER = new PhoneNumber();
63
        self::$UK_INVALID_NUMBER->setCountryCode(44)->setNationalNumber(7301234);
64
65
        self::$UK_PAGER = new PhoneNumber();
66
        self::$UK_PAGER->setCountryCode(44)->setNationalNumber(7601234567);
67
68
        self::$US_FIXED_OR_MOBILE = new PhoneNumber();
69
        self::$US_FIXED_OR_MOBILE->setCountryCode(1)->setNationalNumber(6502123456);
70
71
        self::$NUMBER_WITH_INVALID_COUNTRY_CODE = new PhoneNumber();
72
        self::$NUMBER_WITH_INVALID_COUNTRY_CODE->setCountryCode(999)->setNationalNumber(2423651234);
73
74
        self::$INTERNATIONAL_TOLL_FREE = new PhoneNumber();
75
        self::$INTERNATIONAL_TOLL_FREE->setCountryCode(800)->setNationalNumber(12345678);
76
    }
77
78
    public function setUp()
79
    {
80
        $this->carrierMapper = PhoneNumberToCarrierMapper::getInstance(self::TEST_META_DATA_FILE_PREFIX);
81
    }
82
83
    public function testGetNameForMobilePortableRegion()
84
    {
85
        $this->assertEquals("British carrier", $this->carrierMapper->getNameForNumber(self::$UK_MOBILE1, "en"));
86
        $this->assertEquals("Brittisk operat" . pack('H*', 'c3b6') . "r", $this->carrierMapper->getNameForNumber(self::$UK_MOBILE1, "sv_SE"));
87
        $this->assertEquals("British carrier", $this->carrierMapper->getNameForNumber(self::$UK_MOBILE1, "fr"));
88
        // Returns an empty string because the UK implements mobile number portability.
89
        $this->assertEquals("", $this->carrierMapper->getSafeDisplayName(self::$UK_MOBILE1, "en"));
90
    }
91
92
    public function testGetNameForNonMobilePortableRegion()
93
    {
94
        $this->assertEquals("Angolan carrier", $this->carrierMapper->getNameForNumber(self::$AO_MOBILE1, "en"));
95
        $this->assertEquals("Angolan carrier", $this->carrierMapper->getSafeDisplayName(self::$AO_MOBILE1, "en"));
96
    }
97
98
    public function testGetNameForFixedLineNumber()
99
    {
100
        $this->assertEquals("", $this->carrierMapper->getNameForNumber(self::$AO_FIXED1, "en"));
101
        $this->assertEquals("", $this->carrierMapper->getNameForNumber(self::$UK_FIXED1, "en"));
102
        // If the carrier information is present in the files and the method that assumes a valid
103
        // number is used, a carrier is returned
104
        $this->assertEquals("Angolan fixed line carrier", $this->carrierMapper->getNameForValidNumber(self::$AO_FIXED2, "en"));
105
        $this->assertEquals("", $this->carrierMapper->getNameForValidNumber(self::$UK_FIXED2, "en"));
106
    }
107
108
    public function testGetNameForFixedOrMobileNumber()
109
    {
110
        $this->assertEquals("US carrier", $this->carrierMapper->getNameForNumber(self::$US_FIXED_OR_MOBILE, "en"));
111
    }
112
113
    public function testGetNameForPagerNumber()
114
    {
115
        $this->assertEquals("British pager", $this->carrierMapper->getNameForNumber(self::$UK_PAGER, "en"));
116
    }
117
118
    public function testGetNameForNumberWithNoDataFile()
119
    {
120
        $this->assertEquals("", $this->carrierMapper->getNameForNumber(self::$NUMBER_WITH_INVALID_COUNTRY_CODE, "en"));
121
        $this->assertEquals("", $this->carrierMapper->getNameForNumber(self::$INTERNATIONAL_TOLL_FREE, "en"));
122
123
        $this->assertEquals("", $this->carrierMapper->getNameForValidNumber(self::$NUMBER_WITH_INVALID_COUNTRY_CODE, "en"));
124
        $this->assertEquals("", $this->carrierMapper->getNameForValidNumber(self::$INTERNATIONAL_TOLL_FREE, "en"));
125
    }
126
127
    public function testGetNameForNumberWithMissingPrefix()
128
    {
129
        $this->assertEquals("", $this->carrierMapper->getNameForNumber(self::$UK_MOBILE2, "en"));
130
        $this->assertEquals("", $this->carrierMapper->getNameForNumber(self::$AO_MOBILE2, "en"));
131
    }
132
133
    public function testGetNameForInvalidNumber()
134
    {
135
        $this->assertEquals("", $this->carrierMapper->getNameForNumber(self::$UK_INVALID_NUMBER, "en"));
136
        $this->assertEquals("", $this->carrierMapper->getNameForNumber(self::$AO_INVALID_NUMBER, "en"));
137
    }
138
}
139