From 24571c6c544bac687cb7a2939b0b1cf58c68e1d7 Mon Sep 17 00:00:00 2001 From: M1QN Date: Tue, 3 Mar 2020 20:33:40 +0100 Subject: [PATCH 1/6] added message functionality to maxlength rule --- src/Rule/MaxLength.php | 13 +++++++++++-- tests/Rule/MaxLengthTest.php | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 tests/Rule/MaxLengthTest.php diff --git a/src/Rule/MaxLength.php b/src/Rule/MaxLength.php index c406f42..a79e197 100644 --- a/src/Rule/MaxLength.php +++ b/src/Rule/MaxLength.php @@ -13,9 +13,18 @@ class MaxLength implements ValidationRuleInterface */ private $length; - public function __construct(int $length) + /** + * @var int + */ + private $message; + + public function __construct( + int $length, + ?string $message = null + ) { $this->length = $length; + $this->message = $message; } /** @@ -31,6 +40,6 @@ public function validate($v): bool */ public function getMessage($v): string { - return "The length of '{$v}' was expected to be at most {$this->length} characters long"; + return $this->message?:"The length of '{$v}' was expected to be at most {$this->length} characters long"; } } \ No newline at end of file diff --git a/tests/Rule/MaxLengthTest.php b/tests/Rule/MaxLengthTest.php new file mode 100644 index 0000000..3503028 --- /dev/null +++ b/tests/Rule/MaxLengthTest.php @@ -0,0 +1,26 @@ +assertTrue($firstRule->validate("test")); + $this->assertFalse($firstRule->validate("long test")); + $this->assertEquals( + "The length of 'arr' was expected to be at most 5 characters long", + $firstRule->getMessage("arr") + ); + $this->assertEquals( + "Custom message", + $secondRule->getMessage("arr") + ); + } +} \ No newline at end of file From dd7a143600d1338d43833ad2077c4339e3d1700d Mon Sep 17 00:00:00 2001 From: M1QN Date: Fri, 6 Mar 2020 18:16:43 +0100 Subject: [PATCH 2/6] Added ContainsUppercaseCharacters rule --- src/Rule/ContainsUppercaseCharacters.php | 69 +++++++++++++++++++ .../Rule/ContainsUppercaseCharactersTest.php | 26 +++++++ 2 files changed, 95 insertions(+) create mode 100644 src/Rule/ContainsUppercaseCharacters.php create mode 100644 tests/Rule/ContainsUppercaseCharactersTest.php diff --git a/src/Rule/ContainsUppercaseCharacters.php b/src/Rule/ContainsUppercaseCharacters.php new file mode 100644 index 0000000..e6460fe --- /dev/null +++ b/src/Rule/ContainsUppercaseCharacters.php @@ -0,0 +1,69 @@ +numberCharacters = $numberCharacters; + $this->strict = $strict; + $this->message = $message; + } + + /** + * Validates a value according to this rule and returns if it is valid or not + * @param mixed $v + * @return bool true if valid, otherwise false + */ + public function validate($v): bool + { + if($this->strict){ + return $this->countUpperCase($v)<=$this->numberCharacters; + } + else{ + return $this->countUpperCase($v)>=$this->numberCharacters; + } + } + + /** + * Returns the message to be used in case the validation did not pass + * @param mixed $v the value that did not pass the validation + * @return string + */ + public function getMessage($v): string + { + if($this->message){ + return $this->message; + } + else if($this->strict){ + return "Number of uppercase characters exceeds ".${$this->numberCharacters}; + } + else{ + return "Number of uppercase characters should exceed ".${$this->numberCharacters}; + } + } + + private function countUpperCase(string $message){ + $lowerCase = strtolower($message); + $similar = similar_text($message, $lowerCase); + return strlen($message)-$similar; + } +} \ No newline at end of file diff --git a/tests/Rule/ContainsUppercaseCharactersTest.php b/tests/Rule/ContainsUppercaseCharactersTest.php new file mode 100644 index 0000000..681abd0 --- /dev/null +++ b/tests/Rule/ContainsUppercaseCharactersTest.php @@ -0,0 +1,26 @@ +assertTrue($ruleFirst->validate("Test string")); + $this->assertFalse($ruleFirst->validate("Test String")); + $this->assertFalse($ruleSecond->validate('test string')); + $this->assertTrue($ruleSecond->validate('Test String')); + $this->assertEquals( "Custom Message", $ruleThird->getMessage("test string")); + } +} \ No newline at end of file From 83be6ae35a49eac825f9802b92d668a91d35d536 Mon Sep 17 00:00:00 2001 From: M1QN Date: Fri, 6 Mar 2020 18:40:18 +0100 Subject: [PATCH 3/6] Headers removed, phpdoc added --- src/Rule/ContainsUppercaseCharacters.php | 29 ++++++++++++++----- .../Rule/ContainsUppercaseCharactersTest.php | 6 ---- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/Rule/ContainsUppercaseCharacters.php b/src/Rule/ContainsUppercaseCharacters.php index e6460fe..0f48219 100644 --- a/src/Rule/ContainsUppercaseCharacters.php +++ b/src/Rule/ContainsUppercaseCharacters.php @@ -1,10 +1,4 @@ Date: Tue, 3 Mar 2020 20:33:40 +0100 Subject: [PATCH 4/6] Revert "added message functionality to maxlength rule" This reverts commit 24571c6c544bac687cb7a2939b0b1cf58c68e1d7. --- src/Rule/MaxLength.php | 13 ++----------- tests/Rule/MaxLengthTest.php | 26 -------------------------- 2 files changed, 2 insertions(+), 37 deletions(-) delete mode 100644 tests/Rule/MaxLengthTest.php diff --git a/src/Rule/MaxLength.php b/src/Rule/MaxLength.php index a79e197..c406f42 100644 --- a/src/Rule/MaxLength.php +++ b/src/Rule/MaxLength.php @@ -13,18 +13,9 @@ class MaxLength implements ValidationRuleInterface */ private $length; - /** - * @var int - */ - private $message; - - public function __construct( - int $length, - ?string $message = null - ) + public function __construct(int $length) { $this->length = $length; - $this->message = $message; } /** @@ -40,6 +31,6 @@ public function validate($v): bool */ public function getMessage($v): string { - return $this->message?:"The length of '{$v}' was expected to be at most {$this->length} characters long"; + return "The length of '{$v}' was expected to be at most {$this->length} characters long"; } } \ No newline at end of file diff --git a/tests/Rule/MaxLengthTest.php b/tests/Rule/MaxLengthTest.php deleted file mode 100644 index 3503028..0000000 --- a/tests/Rule/MaxLengthTest.php +++ /dev/null @@ -1,26 +0,0 @@ -assertTrue($firstRule->validate("test")); - $this->assertFalse($firstRule->validate("long test")); - $this->assertEquals( - "The length of 'arr' was expected to be at most 5 characters long", - $firstRule->getMessage("arr") - ); - $this->assertEquals( - "Custom message", - $secondRule->getMessage("arr") - ); - } -} \ No newline at end of file From 941df1afb442f42ca43c1ac81fce71bfac705675 Mon Sep 17 00:00:00 2001 From: M1QN Date: Sat, 7 Mar 2020 11:25:12 +0100 Subject: [PATCH 5/6] ContainsUppercaseCharacters pull request fix --- src/Rule/ContainsUppercaseCharacters.php | 17 +++++++++-------- tests/Rule/ContainsUppercaseCharactersTest.php | 3 +++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/Rule/ContainsUppercaseCharacters.php b/src/Rule/ContainsUppercaseCharacters.php index 0f48219..e0a88e5 100644 --- a/src/Rule/ContainsUppercaseCharacters.php +++ b/src/Rule/ContainsUppercaseCharacters.php @@ -3,6 +3,7 @@ namespace Morebec\Validator\Rule; +use InvalidArgumentException; use Morebec\Validator\ValidationRuleInterface; class ContainsUppercaseCharacters implements ValidationRuleInterface @@ -23,16 +24,18 @@ class ContainsUppercaseCharacters implements ValidationRuleInterface /** * ContainsUppercaseCharacters constructor. - * @param int|null $numberCharacters - * @param bool|null $strict + * @param int $numberCharacters + * @param bool $strict * @param string|null $message */ public function __construct( - ?int $numberCharacters = 1, - ?bool $strict = false, + int $numberCharacters, + bool $strict, ?string $message = null ) { + if($numberCharacters<0) + throw new InvalidArgumentException(); $this->numberCharacters = $numberCharacters; $this->strict = $strict; $this->message = $message; @@ -63,12 +66,10 @@ public function getMessage($v): string if($this->message){ return $this->message; } - else if($this->strict){ + if($this->strict){ return "Number of uppercase characters exceeds ".${$this->numberCharacters}; } - else{ - return "Number of uppercase characters should exceed ".${$this->numberCharacters}; - } + return "Number of uppercase characters should exceed ".${$this->numberCharacters}; } /** diff --git a/tests/Rule/ContainsUppercaseCharactersTest.php b/tests/Rule/ContainsUppercaseCharactersTest.php index 5660cc1..09a3e7f 100644 --- a/tests/Rule/ContainsUppercaseCharactersTest.php +++ b/tests/Rule/ContainsUppercaseCharactersTest.php @@ -2,6 +2,7 @@ namespace Tests\Morebec\Validator\Rule; +use InvalidArgumentException; use Morebec\Validator\Rule\ContainsUppercaseCharacters; use PHPUnit\Framework\TestCase; @@ -16,5 +17,7 @@ public function testValidate(){ $this->assertFalse($ruleSecond->validate('test string')); $this->assertTrue($ruleSecond->validate('Test String')); $this->assertEquals( "Custom Message", $ruleThird->getMessage("test string")); + $this->expectException(InvalidArgumentException::class); + $ruleFourth = new ContainsUppercaseCharacters(-1, true); } } \ No newline at end of file From d30fb52ccafc4b25b65424cd2d3237230b3464c1 Mon Sep 17 00:00:00 2001 From: M1QN Date: Sat, 7 Mar 2020 11:31:04 +0100 Subject: [PATCH 6/6] Control flow fix --- src/Rule/ContainsUppercaseCharacters.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Rule/ContainsUppercaseCharacters.php b/src/Rule/ContainsUppercaseCharacters.php index e0a88e5..7c586fc 100644 --- a/src/Rule/ContainsUppercaseCharacters.php +++ b/src/Rule/ContainsUppercaseCharacters.php @@ -51,9 +51,7 @@ public function validate($v): bool if($this->strict){ return $this->countUpperCase($v)<=$this->numberCharacters; } - else{ - return $this->countUpperCase($v)>=$this->numberCharacters; - } + return $this->countUpperCase($v)>=$this->numberCharacters; } /**