Files
faveo/vendor/propaganistas/laravel-phone/tests/TestPhoneValidator.php
2015-12-22 14:09:23 +05:30

168 lines
6.7 KiB
PHP

<?php
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\MessageSelector;
use Symfony\Component\Translation\Loader\ArrayLoader;
use Illuminate\Validation\Validator;
use Propaganistas\LaravelPhone\PhoneValidator;
class PhoneValidatorTest extends PHPUnit_Framework_TestCase {
private $translator;
private $validator;
public function setUp()
{
$this->translator = new Translator('en', new MessageSelector());
$this->translator->addLoader('array', new ArrayLoader);
$this->validator = new Validator($this->translator, array(), array());
}
private function createPhoneValidator()
{
return new PhoneValidator();
}
private function performValidation($data)
{
$validatorData = array('field' => $data['value']);
$validatorData['field_country'] = isset($data['country']) ? $data['country'] : null;
$this->validator->setData($validatorData);
$parameters = isset($data['params']) ? explode(',',$data['params']) : array();
return $this->createPhoneValidator()
->validatePhone('field', $data['value'], $parameters, $this->validator);
}
public function testValidatePhoneWithDefaultCountryNoType()
{
// Validator with correct country value.
$this->assertTrue($this->performValidation(['value' => '016123456', 'params' => 'BE']));
// Validator with wrong country value.
$this->assertFalse($this->performValidation(['value' => '016123456', 'params' => 'NL']));
// Validator with multiple country values, one correct.
$this->assertTrue($this->performValidation(['value' => '016123456', 'params' => 'BE,NL']));
// Validator with multiple wrong country values.
$this->assertFalse($this->performValidation(['value' => '016123456', 'params' => 'DE,NL']));
}
public function testValidatePhoneWithCountryFieldNoType()
{
// Validator with correct country field supplied.
$this->assertTrue($this->performValidation(['value' => '016123456', 'country' => 'BE']));
// Validator with wrong country field supplied.
$this->assertFalse($this->performValidation(['value' => '016123456', 'country' => 'NL']));
}
public function testValidatePhoneWithDefaultCountryWithType()
{
// Validator with correct country value, correct type.
$this->assertTrue($this->performValidation(['value' => '0499123456', 'params' => 'BE,mobile']));
// Validator with correct country value, wrong type.
$this->assertFalse($this->performValidation(['value' => '016123456', 'params' => 'BE,mobile']));
// Validator with wrong country value, correct type.
$this->assertFalse($this->performValidation(['value' => '0499123456', 'params' => 'NL,mobile']));
// Validator with wrong country value, wrong type.
$this->assertFalse($this->performValidation(['value' => '016123456', 'params' => 'NL,mobile']));
// Validator with multiple country values, one correct, correct type.
$this->assertTrue($this->performValidation(['value' => '0499123456', 'params' => 'BE,NL,mobile']));
// Validator with multiple country values, one correct, wrong type.
$this->assertFalse($this->performValidation(['value' => '016123456', 'params' => 'BE,NL,mobile']));
// Validator with multiple country values, none correct, correct type.
$this->assertFalse($this->performValidation(['value' => '0499123456', 'params' => 'DE,NL,mobile']));
// Validator with multiple country values, none correct, wrong type.
$this->assertFalse($this->performValidation(['value' => '016123456', 'params' => 'DE,NL,mobile']));
}
public function testValidatePhoneWithCountryFieldWithType()
{
// Validator with correct country field supplied, correct type.
$this->assertTrue($this->performValidation(['value' => '0499123456', 'params' => 'mobile', 'country' => 'BE']));
// Validator with correct country field supplied, wrong type.
$this->assertFalse($this->performValidation(['value' => '016123456', 'params' => 'mobile', 'country' => 'BE']));
// Validator with wrong country field supplied, correct type.
$this->assertFalse($this->performValidation(['value' => '0499123456', 'params' => 'mobile', 'country' => 'NL']));
// Validator with wrong country field supplied, wrong type.
$this->assertFalse($this->performValidation(['value' => '016123456', 'params' => 'mobile', 'country' => 'NL']));
}
public function testValidatePhoneAutomaticDetectionFromInternationalInput()
{
// Validator with correct international input.
$this->assertTrue($this->performValidation(['value' => '+3216123456', 'params' => 'AUTO']));
// Validator with wrong international input.
$this->assertFalse($this->performValidation(['value' => '003216123456', 'params' => 'AUTO']));
// Validator with wrong international input.
$this->assertFalse($this->performValidation(['value' => '+321456', 'params' => 'AUTO']));
}
public function testValidatePhoneNoDefaultCountryNoCountryField()
{
$this->setExpectedException('Propaganistas\LaravelPhone\Exceptions\NoValidCountryFoundException');
// Validator with no country field or given country.
$this->performValidation(['value' => '016123456']);
// Validator with no country field or given country, wrong type.
$this->performValidation(['value' => '016123456', 'params' => 'mobile']);
// Validator with no country field or given country, correct type.
$this->performValidation(['value' => '0499123456', 'params' => 'mobile']);
// Validator with no country field or given country, correct type, faulty parameter.
$this->performValidation(['value' => '0499123456', 'params' => 'mobile,xyz']);
}
public function testValidatePhoneFaultyParameters()
{
$this->setExpectedException('Propaganistas\LaravelPhone\Exceptions\InvalidParameterException');
// Validator with given country, correct type, faulty parameter.
$this->performValidation(['value' => '016123456', 'params' => 'BE,mobile,xyz']);
// Validator with country field, correct type, faulty parameter.
$this->performValidation(['value' => '016123456', 'params' => 'mobile,xyz', 'country' => 'BE']);
}
public function testPhoneFormatHelperFunction()
{
// Test landline number without format parameter.
$actual = phone_format('016123456', 'BE');
$expected = '+32 16 12 34 56';
$this->assertEquals($expected, $actual);
// Test landline number with format parameter.
$actual = phone_format('016123456', 'BE', \libphonenumber\PhoneNumberFormat::NATIONAL);
$expected = '016 12 34 56';
$this->assertEquals($expected, $actual);
// Test mobile number without format parameter.
$actual = phone_format('0499123456', 'BE');
$expected = '+32 499 12 34 56';
$this->assertEquals($expected, $actual);
// Test mobile number with format parameter.
$actual = phone_format('0499123456', 'BE', \libphonenumber\PhoneNumberFormat::NATIONAL);
$expected = '0499 12 34 56';
$this->assertEquals($expected, $actual);
}
}