From 177e50ca39671a210d8f4dd59af7638dffec05de Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Wed, 27 Nov 2013 17:28:50 -0400 Subject: [PATCH 1/3] ProcessMaker-MA "2184 Fields Validation Layer" - Se ha implementado la clase "class.fieldValidator.php", la misma incluye metodos de validacion de valor de variables - La clase "FieldValidator" valida valores como: numeros (int, real), cadenas (url, email, ip). Tambien valida valores por conjunto - Se ha implementado las pruebas unitarias para esta clase en el archivo "classFieldValidatorTest.php" --- .../classes/classFieldValidatorTest.php | 277 ++++++++++++++++++ .../engine/classes/class.fieldValidator.php | 243 +++++++++++++++ 2 files changed, 520 insertions(+) create mode 100644 tests/automated/workflow/engine/classes/classFieldValidatorTest.php create mode 100644 workflow/engine/classes/class.fieldValidator.php 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; + } +} + From 3876ec02f2a343a8448e823fc3c5bc98a6201ad5 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Thu, 28 Nov 2013 14:18:59 -0400 Subject: [PATCH 2/3] ProcessMaker-MA "2184 Fields Validation Layer" - Se ha implementado la clase "class.fieldValidator.php", la misma incluye metodos de validacion de valor de variables - La clase "FieldValidator" valida valores como: numeros (int, real), cadenas (url, email, ip). Tambien valida valores por conjunto - Se ha implementado las pruebas unitarias para esta clase en el archivo "classFieldValidatorTest.php" --- .../classes/classFieldValidatorTest.php | 312 ++++++++++++++---- .../engine/classes/class.fieldValidator.php | 2 +- 2 files changed, 241 insertions(+), 73 deletions(-) diff --git a/tests/automated/workflow/engine/classes/classFieldValidatorTest.php b/tests/automated/workflow/engine/classes/classFieldValidatorTest.php index d71c052b7..7a24d57f0 100644 --- a/tests/automated/workflow/engine/classes/classFieldValidatorTest.php +++ b/tests/automated/workflow/engine/classes/classFieldValidatorTest.php @@ -1,18 +1,13 @@ object); + + //isInt $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); + //isReal $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); + //isBool $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); + //isUrl $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); + //isEmail $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); + //isIp $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); + //validate $this->assertTrue( in_array('validate', $methods ), 'exists method validate' ); $r = new ReflectionMethod('FieldValidator', 'validate'); $params = $r->getParameters(); @@ -158,34 +112,68 @@ class classFieldValidatorTest extends PHPUnit_Framework_TestCase /** * @covers FieldValidator::isInt */ - public function testIsIntAllCovers() + public function testIsInt() { + $this->assertTrue($this->object->isInt(0)); + $this->assertTrue($this->object->isInt("0")); + $this->assertTrue($this->object->isInt(+0)); + $this->assertTrue($this->object->isInt("+0")); + $this->assertTrue($this->object->isInt(-0)); + $this->assertTrue($this->object->isInt("-0")); + $this->assertTrue($this->object->isInt(55)); $this->assertTrue($this->object->isInt("55")); + $this->assertTrue($this->object->isInt(+55)); + $this->assertTrue($this->object->isInt("+55")); + $this->assertTrue($this->object->isInt(-55)); + $this->assertTrue($this->object->isInt("-55")); + + $this->assertFalse($this->object->isInt("")); $this->assertFalse($this->object->isInt(55.5)); $this->assertFalse($this->object->isInt("55.5")); + $this->assertFalse($this->object->isInt(+55.5)); + $this->assertFalse($this->object->isInt("+55.5")); + $this->assertFalse($this->object->isInt(-55.5)); + $this->assertFalse($this->object->isInt("-55.5")); } /** * @covers FieldValidator::isReal */ - public function testIsRealAllCovers() + public function testIsReal() { + $this->assertTrue($this->object->isReal(0)); + $this->assertTrue($this->object->isReal("0")); + $this->assertTrue($this->object->isReal(+0)); + $this->assertTrue($this->object->isReal("+0")); + $this->assertTrue($this->object->isReal(-0)); + $this->assertTrue($this->object->isReal("-0")); + $this->assertTrue($this->object->isReal(55)); $this->assertTrue($this->object->isReal("55")); + $this->assertTrue($this->object->isReal(+55)); + $this->assertTrue($this->object->isReal("+55")); + $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->assertTrue($this->object->isReal(+55.5)); + $this->assertTrue($this->object->isReal("+55.5")); + $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")); + $this->assertFalse($this->object->isReal("")); + + $this->assertFalse($this->object->isReal(".5")); + $this->assertFalse($this->object->isReal("a")); } /** * @covers FieldValidator::isBool */ - public function testIsBoolAllCovers() + public function testIsBool() { $this->assertTrue($this->object->isBool(true)); $this->assertTrue($this->object->isBool(false)); @@ -193,30 +181,210 @@ class classFieldValidatorTest extends PHPUnit_Framework_TestCase $this->assertTrue($this->object->isBool("true")); $this->assertTrue($this->object->isBool("false")); + $this->assertFalse($this->object->isBool("")); + $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::isUrl + */ + public function testIsUrl() + { + $this->assertTrue($this->object->isUrl("http://www.myweb.com")); + $this->assertTrue($this->object->isUrl("http://www.myweb.com/")); + $this->assertTrue($this->object->isUrl("https://www.myweb.com")); + $this->assertTrue($this->object->isUrl("https://www.myweb.com/")); + $this->assertTrue($this->object->isUrl("https://www.myweb.com.bo")); + $this->assertTrue($this->object->isUrl("https://myweb.com")); + $this->assertTrue($this->object->isUrl("https://myweb.com.bo")); + $this->assertTrue($this->object->isUrl("http://192.168.10.58")); + $this->assertTrue($this->object->isUrl("https://192.168.10.58")); + $this->assertTrue($this->object->isUrl("http://192.168.10.58:8080")); + $this->assertTrue($this->object->isUrl("https://192.168.10.58:8080/")); + $this->assertTrue($this->object->isUrl("http://www.myweb.com/project/01/activity/01/steps")); + $this->assertTrue($this->object->isUrl("http://www.myweb.com/project/01/activity/01/steps.php")); + + $this->assertFalse($this->object->isUrl("")); + + $this->assertFalse($this->object->isUrl("www.myweb.com")); + $this->assertFalse($this->object->isUrl("www.myweb.com.bo")); + $this->assertFalse($this->object->isUrl("http ://www.myweb.com/")); + $this->assertFalse($this->object->isUrl("http://myweb")); + $this->assertFalse($this->object->isUrl("myweb")); + $this->assertFalse($this->object->isUrl("192.168.10.58")); + $this->assertFalse($this->object->isUrl("xttp://192.168.10.58")); + $this->assertFalse($this->object->isUrl("http:://192.168.10.58:8080/")); + $this->assertFalse($this->object->isUrl("http://")); + $this->assertFalse($this->object->isUrl("https://")); + } + /** * @covers FieldValidator::isEmail */ - public function testIsEmailAllCovers() + public function testIsEmail() { - $this->assertTrue($this->object->isEmail("my-email@gmail.com")); + $this->assertTrue($this->object->isEmail("my-email@myweb.com")); + $this->assertTrue($this->object->isEmail("my.email@myweb.com.bo")); + $this->assertTrue($this->object->isEmail("my-email.sample@myweb.com")); + $this->assertTrue($this->object->isEmail("my-email@my-web.com")); + $this->assertTrue($this->object->isEmail("my-2013-email@my-web.com")); + $this->assertTrue($this->object->isEmail("2013-my-email@my-web.com")); - $this->assertFalse($this->object->isEmail("my--email@gmail.com")); + $this->assertFalse($this->object->isEmail("")); + + $this->assertFalse($this->object->isEmail(" @myweb.com")); + $this->assertFalse($this->object->isEmail("my@email@myweb.com.bo")); + $this->assertFalse($this->object->isEmail("my-2013-email")); + $this->assertFalse($this->object->isEmail("my-email@myweb")); + $this->assertFalse($this->object->isEmail(".@myweb.com")); + $this->assertFalse($this->object->isEmail("-@myweb.com")); + $this->assertFalse($this->object->isEmail("@myweb.com")); + $this->assertFalse($this->object->isEmail("sample@.com")); + $this->assertFalse($this->object->isEmail("sample.com")); } /** * @covers FieldValidator::isIp */ - public function testIsIpAllCovers() + public function testIsIp() { + $this->assertTrue($this->object->isIp("255.255.255.255")); + $this->assertTrue($this->object->isIp("0.0.0.0")); $this->assertTrue($this->object->isIp("127.0.0.1")); + $this->assertFalse($this->object->isIp("")); + + $this->assertFalse($this->object->isIp("127.o.0.1")); + $this->assertFalse($this->object->isIp("127.0.0.")); $this->assertFalse($this->object->isIp("127.0.0")); + $this->assertFalse($this->object->isIp(".0.0.1")); + $this->assertFalse($this->object->isIp("127..0.1")); + } + + /** + * @covers FieldValidator::validate + */ + public function testValidate() + { + //Data OK + $arrayField = array( + "name" => "peter", + "lastname" => "parker", + "age" => 33, + "weight" => 56.55, + "website" => "http://www.myweb.com/", + "email" => "spider-man@myweb.com", + "alive" => true + ); + + $arrayValidators = array( + "name" => array( + "type" => "string", + "required" => true, + "min_size" => 5 + ), + "lastname" => array( + "type" => "string", + "min_size" => 2 + ), + "age" => array( + "type" => "int", + "required" => true + ), + "weight" => array( + "type" => "real", + "required" => true + ), + "website" => array( + "validation" => "url" + ), + "email" => array( + "type" => "string", + "required" => false, + "validation" => "email" + ), + "alive" => array( + "type" => "boolean" + ), + "ip" => array( + "validation" => "ip", + "required" => false + ) + ); + + $result = $this->object->validate($arrayField, $arrayValidators); + + $expectedSuccess = true; + $expectedErrors = array(); + + $this->assertEquals($result["success"], $expectedSuccess); + $this->assertEquals($result["errors"], $expectedErrors); + + //Data failed + $arrayField = array( + "name" => "Dan", + "lastname" => "", + "age" => "hello", + "weight" => "", + "website" => "www.myweb.com", + "email" => "spider-man@myweb", + "alive" => 1 + ); + + $arrayValidators = array( + "name" => array( + "type" => "string", + "required" => true, + "min_size" => 4 + ), + "lastname" => array( + "type" => "string", + "required" => true + ), + "age" => array( + "type" => "int" + ), + "weight" => array( + "type" => "real", + "required" => true + ), + "website" => array( + "validation" => "url" + ), + "email" => array( + "type" => "string", + "required" => false, + "validation" => "email" + ), + "alive" => array( + "type" => "boolean" + ), + "ip" => array( + "validation" => "ip", + "required" => false + ) + ); + + $result = $this->object->validate($arrayField, $arrayValidators); + + $expectedSuccess = false; + $expectedErrors = array( + "Field \"name\" should be min 4 chars, 3 given", + "Field \"lastname\" is required", + "Field \"age\" not is an integer number", + "Field \"weight\" not is an real number", + "Field \"weight\" is required", + "Field \"website\" have not an valid URL format", + "Field \"email\" have not an valid email format", + "Field \"alive\" not is an boolean" + ); + + $this->assertEquals($result["success"], $expectedSuccess); + $this->assertEquals($result["errors"], $expectedErrors); } /** @@ -254,7 +422,7 @@ class classFieldValidatorTest extends PHPUnit_Framework_TestCase 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("email" => "my--email@myweb.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), diff --git a/workflow/engine/classes/class.fieldValidator.php b/workflow/engine/classes/class.fieldValidator.php index 94b37c381..4ab9462aa 100644 --- a/workflow/engine/classes/class.fieldValidator.php +++ b/workflow/engine/classes/class.fieldValidator.php @@ -56,7 +56,7 @@ class FieldValidator */ public static function isUrl($url) { - return (preg_match("/(((^https?)|(^ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i", $url))? true : false; + return (preg_match("/(((^https?)|(^ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\/+\\@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i", $url))? true : false; } /** From 40db774bbb387db0a0d1cf110be335103790ef98 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Thu, 28 Nov 2013 16:01:37 -0400 Subject: [PATCH 3/3] ProcessMaker-MA "2184 Fields Validation Layer" - Se ha implementado la clase "class.fieldValidator.php", la misma incluye metodos de validacion de valor de variables - La clase "FieldValidator" valida valores como: numeros (int, real), cadenas (url, email, ip). Tambien valida valores por conjunto - Se ha implementado las pruebas unitarias para esta clase en el archivo "classFieldValidatorTest.php" --- .../workflow/engine/classes/classFieldValidatorTest.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/automated/workflow/engine/classes/classFieldValidatorTest.php b/tests/automated/workflow/engine/classes/classFieldValidatorTest.php index 7a24d57f0..5c7c64d7d 100644 --- a/tests/automated/workflow/engine/classes/classFieldValidatorTest.php +++ b/tests/automated/workflow/engine/classes/classFieldValidatorTest.php @@ -1,10 +1,6 @@