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\Validation;
18 class CardSchemeValidatorTest extends AbstractConstraintValidatorTest
20 protected function getApiVersion()
22 return Validation::API_VERSION_2_5;
25 protected function createValidator()
27 return new CardSchemeValidator();
30 public function testNullIsValid()
32 $this->validator->validate(null, new CardScheme(array('schemes' => array())));
34 $this->assertNoViolation();
37 public function testEmptyStringIsValid()
39 $this->validator->validate('', new CardScheme(array('schemes' => array())));
41 $this->assertNoViolation();
45 * @dataProvider getValidNumbers
47 public function testValidNumbers($scheme, $number)
49 $this->validator->validate($number, new CardScheme(array('schemes' => $scheme)));
51 $this->assertNoViolation();
55 * @dataProvider getInvalidNumbers
57 public function testInvalidNumbers($scheme, $number, $code)
59 $constraint = new CardScheme(array(
61 'message' => 'myMessage',
64 $this->validator->validate($number, $constraint);
66 $this->buildViolation('myMessage')
67 ->setParameter('{{ value }}', is_string($number) ? '"'.$number.'"' : $number)
72 public function getValidNumbers()
75 array('AMEX', '378282246310005'),
76 array('AMEX', '371449635398431'),
77 array('AMEX', '378734493671000'),
78 array('AMEX', '347298508610146'),
79 array('CHINA_UNIONPAY', '6228888888888888'),
80 array('CHINA_UNIONPAY', '62288888888888888'),
81 array('CHINA_UNIONPAY', '622888888888888888'),
82 array('CHINA_UNIONPAY', '6228888888888888888'),
83 array('DINERS', '30569309025904'),
84 array('DINERS', '36088894118515'),
85 array('DINERS', '38520000023237'),
86 array('DISCOVER', '6011111111111117'),
87 array('DISCOVER', '6011000990139424'),
88 array('INSTAPAYMENT', '6372476031350068'),
89 array('INSTAPAYMENT', '6385537775789749'),
90 array('INSTAPAYMENT', '6393440808445746'),
91 array('JCB', '3530111333300000'),
92 array('JCB', '3566002020360505'),
93 array('JCB', '213112345678901'),
94 array('JCB', '180012345678901'),
95 array('LASER', '6304678107004080'),
96 array('LASER', '6706440607428128629'),
97 array('LASER', '6771656738314582216'),
98 array('MAESTRO', '6759744069209'),
99 array('MAESTRO', '5020507657408074712'),
100 array('MAESTRO', '5612559223580173965'),
101 array('MAESTRO', '6759744069209'),
102 array('MAESTRO', '6594371785970435599'),
103 array('MASTERCARD', '5555555555554444'),
104 array('MASTERCARD', '5105105105105100'),
105 array('MASTERCARD', '2221005555554444'),
106 array('MASTERCARD', '2230000000000000'),
107 array('MASTERCARD', '2300000000000000'),
108 array('MASTERCARD', '2699999999999999'),
109 array('MASTERCARD', '2709999999999999'),
110 array('MASTERCARD', '2720995105105100'),
111 array('VISA', '4111111111111111'),
112 array('VISA', '4012888888881881'),
113 array('VISA', '4222222222222'),
114 array(array('AMEX', 'VISA'), '4111111111111111'),
115 array(array('AMEX', 'VISA'), '378282246310005'),
116 array(array('JCB', 'MASTERCARD'), '5105105105105100'),
117 array(array('VISA', 'MASTERCARD'), '5105105105105100'),
121 public function getInvalidNumbers()
124 array('VISA', '42424242424242424242', CardScheme::INVALID_FORMAT_ERROR),
125 array('AMEX', '357298508610146', CardScheme::INVALID_FORMAT_ERROR),
126 array('DINERS', '31569309025904', CardScheme::INVALID_FORMAT_ERROR),
127 array('DINERS', '37088894118515', CardScheme::INVALID_FORMAT_ERROR),
128 array('INSTAPAYMENT', '6313440808445746', CardScheme::INVALID_FORMAT_ERROR),
129 array('CHINA_UNIONPAY', '622888888888888', CardScheme::INVALID_FORMAT_ERROR),
130 array('CHINA_UNIONPAY', '62288888888888888888', CardScheme::INVALID_FORMAT_ERROR),
131 array('AMEX', '30569309025904', CardScheme::INVALID_FORMAT_ERROR), // DINERS number
132 array('AMEX', 'invalid', CardScheme::NOT_NUMERIC_ERROR), // A string
133 array('AMEX', 0, CardScheme::INVALID_FORMAT_ERROR), // a lone number
134 array('AMEX', '0', CardScheme::INVALID_FORMAT_ERROR), // a lone number
135 array('AMEX', '000000000000', CardScheme::INVALID_FORMAT_ERROR), // a lone number
136 array('DINERS', '3056930', CardScheme::INVALID_FORMAT_ERROR), // only first part of the number
137 array('DISCOVER', '1117', CardScheme::INVALID_FORMAT_ERROR), // only last 4 digits
138 array('MASTERCARD', '2721001234567890', CardScheme::INVALID_FORMAT_ERROR), // Not assigned yet
139 array('MASTERCARD', '2220991234567890', CardScheme::INVALID_FORMAT_ERROR), // Not assigned yet