4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Validator\Tests\Constraints;
14 use Symfony\Component\Validator\Constraints\CardScheme;
15 use Symfony\Component\Validator\Constraints\CardSchemeValidator;
16 use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
18 class CardSchemeValidatorTest extends ConstraintValidatorTestCase
20 protected function createValidator()
22 return new CardSchemeValidator();
25 public function testNullIsValid()
27 $this->validator->validate(null, new CardScheme(array('schemes' => array())));
29 $this->assertNoViolation();
32 public function testEmptyStringIsValid()
34 $this->validator->validate('', new CardScheme(array('schemes' => array())));
36 $this->assertNoViolation();
40 * @dataProvider getValidNumbers
42 public function testValidNumbers($scheme, $number)
44 $this->validator->validate($number, new CardScheme(array('schemes' => $scheme)));
46 $this->assertNoViolation();
50 * @dataProvider getInvalidNumbers
52 public function testInvalidNumbers($scheme, $number, $code)
54 $constraint = new CardScheme(array(
56 'message' => 'myMessage',
59 $this->validator->validate($number, $constraint);
61 $this->buildViolation('myMessage')
62 ->setParameter('{{ value }}', \is_string($number) ? '"'.$number.'"' : $number)
67 public function getValidNumbers()
70 array('AMEX', '378282246310005'),
71 array('AMEX', '371449635398431'),
72 array('AMEX', '378734493671000'),
73 array('AMEX', '347298508610146'),
74 array('CHINA_UNIONPAY', '6228888888888888'),
75 array('CHINA_UNIONPAY', '62288888888888888'),
76 array('CHINA_UNIONPAY', '622888888888888888'),
77 array('CHINA_UNIONPAY', '6228888888888888888'),
78 array('DINERS', '30569309025904'),
79 array('DINERS', '36088894118515'),
80 array('DINERS', '38520000023237'),
81 array('DISCOVER', '6011111111111117'),
82 array('DISCOVER', '6011000990139424'),
83 array('INSTAPAYMENT', '6372476031350068'),
84 array('INSTAPAYMENT', '6385537775789749'),
85 array('INSTAPAYMENT', '6393440808445746'),
86 array('JCB', '3530111333300000'),
87 array('JCB', '3566002020360505'),
88 array('JCB', '213112345678901'),
89 array('JCB', '180012345678901'),
90 array('LASER', '6304678107004080'),
91 array('LASER', '6706440607428128629'),
92 array('LASER', '6771656738314582216'),
93 array('MAESTRO', '6759744069209'),
94 array('MAESTRO', '5020507657408074712'),
95 array('MAESTRO', '5612559223580173965'),
96 array('MAESTRO', '6759744069209'),
97 array('MAESTRO', '6594371785970435599'),
98 array('MASTERCARD', '5555555555554444'),
99 array('MASTERCARD', '5105105105105100'),
100 array('MASTERCARD', '2221005555554444'),
101 array('MASTERCARD', '2230000000000000'),
102 array('MASTERCARD', '2300000000000000'),
103 array('MASTERCARD', '2699999999999999'),
104 array('MASTERCARD', '2709999999999999'),
105 array('MASTERCARD', '2720995105105100'),
106 array('VISA', '4111111111111111'),
107 array('VISA', '4012888888881881'),
108 array('VISA', '4222222222222'),
109 array('VISA', '4917610000000000003'),
110 array(array('AMEX', 'VISA'), '4111111111111111'),
111 array(array('AMEX', 'VISA'), '378282246310005'),
112 array(array('JCB', 'MASTERCARD'), '5105105105105100'),
113 array(array('VISA', 'MASTERCARD'), '5105105105105100'),
117 public function getInvalidNumbers()
120 array('VISA', '42424242424242424242', CardScheme::INVALID_FORMAT_ERROR),
121 array('AMEX', '357298508610146', CardScheme::INVALID_FORMAT_ERROR),
122 array('DINERS', '31569309025904', CardScheme::INVALID_FORMAT_ERROR),
123 array('DINERS', '37088894118515', CardScheme::INVALID_FORMAT_ERROR),
124 array('INSTAPAYMENT', '6313440808445746', CardScheme::INVALID_FORMAT_ERROR),
125 array('CHINA_UNIONPAY', '622888888888888', CardScheme::INVALID_FORMAT_ERROR),
126 array('CHINA_UNIONPAY', '62288888888888888888', CardScheme::INVALID_FORMAT_ERROR),
127 array('AMEX', '30569309025904', CardScheme::INVALID_FORMAT_ERROR), // DINERS number
128 array('AMEX', 'invalid', CardScheme::NOT_NUMERIC_ERROR), // A string
129 array('AMEX', 0, CardScheme::INVALID_FORMAT_ERROR), // a lone number
130 array('AMEX', '0', CardScheme::INVALID_FORMAT_ERROR), // a lone number
131 array('AMEX', '000000000000', CardScheme::INVALID_FORMAT_ERROR), // a lone number
132 array('DINERS', '3056930', CardScheme::INVALID_FORMAT_ERROR), // only first part of the number
133 array('DISCOVER', '1117', CardScheme::INVALID_FORMAT_ERROR), // only last 4 digits
134 array('MASTERCARD', '2721001234567890', CardScheme::INVALID_FORMAT_ERROR), // Not assigned yet
135 array('MASTERCARD', '2220991234567890', CardScheme::INVALID_FORMAT_ERROR), // Not assigned yet