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(array('AMEX', 'VISA'), '4111111111111111'),
110 array(array('AMEX', 'VISA'), '378282246310005'),
111 array(array('JCB', 'MASTERCARD'), '5105105105105100'),
112 array(array('VISA', 'MASTERCARD'), '5105105105105100'),
116 public function getInvalidNumbers()
119 array('VISA', '42424242424242424242', CardScheme::INVALID_FORMAT_ERROR),
120 array('AMEX', '357298508610146', CardScheme::INVALID_FORMAT_ERROR),
121 array('DINERS', '31569309025904', CardScheme::INVALID_FORMAT_ERROR),
122 array('DINERS', '37088894118515', CardScheme::INVALID_FORMAT_ERROR),
123 array('INSTAPAYMENT', '6313440808445746', CardScheme::INVALID_FORMAT_ERROR),
124 array('CHINA_UNIONPAY', '622888888888888', CardScheme::INVALID_FORMAT_ERROR),
125 array('CHINA_UNIONPAY', '62288888888888888888', CardScheme::INVALID_FORMAT_ERROR),
126 array('AMEX', '30569309025904', CardScheme::INVALID_FORMAT_ERROR), // DINERS number
127 array('AMEX', 'invalid', CardScheme::NOT_NUMERIC_ERROR), // A string
128 array('AMEX', 0, CardScheme::INVALID_FORMAT_ERROR), // a lone number
129 array('AMEX', '0', CardScheme::INVALID_FORMAT_ERROR), // a lone number
130 array('AMEX', '000000000000', CardScheme::INVALID_FORMAT_ERROR), // a lone number
131 array('DINERS', '3056930', CardScheme::INVALID_FORMAT_ERROR), // only first part of the number
132 array('DISCOVER', '1117', CardScheme::INVALID_FORMAT_ERROR), // only last 4 digits
133 array('MASTERCARD', '2721001234567890', CardScheme::INVALID_FORMAT_ERROR), // Not assigned yet
134 array('MASTERCARD', '2220991234567890', CardScheme::INVALID_FORMAT_ERROR), // Not assigned yet