From f7cfd0faa9664802b21fc453d246ce54febc1214 Mon Sep 17 00:00:00 2001 From: japatel Date: Fri, 9 Jan 2015 16:56:38 -0600 Subject: [PATCH] Validation Package Testing - Added More Unit Tests to Validation Classes - Updated Logic accordingly --- lib/PayPal/Validation/ArgumentValidator.php | 15 +++-- lib/PayPal/Validation/JsonValidator.php | 2 +- .../Validation/ModelAccessorValidator.php | 4 ++ .../Test/Validation/ArgumentValidatorTest.php | 51 +++++++++++++++++ .../Test/Validation/JsonValidatorTest.php | 57 +++++++++++++++++++ .../Validation/ModelAccessValidatorTest.php | 50 ++++++++++++++++ 6 files changed, 170 insertions(+), 9 deletions(-) create mode 100644 tests/PayPal/Test/Validation/ArgumentValidatorTest.php create mode 100644 tests/PayPal/Test/Validation/JsonValidatorTest.php create mode 100644 tests/PayPal/Test/Validation/ModelAccessValidatorTest.php diff --git a/lib/PayPal/Validation/ArgumentValidator.php b/lib/PayPal/Validation/ArgumentValidator.php index 3660364..5f2d3bf 100644 --- a/lib/PayPal/Validation/ArgumentValidator.php +++ b/lib/PayPal/Validation/ArgumentValidator.php @@ -16,18 +16,17 @@ class ArgumentValidator * @param $argument mixed The object to be validated * @param $argumentName string|null The name of the argument. * This will be placed in the exception message for easy reference + * @return bool */ public static function validate($argument, $argumentName = null) { - if ( - $argument != null && - ((gettype($argument) == 'string' && $argument == '') || is_array($argument) && empty($argument)) - ) { - //Throw an Exception for string or array - throw new \InvalidArgumentException("$argumentName cannot be null or empty"); - } elseif ($argument === null) { - //Generic Exception + if ($argument === null) { + // Error if Object Null throw new \InvalidArgumentException("$argumentName cannot be null"); + } else if (gettype($argument) == 'string' && trim($argument) == ''){ + // Error if String Empty + throw new \InvalidArgumentException("$argumentName string cannot be empty"); } + return true; } } diff --git a/lib/PayPal/Validation/JsonValidator.php b/lib/PayPal/Validation/JsonValidator.php index 831c11f..9f064ed 100644 --- a/lib/PayPal/Validation/JsonValidator.php +++ b/lib/PayPal/Validation/JsonValidator.php @@ -19,7 +19,7 @@ class JsonValidator */ public static function validate($string, $silent = false) { - json_decode($string); + @json_decode($string); if (json_last_error() != JSON_ERROR_NONE) { if ($silent == false) { //Throw an Exception for string or array diff --git a/lib/PayPal/Validation/ModelAccessorValidator.php b/lib/PayPal/Validation/ModelAccessorValidator.php index 15f9fe3..3f324da 100644 --- a/lib/PayPal/Validation/ModelAccessorValidator.php +++ b/lib/PayPal/Validation/ModelAccessorValidator.php @@ -24,6 +24,10 @@ class ModelAccessorValidator { $mode = PayPalConfigManager::getInstance()->get('validation.level'); if ($mode != 'disabled') { + //Check if $attributeName is string + if (gettype($attributeName) !== 'string') { + return false; + } //If the mode is disabled, bypass the validation foreach (array('set' . $attributeName, 'get' . $attributeName) as $methodName) { if (get_class($class) == get_class(new PayPalModel())) { diff --git a/tests/PayPal/Test/Validation/ArgumentValidatorTest.php b/tests/PayPal/Test/Validation/ArgumentValidatorTest.php new file mode 100644 index 0000000..02d373f --- /dev/null +++ b/tests/PayPal/Test/Validation/ArgumentValidatorTest.php @@ -0,0 +1,51 @@ +assertTrue(ArgumentValidator::validate($input, "Name")); + } + + /** + * + * @dataProvider invalidProvider + * @expectedException \InvalidArgumentException + */ + public function testInvalidDataValidate($input) + { + $this->assertTrue(ArgumentValidator::validate($input, "Name")); + } + +} diff --git a/tests/PayPal/Test/Validation/JsonValidatorTest.php b/tests/PayPal/Test/Validation/JsonValidatorTest.php new file mode 100644 index 0000000..532a003 --- /dev/null +++ b/tests/PayPal/Test/Validation/JsonValidatorTest.php @@ -0,0 +1,57 @@ + '23')), + array('{"json":"value, "bool":false, "int":1, "float": 0.123, "array": [{"json":"value, "bool":false, "int":1, "float": 0.123}"json":"value, "bool":false, "int":1, "float": 0.123} ]}') + ); + } + + /** + * + * @dataProvider positiveProvider + */ + public function testValidate($input) + { + $this->assertTrue(JsonValidator::validate($input)); + } + + /** + * + * @dataProvider invalidProvider + * @expectedException \InvalidArgumentException + */ + public function testInvalidJson($input) + { + JsonValidator::validate($input); + } + + /** + * + * @dataProvider invalidProvider + */ + public function testInvalidJsonSilent($input) + { + $this->assertFalse(JsonValidator::validate($input, true)); + } +} diff --git a/tests/PayPal/Test/Validation/ModelAccessValidatorTest.php b/tests/PayPal/Test/Validation/ModelAccessValidatorTest.php new file mode 100644 index 0000000..1dee93c --- /dev/null +++ b/tests/PayPal/Test/Validation/ModelAccessValidatorTest.php @@ -0,0 +1,50 @@ +assertTrue(ModelAccessorValidator::validate($class, $name)); + } + + /** + * + * @dataProvider invalidProvider + */ + public function testInvalidValidate($class, $name, $exMessage) + { try { + $this->assertFalse(ModelAccessorValidator::validate($class, $name)); + } catch(\Exception $ex) { + $this->assertContains($exMessage, $ex->getMessage()); + } + } +}