/
ValidatorTest.php
133 lines (115 loc) · 3.9 KB
/
ValidatorTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/**
* PHP Version 5.4
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @since CakePHP(tm) v 3.0.0
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
namespace Cake\Test\TestCase\ORM;
use \Cake\ORM\Validation\ValidationSet;
use \Cake\ORM\Validator;
/**
* Tests Validator class
*
*/
class ValidatorTest extends \Cake\TestSuite\TestCase {
/**
* Testing you can dynamically add rules to a field
*
* @return void
*/
public function testAddingRulesToField() {
$validator = new Validator;
$validator->add('title', 'not-empty', ['rule' => 'notEmpty']);
$set = $validator->field('title');
$this->assertInstanceOf('\Cake\ORM\Validation\ValidationSet', $set);
$this->assertCount(1, $set);
$validator->add('title', 'another', ['rule' => 'alphanumeric']);
$this->assertCount(2, $set);
$validator->add('body', 'another', ['rule' => 'crazy']);
$this->assertCount(1, $validator->field('body'));
$this->assertCount(2, $validator);
}
/**
* Tests that calling field will create a default validation set for it
*
* @return void
*/
public function testFieldDefault() {
$validator = new Validator;
$field = $validator->field('foo');
$this->assertInstanceOf('\Cake\ORM\Validation\ValidationSet', $field);
$this->assertCount(0, $field);
}
/**
* Tests that field method can be used as a setter
*
* @return void
*/
public function testFieldSetter() {
$validator = new Validator;
$validationSet = new ValidationSet;
$validator->field('thing', $validationSet);
$this->assertSame($validationSet, $validator->field('thing'));
}
/**
* Tests the remove method
*
* @return void
*/
public function testRemove() {
$validator = new Validator;
$validator->add('title', 'not-empty', ['rule' => 'notEmpty']);
$validator->add('title', 'foo', ['rule' => 'bar']);
$this->assertCount(2, $validator->field('title'));
$validator->remove('title');
$this->assertCount(0, $validator->field('title'));
$validator->remove('title');
$validator->add('title', 'not-empty', ['rule' => 'notEmpty']);
$validator->add('title', 'foo', ['rule' => 'bar']);
$this->assertCount(2, $validator->field('title'));
$validator->remove('title', 'foo');
$this->assertCount(1, $validator->field('title'));
$this->assertNull($validator->field('title')->rule('foo'));
}
/**
* Tests the validatePresence method
*
* @return void
*/
public function testValidatePresence() {
$validator = new Validator;
$this->assertSame($validator, $validator->validatePresence('title'));
$this->assertTrue($validator->field('title')->isPresenceRequired());
$validator->validatePresence('title', false);
$this->assertFalse($validator->field('title')->isPresenceRequired());
$validator->validatePresence('title', 'created');
$this->assertEquals('created', $validator->field('title')->isPresenceRequired());
$validator->validatePresence('title', 'updated');
$this->assertEquals('updated', $validator->field('title')->isPresenceRequired());
}
/**
* Tests errors generated when a field presence is required
*
* @return void
*/
public function testErrorsWithPresenceRequired() {
$validator = new Validator;
$validator->validatePresence('title');
$errors = $validator->errors(['foo' => 'something']);
$expected = ['title' => ['This field is required']];
$this->assertEquals($expected, $errors);
$this->assertEmpty($validator->errors(['title' => 'bar']));
$validator->validatePresence('title', false);
$this->assertEmpty($validator->errors(['foo' => 'bar']));
}
}