40c0ce43cfb95d4caaf3542e938db999361c7399
[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('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'),
114         );
115     }
116
117     public function getInvalidNumbers()
118     {
119         return array(
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
136         );
137     }
138 }