From a10379201c3f1b6607be9808a7ca6e1351d93a4c Mon Sep 17 00:00:00 2001 From: Wajdi Jurry Date: Sat, 17 Aug 2019 01:08:52 +0300 Subject: [PATCH 1/4] Fix MongoId validator --- .../Phalcon/Validation/Validator/MongoId.php | 24 +++---- .../unit/Validation/Validator/MongoIdTest.php | 66 +++++++++++++++++++ 2 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 tests/unit/Validation/Validator/MongoIdTest.php diff --git a/Library/Phalcon/Validation/Validator/MongoId.php b/Library/Phalcon/Validation/Validator/MongoId.php index 0cbdc637f..19338dbc2 100644 --- a/Library/Phalcon/Validation/Validator/MongoId.php +++ b/Library/Phalcon/Validation/Validator/MongoId.php @@ -14,16 +14,16 @@ | to license@phalconphp.com so we can send you a copy immediately. | +------------------------------------------------------------------------+ | Authors: Anton Kornilov | + | Maintainer: Wajdi Jurry +------------------------------------------------------------------------+ */ namespace Phalcon\Validation\Validator; -use MongoId as Id; +use \MongoDB\BSON\ObjectId; use Phalcon\Validation; use Phalcon\Validation\Validator; use Phalcon\Validation\Message; -use Phalcon\Validation\Exception as ValidationException; /** * MongoId validator @@ -36,22 +36,22 @@ class MongoId extends Validator * @param Validation $validation * @param string $attribute * @return bool - * @throws ValidationException */ public function validate(Validation $validation, $attribute) { - if (!extension_loaded('mongo')) { - throw new ValidationException('Mongo extension is not available'); - } - $value = $validation->getValue($attribute); $allowEmpty = $this->hasOption('allowEmpty'); - $result = ($allowEmpty && empty($value)) ? true : Id::isValid($value); - if (!$result) { - $message = ($this->hasOption('message')) ? $this->getOption('message') : 'MongoId is not valid'; - $validation->appendMessage(new Message($message, $attribute, 'MongoId')); + if ($allowEmpty && empty($value)) { + return true; } - return $result; + + if ($value instanceof ObjectId || preg_match('/^[a-f\d]{24}$/i', $value)) { + return true; + } + + $message = ($this->hasOption('message')) ? $this->getOption('message') : 'MongoId is not valid'; + $validation->appendMessage(new Message($message, $attribute, 'MongoId')); + return false; } } diff --git a/tests/unit/Validation/Validator/MongoIdTest.php b/tests/unit/Validation/Validator/MongoIdTest.php new file mode 100644 index 000000000..9905f92fa --- /dev/null +++ b/tests/unit/Validation/Validator/MongoIdTest.php @@ -0,0 +1,66 @@ + + * @package Phalcon\Validation\Validator + * @group Validation + * + * The contents of this file are subject to the New BSD License that is + * bundled with this package in the file docs/LICENSE.txt + * + * If you did not receive a copy of the license and are unable to obtain it + * through the world-wide-web, please send an email to license@phalconphp.com + * so that we can send you a copy immediately. + */ +class MongoIdTest extends Test +{ + private $validator; + + public function setUp() + { + $this->validator = new Validation(); + $this->validator->add( + 'id', + new MongoId([ + 'allowEmpty' => true + ]) + ); + return parent::setUp(); // TODO: Change the autogenerated stub + } + + public function testValidMongoIds() + { + $stringMongoId = "5d4a0496e4895300110e3272"; + $objectId = new ObjectId("5d4a0496e4895300110e3272"); + $emptyId = ''; + + $this->assertCount(0, $this->validator->validate(['id' => $stringMongoId])); + $this->assertCount(0, $this->validator->validate(['id' => $objectId])); + $this->assertCount(0, $this->validator->validate(['id' => $emptyId])); + } + + public function testInvalidMongoId() + { + $invalidMongoId = "12345"; + + $this->assertCount(1, $this->validator->validate(['id' => $invalidMongoId])); + } +} From b0044b17657266813d6c1f146509b2069685b292 Mon Sep 17 00:00:00 2001 From: Wajdi Jurry Date: Sat, 17 Aug 2019 11:10:18 +0300 Subject: [PATCH 2/4] Remove extra doc block --- tests/unit/Validation/Validator/MongoIdTest.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/unit/Validation/Validator/MongoIdTest.php b/tests/unit/Validation/Validator/MongoIdTest.php index 9905f92fa..e642a42ed 100644 --- a/tests/unit/Validation/Validator/MongoIdTest.php +++ b/tests/unit/Validation/Validator/MongoIdTest.php @@ -1,9 +1,4 @@ Date: Sat, 17 Aug 2019 12:09:32 +0300 Subject: [PATCH 3/4] Update Library/Phalcon/Validation/Validator/MongoId.php Co-Authored-By: Anton Vasiliev --- Library/Phalcon/Validation/Validator/MongoId.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Phalcon/Validation/Validator/MongoId.php b/Library/Phalcon/Validation/Validator/MongoId.php index 19338dbc2..bfd7e9d61 100644 --- a/Library/Phalcon/Validation/Validator/MongoId.php +++ b/Library/Phalcon/Validation/Validator/MongoId.php @@ -20,7 +20,7 @@ namespace Phalcon\Validation\Validator; -use \MongoDB\BSON\ObjectId; +use MongoDB\BSON\ObjectId; use Phalcon\Validation; use Phalcon\Validation\Validator; use Phalcon\Validation\Message; From d0e9bcf9a739489dbc7889d501ecd60316b0dcac Mon Sep 17 00:00:00 2001 From: Wajdi Jurry Date: Sat, 17 Aug 2019 12:09:47 +0300 Subject: [PATCH 4/4] Update Library/Phalcon/Validation/Validator/MongoId.php Co-Authored-By: Anton Vasiliev --- Library/Phalcon/Validation/Validator/MongoId.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Phalcon/Validation/Validator/MongoId.php b/Library/Phalcon/Validation/Validator/MongoId.php index bfd7e9d61..81d296994 100644 --- a/Library/Phalcon/Validation/Validator/MongoId.php +++ b/Library/Phalcon/Validation/Validator/MongoId.php @@ -50,7 +50,7 @@ public function validate(Validation $validation, $attribute) return true; } - $message = ($this->hasOption('message')) ? $this->getOption('message') : 'MongoId is not valid'; + $message = $this->hasOption('message') ? $this->getOption('message') : 'MongoId is not valid'; $validation->appendMessage(new Message($message, $attribute, 'MongoId')); return false; }