123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- <?php
- namespace Faker\Test\Provider;
- use Faker\Calculator\Iban;
- use Faker\Calculator\Luhn;
- use Faker\Generator;
- use Faker\Provider\Base as BaseProvider;
- use Faker\Provider\DateTime as DateTimeProvider;
- use Faker\Provider\Payment as PaymentProvider;
- use Faker\Provider\Person as PersonProvider;
- use PHPUnit\Framework\TestCase;
- class PaymentTest extends 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->assertContains($this->faker->creditCardType, array('Visa', 'Visa Retired', 'MasterCard', 'American Express', 'Discover Card'));
- }
- public function creditCardNumberProvider()
- {
- return array(
- array('Discover Card', '/^6011\d{12}$/'),
- array('Visa', '/^4\d{15}$/'),
- array('Visa Retired', '/^4\d{12}$/'),
- array('MasterCard', '/^(5[1-5]|2[2-7])\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' => '/^AD\d{2}\d{4}\d{4}[A-Z0-9]{12}$/',
- 'AE' => '/^AE\d{2}\d{3}\d{16}$/',
- 'AL' => '/^AL\d{2}\d{8}[A-Z0-9]{16}$/',
- 'AT' => '/^AT\d{2}\d{5}\d{11}$/',
- 'AZ' => '/^AZ\d{2}[A-Z]{4}[A-Z0-9]{20}$/',
- 'BA' => '/^BA\d{2}\d{3}\d{3}\d{8}\d{2}$/',
- 'BE' => '/^BE\d{2}\d{3}\d{7}\d{2}$/',
- 'BG' => '/^BG\d{2}[A-Z]{4}\d{4}\d{2}[A-Z0-9]{8}$/',
- 'BH' => '/^BH\d{2}[A-Z]{4}[A-Z0-9]{14}$/',
- 'BR' => '/^BR\d{2}\d{8}\d{5}\d{10}[A-Z]{1}[A-Z0-9]{1}$/',
- 'CH' => '/^CH\d{2}\d{5}[A-Z0-9]{12}$/',
- 'CR' => '/^CR\d{2}\d{3}\d{14}$/',
- 'CY' => '/^CY\d{2}\d{3}\d{5}[A-Z0-9]{16}$/',
- 'CZ' => '/^CZ\d{2}\d{4}\d{6}\d{10}$/',
- 'DE' => '/^DE\d{2}\d{8}\d{10}$/',
- 'DK' => '/^DK\d{2}\d{4}\d{9}\d{1}$/',
- 'DO' => '/^DO\d{2}[A-Z0-9]{4}\d{20}$/',
- 'EE' => '/^EE\d{2}\d{2}\d{2}\d{11}\d{1}$/',
- 'ES' => '/^ES\d{2}\d{4}\d{4}\d{1}\d{1}\d{10}$/',
- 'FI' => '/^FI\d{2}\d{6}\d{7}\d{1}$/',
- 'FR' => '/^FR\d{2}\d{5}\d{5}[A-Z0-9]{11}\d{2}$/',
- 'GB' => '/^GB\d{2}[A-Z]{4}\d{6}\d{8}$/',
- 'GE' => '/^GE\d{2}[A-Z]{2}\d{16}$/',
- 'GI' => '/^GI\d{2}[A-Z]{4}[A-Z0-9]{15}$/',
- 'GR' => '/^GR\d{2}\d{3}\d{4}[A-Z0-9]{16}$/',
- 'GT' => '/^GT\d{2}[A-Z0-9]{4}[A-Z0-9]{20}$/',
- 'HR' => '/^HR\d{2}\d{7}\d{10}$/',
- 'HU' => '/^HU\d{2}\d{3}\d{4}\d{1}\d{15}\d{1}$/',
- 'IE' => '/^IE\d{2}[A-Z]{4}\d{6}\d{8}$/',
- 'IL' => '/^IL\d{2}\d{3}\d{3}\d{13}$/',
- 'IS' => '/^IS\d{2}\d{4}\d{2}\d{6}\d{10}$/',
- 'IT' => '/^IT\d{2}[A-Z]{1}\d{5}\d{5}[A-Z0-9]{12}$/',
- 'KW' => '/^KW\d{2}[A-Z]{4}\d{22}$/',
- 'KZ' => '/^KZ\d{2}\d{3}[A-Z0-9]{13}$/',
- 'LB' => '/^LB\d{2}\d{4}[A-Z0-9]{20}$/',
- 'LI' => '/^LI\d{2}\d{5}[A-Z0-9]{12}$/',
- 'LT' => '/^LT\d{2}\d{5}\d{11}$/',
- 'LU' => '/^LU\d{2}\d{3}[A-Z0-9]{13}$/',
- 'LV' => '/^LV\d{2}[A-Z]{4}[A-Z0-9]{13}$/',
- 'MC' => '/^MC\d{2}\d{5}\d{5}[A-Z0-9]{11}\d{2}$/',
- 'MD' => '/^MD\d{2}[A-Z0-9]{2}[A-Z0-9]{18}$/',
- 'ME' => '/^ME\d{2}\d{3}\d{13}\d{2}$/',
- 'MK' => '/^MK\d{2}\d{3}[A-Z0-9]{10}\d{2}$/',
- 'MR' => '/^MR\d{2}\d{5}\d{5}\d{11}\d{2}$/',
- 'MT' => '/^MT\d{2}[A-Z]{4}\d{5}[A-Z0-9]{18}$/',
- 'MU' => '/^MU\d{2}[A-Z]{4}\d{2}\d{2}\d{12}\d{3}[A-Z]{3}$/',
- 'NL' => '/^NL\d{2}[A-Z]{4}\d{10}$/',
- 'NO' => '/^NO\d{2}\d{4}\d{6}\d{1}$/',
- 'PK' => '/^PK\d{2}[A-Z]{4}[A-Z0-9]{16}$/',
- 'PL' => '/^PL\d{2}\d{8}\d{16}$/',
- 'PS' => '/^PS\d{2}[A-Z]{4}[A-Z0-9]{21}$/',
- 'PT' => '/^PT\d{2}\d{4}\d{4}\d{11}\d{2}$/',
- 'RO' => '/^RO\d{2}[A-Z]{4}[A-Z0-9]{16}$/',
- 'RS' => '/^RS\d{2}\d{3}\d{13}\d{2}$/',
- 'SA' => '/^SA\d{2}\d{2}[A-Z0-9]{18}$/',
- 'SE' => '/^SE\d{2}\d{3}\d{16}\d{1}$/',
- 'SI' => '/^SI\d{2}\d{5}\d{8}\d{2}$/',
- 'SK' => '/^SK\d{2}\d{4}\d{6}\d{10}$/',
- 'SM' => '/^SM\d{2}[A-Z]{1}\d{5}\d{5}[A-Z0-9]{12}$/',
- 'TN' => '/^TN\d{2}\d{2}\d{3}\d{13}\d{2}$/',
- 'TR' => '/^TR\d{2}\d{5}\d{1}[A-Z0-9]{16}$/',
- 'VG' => '/^VG\d{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");
- }
- }
|