Файл: gapps/vendor/fzaninotto/faker/test/Faker/Provider/PaymentTest.php
Строк: 121
<?php
namespace FakerTestProvider;
use FakerCalculatorIban;
use FakerCalculatorLuhn;
use FakerGenerator;
use FakerProviderBase as BaseProvider;
use FakerProviderDateTime as DateTimeProvider;
use FakerProviderPayment as PaymentProvider;
use FakerProviderPerson as PersonProvider;
class PaymentTest extends PHPUnit_Framework_TestCase
{
private $faker;
public function setUp()
{
$faker = new Generator();
$faker->addProvider(new BaseProvider($faker));
$faker->addProvider(new DateTimeProvider($faker));
$faker->addProvider(new PersonProvider($faker));
$faker->addProvider(new PaymentProvider($faker));
$this->faker = $faker;
}
public function localeDataProvider()
{
$providerPath = realpath(__DIR__ . '/../../../src/Faker/Provider');
$localePaths = array_filter(glob($providerPath . '/*', GLOB_ONLYDIR));
foreach ($localePaths as $path) {
$parts = explode('/', $path);
$locales[] = array($parts[count($parts) - 1]);
}
return $locales;
}
public function loadLocalProviders($locale)
{
$providerPath = realpath(__DIR__ . '/../../../src/Faker/Provider');
if (file_exists($providerPath.'/'.$locale.'/Payment.php')) {
$payment = "\Faker\Provider\$locale\Payment";
$this->faker->addProvider(new $payment($this->faker));
}
}
public function testCreditCardTypeReturnsValidVendorName()
{
$this->assertTrue(in_array($this->faker->creditCardType, array('Visa', 'MasterCard', 'American Express', 'Discover Card')));
}
public function creditCardNumberProvider()
{
return array(
array('Discover Card', '/^6011d{12}$/'),
array('Visa', '/^4d{12,15}$/'),
array('MasterCard', '/^5[1-5]d{14}$/')
);
}
/**
* @dataProvider creditCardNumberProvider
*/
public function testCreditCardNumberReturnsValidCreditCardNumber($type, $regexp)
{
$cardNumber = $this->faker->creditCardNumber($type);
$this->assertRegExp($regexp, $cardNumber);
$this->assertTrue(Luhn::isValid($cardNumber));
}
public function testCreditCardNumberCanFormatOutput()
{
$this->assertRegExp('/^6011-d{4}-d{4}-d{4}$/', $this->faker->creditCardNumber('Discover Card', true));
}
public function testCreditCardExpirationDateReturnsValidDateByDefault()
{
$expirationDate = $this->faker->creditCardExpirationDate;
$this->assertTrue(intval($expirationDate->format('U')) > strtotime('now'));
$this->assertTrue(intval($expirationDate->format('U')) < strtotime('+36 months'));
}
public function testRandomCard()
{
$cardDetails = $this->faker->creditCardDetails;
$this->assertEquals(count($cardDetails), 4);
$this->assertEquals(array('type', 'number', 'name', 'expirationDate'), array_keys($cardDetails));
}
protected $ibanFormats = array(
'AD' => '/^ADd{2}d{4}d{4}[A-Z0-9]{12}$/',
'AE' => '/^AEd{2}d{3}d{16}$/',
'AL' => '/^ALd{2}d{8}[A-Z0-9]{16}$/',
'AT' => '/^ATd{2}d{5}d{11}$/',
'AZ' => '/^AZd{2}[A-Z]{4}[A-Z0-9]{20}$/',
'BA' => '/^BAd{2}d{3}d{3}d{8}d{2}$/',
'BE' => '/^BEd{2}d{3}d{7}d{2}$/',
'BG' => '/^BGd{2}[A-Z]{4}d{4}d{2}[A-Z0-9]{8}$/',
'BH' => '/^BHd{2}[A-Z]{4}[A-Z0-9]{14}$/',
'BR' => '/^BRd{2}d{8}d{5}d{10}[A-Z]{1}[A-Z0-9]{1}$/',
'CH' => '/^CHd{2}d{5}[A-Z0-9]{12}$/',
'CR' => '/^CRd{2}d{3}d{14}$/',
'CY' => '/^CYd{2}d{3}d{5}[A-Z0-9]{16}$/',
'CZ' => '/^CZd{2}d{4}d{6}d{10}$/',
'DE' => '/^DEd{2}d{8}d{10}$/',
'DK' => '/^DKd{2}d{4}d{9}d{1}$/',
'DO' => '/^DOd{2}[A-Z0-9]{4}d{20}$/',
'EE' => '/^EEd{2}d{2}d{2}d{11}d{1}$/',
'ES' => '/^ESd{2}d{4}d{4}d{1}d{1}d{10}$/',
'FR' => '/^FRd{2}d{5}d{5}[A-Z0-9]{11}d{2}$/',
'GB' => '/^GBd{2}[A-Z]{4}d{6}d{8}$/',
'GE' => '/^GEd{2}[A-Z]{2}d{16}$/',
'GI' => '/^GId{2}[A-Z]{4}[A-Z0-9]{15}$/',
'GR' => '/^GRd{2}d{3}d{4}[A-Z0-9]{16}$/',
'GT' => '/^GTd{2}[A-Z0-9]{4}[A-Z0-9]{20}$/',
'HR' => '/^HRd{2}d{7}d{10}$/',
'HU' => '/^HUd{2}d{3}d{4}d{1}d{15}d{1}$/',
'IE' => '/^IEd{2}[A-Z]{4}d{6}d{8}$/',
'IL' => '/^ILd{2}d{3}d{3}d{13}$/',
'IS' => '/^ISd{2}d{4}d{2}d{6}d{10}$/',
'IT' => '/^ITd{2}[A-Z]{1}d{5}d{5}[A-Z0-9]{12}$/',
'KW' => '/^KWd{2}[A-Z]{4}d{22}$/',
'KZ' => '/^KZd{2}d{3}[A-Z0-9]{13}$/',
'LB' => '/^LBd{2}d{4}[A-Z0-9]{20}$/',
'LI' => '/^LId{2}d{5}[A-Z0-9]{12}$/',
'LT' => '/^LTd{2}d{5}d{11}$/',
'LU' => '/^LUd{2}d{3}[A-Z0-9]{13}$/',
'LV' => '/^LVd{2}[A-Z]{4}[A-Z0-9]{13}$/',
'MC' => '/^MCd{2}d{5}d{5}[A-Z0-9]{11}d{2}$/',
'MD' => '/^MDd{2}[A-Z0-9]{2}[A-Z0-9]{18}$/',
'ME' => '/^MEd{2}d{3}d{13}d{2}$/',
'MK' => '/^MKd{2}d{3}[A-Z0-9]{10}d{2}$/',
'MR' => '/^MRd{2}d{5}d{5}d{11}d{2}$/',
'MT' => '/^MTd{2}[A-Z]{4}d{5}[A-Z0-9]{18}$/',
'MU' => '/^MUd{2}[A-Z]{4}d{2}d{2}d{12}d{3}[A-Z]{3}$/',
'NL' => '/^NLd{2}[A-Z]{4}d{10}$/',
'NO' => '/^NOd{2}d{4}d{6}d{1}$/',
'PK' => '/^PKd{2}[A-Z]{4}[A-Z0-9]{16}$/',
'PL' => '/^PLd{2}d{8}d{16}$/',
'PS' => '/^PSd{2}[A-Z]{4}[A-Z0-9]{21}$/',
'PT' => '/^PTd{2}d{4}d{4}d{11}d{2}$/',
'RO' => '/^ROd{2}[A-Z]{4}[A-Z0-9]{16}$/',
'RS' => '/^RSd{2}d{3}d{13}d{2}$/',
'SA' => '/^SAd{2}d{2}[A-Z0-9]{18}$/',
'SE' => '/^SEd{2}d{3}d{16}d{1}$/',
'SI' => '/^SId{2}d{5}d{8}d{2}$/',
'SK' => '/^SKd{2}d{4}d{6}d{10}$/',
'SM' => '/^SMd{2}[A-Z]{1}d{5}d{5}[A-Z0-9]{12}$/',
'TN' => '/^TNd{2}d{2}d{3}d{13}d{2}$/',
'TR' => '/^TRd{2}d{5}d{1}[A-Z0-9]{16}$/',
'VG' => '/^VGd{2}[A-Z]{4}d{16}$/',
);
/**
* @dataProvider localeDataProvider
*/
public function testBankAccountNumber($locale)
{
$parts = explode('_', $locale);
$countryCode = array_pop($parts);
if (!isset($this->ibanFormats[$countryCode])) {
// No IBAN format available
return;
}
$this->loadLocalProviders($locale);
try {
$iban = $this->faker->bankAccountNumber;
} catch (InvalidArgumentException $e) {
// Not implemented, nothing to test
$this->markTestSkipped("bankAccountNumber not implemented for $locale");
return;
}
// Test format
$this->assertRegExp($this->ibanFormats[$countryCode], $iban);
// Test checksum
$this->assertTrue(Iban::isValid($iban), "Checksum for $iban is invalid");
}
public function ibanFormatProvider()
{
$return = array();
foreach ($this->ibanFormats as $countryCode => $regex) {
$return[] = array($countryCode, $regex);
}
return $return;
}
/**
* @dataProvider ibanFormatProvider
*/
public function testIban($countryCode, $regex)
{
$iban = $this->faker->iban($countryCode);
// Test format
$this->assertRegExp($regex, $iban);
// Test checksum
$this->assertTrue(Iban::isValid($iban), "Checksum for $iban is invalid");
}
}