Yaffs site version 1.1
[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\Validation;
17
18 class CardSchemeValidatorTest extends AbstractConstraintValidatorTest
19 {
20     protected function getApiVersion()
21     {
22         return Validation::API_VERSION_2_5;
23     }
24
25     protected function createValidator()
26     {
27         return new CardSchemeValidator();
28     }
29
30     public function testNullIsValid()
31     {
32         $this->validator->validate(null, new CardScheme(array('schemes' => array())));
33
34         $this->assertNoViolation();
35     }
36
37     public function testEmptyStringIsValid()
38     {
39         $this->validator->validate('', new CardScheme(array('schemes' => array())));
40
41         $this->assertNoViolation();
42     }
43
44     /**
45      * @dataProvider getValidNumbers
46      */
47     public function testValidNumbers($scheme, $number)
48     {
49         $this->validator->validate($number, new CardScheme(array('schemes' => $scheme)));
50
51         $this->assertNoViolation();
52     }
53
54     /**
55      * @dataProvider getInvalidNumbers
56      */
57     public function testInvalidNumbers($scheme, $number, $code)
58     {
59         $constraint = new CardScheme(array(
60             'schemes' => $scheme,
61             'message' => 'myMessage',
62         ));
63
64         $this->validator->validate($number, $constraint);
65
66         $this->buildViolation('myMessage')
67             ->setParameter('{{ value }}', is_string($number) ? '"'.$number.'"' : $number)
68             ->setCode($code)
69             ->assertRaised();
70     }
71
72     public function getValidNumbers()
73     {
74         return array(
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'),
118         );
119     }
120
121     public function getInvalidNumbers()
122     {
123         return array(
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
140         );
141     }
142 }