Skip to content

Commit 7326b7d

Browse files
committed
added more tests for Validation utility
1 parent be9c808 commit 7326b7d

File tree

2 files changed

+142
-5
lines changed

2 files changed

+142
-5
lines changed

src/RESTFul/Validation.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class Validation {
3333
*/
3434
private $childValidations = [];
3535

36-
function __construct($key, $data){
36+
function __construct($key, &$data){
3737
$this->key = $key;
38-
$this->data = $data;
38+
$this->data = &$data;
3939
}
4040

4141
function containsOnly($keys){
@@ -67,6 +67,9 @@ function containsExactly($keys){
6767
}
6868

6969
function key($key){
70+
if(!array_key_exists($key, $this->data)){
71+
$this->data[$key] = null;
72+
}
7073
$subValidation = new Validation($key,$this->data[$key]);
7174
$subValidation->continue = $this->continue;
7275
$subValidation->parentValidation = $this;
@@ -169,7 +172,7 @@ function isBoolean(){
169172

170173
function match($regExpr){
171174
if($this->continue){
172-
if(preg_match($regExpr,$this->data) === false){
175+
if(preg_match($regExpr,$this->data) !== 1){
173176
$this->validationErrors = 'invalid';
174177
$this->continue = false;
175178
}

tests/RESTFul/TestValidation.php

Lines changed: 136 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,16 @@ class TestValidation extends TestCase{
1010
/**
1111
* @dataProvider dataProviderValidation
1212
*/
13-
function testValidation($data,$validationSequence,$expectedErrors){
13+
function testValidation($data,$validationSequence,$expectedErrors,$expectedData = null){
14+
$originalData = json_decode(json_encode($data),true);
1415
$validation = new Validation('data', $data);
1516
call_user_func($validationSequence,$validation);
1617
$this->assertEquals($expectedErrors, $validation->getValidationErrors());
18+
if($expectedData != null){
19+
$this->assertEquals($expectedData, $data);
20+
}else{
21+
$this->assertEquals($originalData, $data);
22+
}
1723
}
1824

1925
function dataProviderValidation(){
@@ -94,7 +100,135 @@ function($validation){
94100
$validation->containsOnly(['a','b','c'])->key('b')->required()->key('A')->isNumeric()->in([10,20,30,40]);
95101
},
96102
['b'=>['A'=>'invalid']]
97-
]
103+
],
104+
'require failure'=>[
105+
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
106+
function($validation){
107+
$validation->containsOnly(['a','b','c','d'])->key('d')->required();
108+
},
109+
['d'=>'missing'],
110+
['a'=>'x','b'=>['A'=>200],'c'=>'z','d'=>null]
111+
],
112+
'default value'=>[
113+
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
114+
function($validation){
115+
$validation->containsOnly(['a','b','c','d'])->key('d')->defaultValue('P');
116+
},
117+
[],
118+
['a'=>'x','b'=>['A'=>200],'c'=>'z','d'=>'P']
119+
],
120+
'isNumeric Failure'=>[
121+
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
122+
function($validation){
123+
$validation->key('c')->isNumeric()->inRange(0);
124+
},
125+
['c'=>'invalid']
126+
],
127+
'isInt Success'=>[
128+
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
129+
function($validation){
130+
$validation->key('b')->key('A')->isInt();
131+
},
132+
[]
133+
],
134+
'isInt Failure'=>[
135+
['a'=>'x','b'=>['A'=>200.50],'c'=>'z'],
136+
function($validation){
137+
$validation->key('b')->key('A')->isInt();
138+
},
139+
['b'=>['A'=>'invalid']]
140+
],
141+
'inRange Failure 1'=>[
142+
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
143+
function($validation){
144+
$validation->key('b')->key('A')->isInt()->inRange(400);
145+
},
146+
['b'=>['A'=>'invalid']]
147+
],
148+
'inRange Failure 2'=>[
149+
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
150+
function($validation){
151+
$validation->key('b')->key('A')->isInt()->inRange(0,100);
152+
},
153+
['b'=>['A'=>'invalid']]
154+
],
155+
'isTimestamp Success'=>[
156+
['a'=>'x','b'=>'15th April 2018','c'=>'z'],
157+
function($validation){
158+
$validation->key('b')->isTimestamp();
159+
},
160+
[]
161+
],
162+
'isTimestamp Failure'=>[
163+
['a'=>'x','b'=>'2018-April-2802','c'=>'z'],
164+
function($validation){
165+
$validation->key('b')->isTimestamp();
166+
},
167+
['b'=>'invalid']
168+
],
169+
'isArray Success'=>[
170+
['a'=>[['p'=>1],['q'=>2]],'b'=>'y','c'=>'z'],
171+
function($validation){
172+
$validation->key('a')->isArray()->hasCount(1,3);
173+
},
174+
[]
175+
],
176+
'isArray Failure'=>[
177+
['a'=>'{"p":1,"q":2}','b'=>'y','c'=>'z'],
178+
function($validation){
179+
$validation->key('a')->isArray()->hasCount(1,3);
180+
},
181+
['a'=>'invalid']
182+
],
183+
'hasCount Failure'=>[
184+
['a'=>[['p'=>1],['q'=>2]],'b'=>'y','c'=>'z'],
185+
function($validation){
186+
$validation->key('a')->isArray()->hasCount(3,10);
187+
},
188+
['a'=>'invalid']
189+
],
190+
'isBoolean Success'=>[
191+
['a'=>'x','b'=>true,'c'=>'z'],
192+
function($validation){
193+
$validation->key('b')->isBoolean();
194+
},
195+
[]
196+
],
197+
'isBoolean Failure'=>[
198+
['a'=>'x','b'=>200,'c'=>'z'],
199+
function($validation){
200+
$validation->key('b')->isBoolean();
201+
},
202+
['b'=>'invalid']
203+
],
204+
'match Success'=>[
205+
['a'=>'[email protected]','b'=>true,'c'=>'z'],
206+
function($validation){
207+
$validation->key('a')->match('/([a-z]|[A-Z]|\.)*\@([a-z]|[A-Z]|\.)*/');
208+
},
209+
[]
210+
],
211+
'match Failure'=>[
212+
['a'=>'Raghavendragmail.com','b'=>true,'c'=>'z'],
213+
function($validation){
214+
$validation->key('a')->match('/([a-z]|[A-Z]|\.)*\@([a-z]|[A-Z]|\.)*/');
215+
},
216+
['a'=>'invalid']
217+
],
218+
'hasLength Success'=>[
219+
['a'=>'[email protected]','b'=>true,'c'=>'z'],
220+
function($validation){
221+
$validation->key('a')->match('/([a-z]|[A-Z]|\.)*\@([a-z]|[A-Z]|\.)*/')->hasLength(1,255);
222+
},
223+
[]
224+
],
225+
'hasLength Failure'=>[
226+
['a'=>'Raghavendragmail.com','b'=>true,'c'=>'z'],
227+
function($validation){
228+
$validation->key('a')->hasLength(1,10);
229+
},
230+
['a'=>'invalid']
231+
],
98232

99233
];
100234
}

0 commit comments

Comments
 (0)