From 55792e017c87536f627ab89f3336807f3bdb4e86 Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Wed, 27 Dec 2023 19:44:12 +0530 Subject: [PATCH] Add multiple validator --- src/Http/Validator/Multiple.php | 115 +++++++++++++++++++++++++++++++ tests/Validator/MultipleTest.php | 35 ++++++++++ 2 files changed, 150 insertions(+) create mode 100644 src/Http/Validator/Multiple.php create mode 100644 tests/Validator/MultipleTest.php diff --git a/src/Http/Validator/Multiple.php b/src/Http/Validator/Multiple.php new file mode 100644 index 00000000..4c919377 --- /dev/null +++ b/src/Http/Validator/Multiple.php @@ -0,0 +1,115 @@ +addRule($rule); + } + + $this->type = $type; + } + /** + * Add rule + * + * Add a new rule to the end of the rules containing array + * + * @param Validator $rule + * @return $this + */ + public function addRule(Validator $rule) + { + $this->rules[] = $rule; + + return $this; + } + + /** + * Get Description + * + * Returns validator description + * + * @return string + */ + public function getDescription(): string + { + $description = ''; + foreach ($this->rules as $key => $rule) { + $description .= ++$key . '. ' . $rule->getDescription() . " \n"; + } + + return $description; + } + + /** + * Is valid + * + * Validation will pass when all rules are valid if only one of the rules is invalid validation will fail. + * + * @param mixed $value + * @return bool + */ + public function isValid(mixed $value): bool + { + foreach ($this->rules as $rule) { /* @var $rule Validator */ + if (false === $rule->isValid($value)) { + return false; + } + } + + return true; + } + + /** + * Get Type + * + * Returns validator type. + * + * @return string + */ + public function getType(): string + { + return $this->type; + } + + /** + * Is array + * + * Function will return true if object is array. + * + * @return bool + */ + public function isArray(): bool + { + return true; + } +} diff --git a/tests/Validator/MultipleTest.php b/tests/Validator/MultipleTest.php new file mode 100644 index 00000000..348c3244 --- /dev/null +++ b/tests/Validator/MultipleTest.php @@ -0,0 +1,35 @@ +validator = new Multiple([new Text(20), new URL()], Multiple::TYPE_STRING); + } + + public function testIsValid() + { + $this->assertEquals('string', $this->validator->getType()); + $this->assertEquals("1. Value must be a valid string and at least 1 chars and no longer than 20 chars \n2. Value must be a valid URL \n", $this->validator->getDescription()); + + // Valid URL but invalid text length + $this->assertFalse($this->validator->isValid('http://example.com/very-long-url')); + + // Valid text within length, but invalid URL + $this->assertFalse($this->validator->isValid('hello world')); + + // Both conditions satisfied + $this->assertTrue($this->validator->isValid('http://example.com')); + $this->assertTrue($this->validator->isValid('https://google.com')); + + // Neither condition satisfied + $this->assertFalse($this->validator->isValid('example.com/hello-world')); + $this->assertFalse($this->validator->isValid('')); + } +}