Skip to content

Commit

Permalink
added more tests for Validation utility
Browse files Browse the repository at this point in the history
  • Loading branch information
Raaghu committed Apr 15, 2018
1 parent be9c808 commit 7326b7d
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 5 deletions.
9 changes: 6 additions & 3 deletions src/RESTFul/Validation.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ class Validation {
*/
private $childValidations = [];

function __construct($key, $data){
function __construct($key, &$data){
$this->key = $key;
$this->data = $data;
$this->data = &$data;
}

function containsOnly($keys){
Expand Down Expand Up @@ -67,6 +67,9 @@ function containsExactly($keys){
}

function key($key){
if(!array_key_exists($key, $this->data)){
$this->data[$key] = null;
}
$subValidation = new Validation($key,$this->data[$key]);
$subValidation->continue = $this->continue;
$subValidation->parentValidation = $this;
Expand Down Expand Up @@ -169,7 +172,7 @@ function isBoolean(){

function match($regExpr){
if($this->continue){
if(preg_match($regExpr,$this->data) === false){
if(preg_match($regExpr,$this->data) !== 1){
$this->validationErrors = 'invalid';
$this->continue = false;
}
Expand Down
138 changes: 136 additions & 2 deletions tests/RESTFul/TestValidation.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ class TestValidation extends TestCase{
/**
* @dataProvider dataProviderValidation
*/
function testValidation($data,$validationSequence,$expectedErrors){
function testValidation($data,$validationSequence,$expectedErrors,$expectedData = null){
$originalData = json_decode(json_encode($data),true);
$validation = new Validation('data', $data);
call_user_func($validationSequence,$validation);
$this->assertEquals($expectedErrors, $validation->getValidationErrors());
if($expectedData != null){
$this->assertEquals($expectedData, $data);
}else{
$this->assertEquals($originalData, $data);
}
}

function dataProviderValidation(){
Expand Down Expand Up @@ -94,7 +100,135 @@ function($validation){
$validation->containsOnly(['a','b','c'])->key('b')->required()->key('A')->isNumeric()->in([10,20,30,40]);
},
['b'=>['A'=>'invalid']]
]
],
'require failure'=>[
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
function($validation){
$validation->containsOnly(['a','b','c','d'])->key('d')->required();
},
['d'=>'missing'],
['a'=>'x','b'=>['A'=>200],'c'=>'z','d'=>null]
],
'default value'=>[
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
function($validation){
$validation->containsOnly(['a','b','c','d'])->key('d')->defaultValue('P');
},
[],
['a'=>'x','b'=>['A'=>200],'c'=>'z','d'=>'P']
],
'isNumeric Failure'=>[
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
function($validation){
$validation->key('c')->isNumeric()->inRange(0);
},
['c'=>'invalid']
],
'isInt Success'=>[
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
function($validation){
$validation->key('b')->key('A')->isInt();
},
[]
],
'isInt Failure'=>[
['a'=>'x','b'=>['A'=>200.50],'c'=>'z'],
function($validation){
$validation->key('b')->key('A')->isInt();
},
['b'=>['A'=>'invalid']]
],
'inRange Failure 1'=>[
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
function($validation){
$validation->key('b')->key('A')->isInt()->inRange(400);
},
['b'=>['A'=>'invalid']]
],
'inRange Failure 2'=>[
['a'=>'x','b'=>['A'=>200],'c'=>'z'],
function($validation){
$validation->key('b')->key('A')->isInt()->inRange(0,100);
},
['b'=>['A'=>'invalid']]
],
'isTimestamp Success'=>[
['a'=>'x','b'=>'15th April 2018','c'=>'z'],
function($validation){
$validation->key('b')->isTimestamp();
},
[]
],
'isTimestamp Failure'=>[
['a'=>'x','b'=>'2018-April-2802','c'=>'z'],
function($validation){
$validation->key('b')->isTimestamp();
},
['b'=>'invalid']
],
'isArray Success'=>[
['a'=>[['p'=>1],['q'=>2]],'b'=>'y','c'=>'z'],
function($validation){
$validation->key('a')->isArray()->hasCount(1,3);
},
[]
],
'isArray Failure'=>[
['a'=>'{"p":1,"q":2}','b'=>'y','c'=>'z'],
function($validation){
$validation->key('a')->isArray()->hasCount(1,3);
},
['a'=>'invalid']
],
'hasCount Failure'=>[
['a'=>[['p'=>1],['q'=>2]],'b'=>'y','c'=>'z'],
function($validation){
$validation->key('a')->isArray()->hasCount(3,10);
},
['a'=>'invalid']
],
'isBoolean Success'=>[
['a'=>'x','b'=>true,'c'=>'z'],
function($validation){
$validation->key('b')->isBoolean();
},
[]
],
'isBoolean Failure'=>[
['a'=>'x','b'=>200,'c'=>'z'],
function($validation){
$validation->key('b')->isBoolean();
},
['b'=>'invalid']
],
'match Success'=>[
['a'=>'[email protected]','b'=>true,'c'=>'z'],
function($validation){
$validation->key('a')->match('/([a-z]|[A-Z]|\.)*\@([a-z]|[A-Z]|\.)*/');
},
[]
],
'match Failure'=>[
['a'=>'Raghavendragmail.com','b'=>true,'c'=>'z'],
function($validation){
$validation->key('a')->match('/([a-z]|[A-Z]|\.)*\@([a-z]|[A-Z]|\.)*/');
},
['a'=>'invalid']
],
'hasLength Success'=>[
['a'=>'[email protected]','b'=>true,'c'=>'z'],
function($validation){
$validation->key('a')->match('/([a-z]|[A-Z]|\.)*\@([a-z]|[A-Z]|\.)*/')->hasLength(1,255);
},
[]
],
'hasLength Failure'=>[
['a'=>'Raghavendragmail.com','b'=>true,'c'=>'z'],
function($validation){
$validation->key('a')->hasLength(1,10);
},
['a'=>'invalid']
],

];
}
Expand Down

0 comments on commit 7326b7d

Please sign in to comment.