diff --git a/tests/automated/workflow/engine/classes/classFieldValidatorTest.php b/tests/automated/workflow/engine/classes/classFieldValidatorTest.php new file mode 100644 index 000000000..d71c052b7 --- /dev/null +++ b/tests/automated/workflow/engine/classes/classFieldValidatorTest.php @@ -0,0 +1,277 @@ +object = new FieldValidator(); + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } + + /** + * This is the default method to test, if the class still having + * the same number of methods. + */ + public function testNumberOfMethodsInThisClass() + { + $methods = get_class_methods('FieldValidator'); + $this->assertTrue( count($methods) == 7); + } + + /** + * @covers FieldValidator::isInt + * @todo Implement testisInt(). + */ + public function testisInt() + { + $methods = get_class_methods($this->object); + $this->assertTrue( in_array('isInt', $methods ), 'exists method isInt' ); + $r = new ReflectionMethod('FieldValidator', 'isInt'); + $params = $r->getParameters(); + $this->assertTrue( $params[0]->getName() == 'num'); + $this->assertTrue( $params[0]->isArray() == false); + $this->assertTrue( $params[0]->isOptional () == false); + } + + /** + * @covers FieldValidator::isReal + * @todo Implement testisReal(). + */ + public function testisReal() + { + $methods = get_class_methods($this->object); + $this->assertTrue( in_array('isReal', $methods ), 'exists method isReal' ); + $r = new ReflectionMethod('FieldValidator', 'isReal'); + $params = $r->getParameters(); + $this->assertTrue( $params[0]->getName() == 'num'); + $this->assertTrue( $params[0]->isArray() == false); + $this->assertTrue( $params[0]->isOptional () == false); + } + + /** + * @covers FieldValidator::isBool + * @todo Implement testisBool(). + */ + public function testisBool() + { + $methods = get_class_methods($this->object); + $this->assertTrue( in_array('isBool', $methods ), 'exists method isBool' ); + $r = new ReflectionMethod('FieldValidator', 'isBool'); + $params = $r->getParameters(); + $this->assertTrue( $params[0]->getName() == 'bool'); + $this->assertTrue( $params[0]->isArray() == false); + $this->assertTrue( $params[0]->isOptional () == false); + } + + /** + * @covers FieldValidator::isUrl + * @todo Implement testisUrl(). + */ + public function testisUrl() + { + $methods = get_class_methods($this->object); + $this->assertTrue( in_array('isUrl', $methods ), 'exists method isUrl' ); + $r = new ReflectionMethod('FieldValidator', 'isUrl'); + $params = $r->getParameters(); + $this->assertTrue( $params[0]->getName() == 'url'); + $this->assertTrue( $params[0]->isArray() == false); + $this->assertTrue( $params[0]->isOptional () == false); + } + + /** + * @covers FieldValidator::isEmail + * @todo Implement testisEmail(). + */ + public function testisEmail() + { + $methods = get_class_methods($this->object); + $this->assertTrue( in_array('isEmail', $methods ), 'exists method isEmail' ); + $r = new ReflectionMethod('FieldValidator', 'isEmail'); + $params = $r->getParameters(); + $this->assertTrue( $params[0]->getName() == 'email'); + $this->assertTrue( $params[0]->isArray() == false); + $this->assertTrue( $params[0]->isOptional () == false); + } + + /** + * @covers FieldValidator::isIp + * @todo Implement testisIp(). + */ + public function testisIp() + { + $methods = get_class_methods($this->object); + $this->assertTrue( in_array('isIp', $methods ), 'exists method isIp' ); + $r = new ReflectionMethod('FieldValidator', 'isIp'); + $params = $r->getParameters(); + $this->assertTrue( $params[0]->getName() == 'ip'); + $this->assertTrue( $params[0]->isArray() == false); + $this->assertTrue( $params[0]->isOptional () == false); + } + + /** + * @covers FieldValidator::validate + * @todo Implement testvalidate(). + */ + public function testvalidate() + { + $methods = get_class_methods($this->object); + $this->assertTrue( in_array('validate', $methods ), 'exists method validate' ); + $r = new ReflectionMethod('FieldValidator', 'validate'); + $params = $r->getParameters(); + $this->assertTrue( $params[0]->getName() == 'arrayData'); + $this->assertTrue( $params[0]->isArray() == false); + $this->assertTrue( $params[0]->isOptional () == false); + $this->assertTrue( $params[1]->getName() == 'arrayDataValidators'); + $this->assertTrue( $params[1]->isArray() == false); + $this->assertTrue( $params[1]->isOptional () == false); + } + + /** + * @covers FieldValidator::isInt + */ + public function testIsIntAllCovers() + { + $this->assertTrue($this->object->isInt(55)); + $this->assertTrue($this->object->isInt("55")); + + $this->assertFalse($this->object->isInt(55.5)); + $this->assertFalse($this->object->isInt("55.5")); + } + + /** + * @covers FieldValidator::isReal + */ + public function testIsRealAllCovers() + { + $this->assertTrue($this->object->isReal(55)); + $this->assertTrue($this->object->isReal("55")); + + $this->assertTrue($this->object->isReal(55.5)); + $this->assertTrue($this->object->isReal("55.5")); + + $this->assertFalse($this->object->isInt(.5)); + $this->assertFalse($this->object->isInt(".5")); + } + + /** + * @covers FieldValidator::isBool + */ + public function testIsBoolAllCovers() + { + $this->assertTrue($this->object->isBool(true)); + $this->assertTrue($this->object->isBool(false)); + + $this->assertTrue($this->object->isBool("true")); + $this->assertTrue($this->object->isBool("false")); + + $this->assertFalse($this->object->isBool(1)); + $this->assertFalse($this->object->isBool(0)); + $this->assertFalse($this->object->isBool("1")); + $this->assertFalse($this->object->isBool("0")); + } + + /** + * @covers FieldValidator::isEmail + */ + public function testIsEmailAllCovers() + { + $this->assertTrue($this->object->isEmail("my-email@gmail.com")); + + $this->assertFalse($this->object->isEmail("my--email@gmail.com")); + } + + /** + * @covers FieldValidator::isIp + */ + public function testIsIpAllCovers() + { + $this->assertTrue($this->object->isIp("127.0.0.1")); + + $this->assertFalse($this->object->isIp("127.0.0")); + } + + /** + * + */ + public function dataProviderTestValidateExceptionCovers() + { + return array( + array("", array(), false), + array(array(), "", false), + array(array(), array(1), false), + array(array(1), array(), false) + ); + } + + /** + * @covers FieldValidator::validate + * @dataProvider dataProviderTestValidateExceptionCovers + */ + public function testValidateExceptionCovers($arrayData, $arrayDataValidators, $success) + { + $result = $this->object->validate($arrayData, $arrayDataValidators); + + $this->assertEquals($result["success"], $success); + } + + /** + * + */ + public function dataProviderTestValidateRemainingCovers() + { + return array( + array(array("age" => 55.5), array("age" => array("type" => "int")), false), + array(array("pi" => "3_1416"), array("pi" => array("type" => "real")), false), + array(array("flag" => 1), array("flag" => array("type" => "bool")), false), + array(array("name" => "peter"), array("name" => array("type" => "string")), true), + + array(array("email" => "my--email@gmail.com"), array("email" => array("validation" => "email")), false), + array(array("ip" => "127.0.0"), array("ip" => array("validation" => "ip")), false), + + array(array("name" => "peter"), array("name" => array("min_size" => 6)), false), + + array(array("name" => "peter"), array("firstname" => array("required" => true)), false) + ); + } + + /** + * @covers FieldValidator::validate + * @dataProvider dataProviderTestValidateRemainingCovers + */ + public function testValidateRemainingCovers($arrayData, $arrayDataValidators, $success) + { + $result = $this->object->validate($arrayData, $arrayDataValidators); + + $this->assertEquals($result["success"], $success); + } +} + diff --git a/workflow/engine/classes/class.fieldValidator.php b/workflow/engine/classes/class.fieldValidator.php new file mode 100644 index 000000000..94b37c381 --- /dev/null +++ b/workflow/engine/classes/class.fieldValidator.php @@ -0,0 +1,243 @@ + $value1) { + $field = $key1; + $arrayValidators = $value1; + + if (is_array($arrayValidators) && count($arrayValidators) > 0) { + if (isset($arrayValidators["type"])) { + if (isset($arrayData[$field])) { + switch ($arrayValidators["type"]) { + case "int": + if (!self::isInt($arrayData[$field])) { + $result["success"] = false; + + $arrayError[] = str_replace( + array("{0}"), + array($field), + "Field \"{0}\" not is an integer number" + ); + } + break; + case "real": + if (!self::isReal($arrayData[$field])) { + $result["success"] = false; + + $arrayError[] = str_replace( + array("{0}"), + array($field), + "Field \"{0}\" not is an real number" + ); + } + break; + case "bool": + case "boolean": + if (!self::isBool($arrayData[$field])) { + $result["success"] = false; + + $arrayError[] = str_replace( + array("{0}"), + array($field), + "Field \"{0}\" not is an boolean" + ); + } + break; + default: + //string + break; + } + } + } + + if (isset($arrayValidators["validation"])) { + if (isset($arrayData[$field])) { + switch ($arrayValidators["validation"]) { + case "url": + if (!self::isUrl($arrayData[$field])) { + $result["success"] = false; + + $arrayError[] = str_replace( + array("{0}"), + array($field), + "Field \"{0}\" have not an valid URL format" + ); + } + break; + case "email": + if (!self::isEmail($arrayData[$field])) { + $result["success"] = false; + + $arrayError[] = str_replace( + array("{0}"), + array($field), + "Field \"{0}\" have not an valid email format" + ); + } + break; + case "ip": + if (!self::isIp($arrayData[$field])) { + $result["success"] = false; + + $arrayError[] = str_replace( + array("{0}"), + array($field), + "Field \"{0}\" have not an valid IP format" + ); + } + break; + } + } + } + + if (isset($arrayValidators["min_size"])) { + if (isset($arrayData[$field]) && !(strlen($arrayData[$field] . "") >= (int)($arrayValidators["min_size"]))) { + $result["success"] = false; + + $arrayError[] = str_replace( + array("{0}", "{1}", "{2}"), + array($field, $arrayValidators["min_size"], strlen($arrayData[$field] . "")), + "Field \"{0}\" should be min {1} chars, {2} given" + ); + } + } + + if (isset($arrayValidators["required"])) { + if ($arrayValidators["required"] && (!isset($arrayData[$field]) || (isset($arrayData[$field]) && $arrayData[$field] . "" == ""))) { + $result["success"] = false; + + $arrayError[] = str_replace( + array("{0}"), + array($field), + "Field \"{0}\" is required" + ); + } + } + } + } + } catch (Exception $e) { + $arrayError[] = $e->getMessage(); + + $result["success"] = false; + } + + $result["errors"] = $arrayError; + + return $result; + } +} +