Security update for Core, with self-updated composer
[yaffs-website] / vendor / symfony / validator / Tests / Constraints / CardSchemeValidatorTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Validator\Tests\Constraints;
13
14 use Symfony\Component\Validator\Constraints\CardScheme;
15 use Symfony\Component\Validator\Constraints\CardSchemeValidator;
16 use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
17
18 class CardSchemeValidatorTest extends ConstraintValidatorTestCase
19 {
20     protected function createValidator()
21     {
22         return new CardSchemeValidator();
23     }
24
25     public function testNullIsValid()
26     {
27         $this->validator->validate(null, new CardScheme(array('schemes' => array())));
28
29         $this->assertNoViolation();
30     }
31
32     public function testEmptyStringIsValid()
33     {
34         $this->validator->validate('', new CardScheme(array('schemes' => array())));
35
36         $this->assertNoViolation();
37     }
38
39     /**
40      * @dataProvider getValidNumbers
41      */
42     public function testValidNumbers($scheme, $number)
43     {
44         $this->validator->validate($number, new CardScheme(array('schemes' => $scheme)));
45
46         $this->assertNoViolation();
47     }
48
49     /**
50      * @dataProvider getInvalidNumbers
51      */
52     public function testInvalidNumbers($scheme, $number, $code)
53     {
54         $constraint = new CardScheme(array(
55             'schemes' => $scheme,
56             'message' => 'myMessage',
57         ));
58
59         $this->validator->validate($number, $constraint);
60
61         $this->buildViolation('myMessage')
62             ->setParameter('{{ value }}', is_string($number) ? '"'.$number.'"' : $number)
63             ->setCode($code)
64             ->assertRaised();
65     }
66
67     public function getValidNumbers()
68     {
69         return array(
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'),
113         );
114     }
115
116     public function getInvalidNumbers()
117     {
118         return array(
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
135         );
136     }
137 }