From e47dfc3cf22ebf38b388c4bee4b0a084cbd79dcc Mon Sep 17 00:00:00 2001 From: Muhammet SAFAK Date: Tue, 5 Jul 2022 15:57:55 +0300 Subject: [PATCH] v1.0.2 Unit test written. --- .gitignore | 4 +- CHANGELOG.md | 4 + README.md | 22 +- composer.json | 8 + phpunit.xml | 8 + src/LocaleTrait.php | 2 +- src/RulesTrait.php | 42 +- src/Validation.php | 10 +- tests/Validation/ValidationUnitTest.php | 725 ++++++++++++++++++++++++ 9 files changed, 787 insertions(+), 38 deletions(-) create mode 100644 phpunit.xml create mode 100644 tests/Validation/ValidationUnitTest.php diff --git a/.gitignore b/.gitignore index 0abe7ad..60521d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ /.idea/ /.vscode/ /.vs/ +/Example/ /vendor/ -/composer.lock \ No newline at end of file +/composer.lock +/.phpunit.result.cache \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f64ae7..a7d6900 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +### 1.0.2 [2022.07.05] + +- Unit test written. + ### 1.0.1 [2022.03.19] - Fixed the issue where errors were not handled in optional data. diff --git a/README.md b/README.md index 6824b3f..7814ed4 100644 --- a/README.md +++ b/README.md @@ -69,26 +69,6 @@ $validation = new Validation($_GET); $validation->rule('name', 'string'); $validation->rule('year', 'integer|range(1970...2099)'); -if($validation->validation()){ - // ... process -}else{ - foreach ($validation->getError() as $err) { - echo $err . "
\n"; - } -} -``` -**Again Usage** -```php -require_once "vendor/autoload.php"; -use \InitPHP\Validation\Validation; - -$validation = new Validation($_GET); - -// GET /?password=123a456&password_again=123a456 - -$validation->rule('password', 'string'); -$validation->rule('password', 'again(password_again)'); - if($validation->validation()){ // ... process }else{ @@ -124,6 +104,8 @@ if($validation->validation()){ } ``` +**_You can review the `tests/Validation/ValidationUnitTest.php` file to view sample usages._** + ## Getting Help If you have questions, concerns, bug reports, etc, please file an issue in this repository's Issue Tracker. diff --git a/composer.json b/composer.json index 2417d68..4231250 100644 --- a/composer.json +++ b/composer.json @@ -8,6 +8,11 @@ "InitPHP\\Validation\\": "src/" } }, + "autoload-dev": { + "psr-4": { + "Tests\\InitPHP\\Validation\\": "tests/Validation/" + } + }, "authors": [ { "name": "Muhammet ŞAFAK", @@ -20,5 +25,8 @@ "require": { "php": ">=7.4", "ext-mbstring": "*" + }, + "require-dev": { + "phpunit/phpunit": "9.5" } } diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..8429fdc --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,8 @@ + + + + + tests/Validation + + + \ No newline at end of file diff --git a/src/LocaleTrait.php b/src/LocaleTrait.php index bac182b..61aff0d 100644 --- a/src/LocaleTrait.php +++ b/src/LocaleTrait.php @@ -7,7 +7,7 @@ * @author Muhammet ŞAFAK * @copyright Copyright © 2022 InitPHP * @license http://initphp.github.io/license.txt MIT - * @version 1.0 + * @version 1.0.2 * @link https://www.muhammetsafak.com.tr */ diff --git a/src/RulesTrait.php b/src/RulesTrait.php index 027ad76..fb05fe0 100644 --- a/src/RulesTrait.php +++ b/src/RulesTrait.php @@ -7,7 +7,7 @@ * @author Muhammet ŞAFAK * @copyright Copyright © 2022 InitPHP * @license http://initphp.github.io/license.txt MIT - * @version 1.0 + * @version 1.0.2 * @link https://www.muhammetsafak.com.tr */ @@ -65,7 +65,7 @@ trait RulesTrait ], ]; - private array $patterns = [ + protected array $patterns = [ 'uri' => '[A-Za-z0-9-\/_?&=]+', 'slug' => '[-a-z0-9_-]', 'url' => '[A-Za-z0-9-:.\/_?&=#]+', @@ -81,7 +81,7 @@ trait RulesTrait 'address' => '[\p{L}0-9\s.,()°-]+', 'date_dmy' => '[0-9]{1,2}\-[0-9]{1,2}\-[0-9]{4}', 'date_ymd' => '[0-9]{4}\-[0-9]{1,2}\-[0-9]{1,2}', - 'email' => '[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+[.]+[a-z-A-Z]' + 'email' => '[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+[.]?[a-z-A-Z]?' ]; protected function rule_integer($data): bool @@ -167,13 +167,19 @@ protected function rule_mail($data): bool return (bool)filter_var((string)$data, FILTER_VALIDATE_EMAIL); } - protected function rule_mailhost($data, $domain): bool + protected function rule_mailhost($data, ...$domain): bool { if(filter_var($data, FILTER_VALIDATE_EMAIL)){ - $parse = explode('@', $data); - $parseDNS = $parse[1] ?? null; - if(trim($parseDNS) === trim($domain)){ - return true; + $parse = explode('@', $data, 2); + $mailHost = trim(($parse[1] ?? '')); + foreach ($domain as $host) { + $host = trim($host); + if(empty($host)){ + continue; + } + if($mailHost === $host){ + return true; + } } } return false; @@ -184,15 +190,21 @@ protected function rule_url($data): bool return (bool)filter_var((string)$data, FILTER_VALIDATE_URL); } - protected function rule_urlhost($data, $domain): bool + protected function rule_urlhost($data, ...$domains): bool { if(filter_var($data, FILTER_VALIDATE_URL)){ $host = parse_url($data, PHP_URL_HOST); - if($host === $domain){ - return true; - } - if(mb_substr($host, -(mb_strlen($domain) + 1)) === '.' . $domain){ - return true; + foreach ($domains as $domain) { + $domain = trim($domain); + if(empty($domain)){ + continue; + } + if($domain === $host){ + return true; + } + if(mb_substr($host, (0 - (mb_strlen($domain) + 1))) === '.' . $domain){ + return true; + } } } return false; @@ -360,7 +372,7 @@ protected function rule_endwith($data, $endWith): bool protected function rule_in($data, $search): bool { - if(is_string($data) && is_numeric($data)){ + if(is_string($data) || is_numeric($data)){ return mb_stripos((string)$data, (string)$search) !== FALSE; } if(is_array($data)){ diff --git a/src/Validation.php b/src/Validation.php index 1d2ba65..f98eb19 100644 --- a/src/Validation.php +++ b/src/Validation.php @@ -7,7 +7,7 @@ * @author Muhammet ŞAFAK * @copyright Copyright © 2022 InitPHP * @license http://initphp.github.io/license.txt MIT - * @version 1.0 + * @version 1.0.2 * @link https://www.muhammetsafak.com.tr */ @@ -81,6 +81,13 @@ public function clear(): self return $this; } + public function pattern(string $name, string $pattern = '[\w]+'): self + { + $name = strtolower($name); + $this->patterns[$name] = $pattern; + return $this; + } + /** * @param string|string[] $key * @param string|callable|string[]|callable[] $rule @@ -140,6 +147,7 @@ public function validation(): bool $this->callableProcessValidation($rule); } } + $this->rule = []; return empty($this->error); } diff --git a/tests/Validation/ValidationUnitTest.php b/tests/Validation/ValidationUnitTest.php new file mode 100644 index 0000000..7ae9595 --- /dev/null +++ b/tests/Validation/ValidationUnitTest.php @@ -0,0 +1,725 @@ +validation = new Validation(); + parent::setUp(); + } + + public function testFloatRuleValid() + { + $this->validation->setData([ + 'id' => '12', // Every integer is also a float value. + 'name' => 'product', + 'price' => '13.50', + 'discount' => '-2.00', + ]); + + $this->validation->rule('id', 'float'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('name', 'float'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('price', 'float'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('discount', 'float'); + $this->assertTrue($this->validation->validation()); + } + + public function testIntegerRuleValid() + { + $this->validation->setData([ + 'id' => '12', + 'name' => 'product', + 'price' => '13.50', + 'discount' => '-2.00', + ]); + + $this->validation->rule('id', 'integer'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('name', 'integer'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('price', 'integer'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('discount', 'integer'); + $this->assertFalse($this->validation->validation()); + } + + public function testAlphaRuleValid() + { + $this->validation->setData([ + 'id' => '12', + 'name' => 'product', + 'title' => 'Product Name' // The space character is not an alphabetic value. + ]); + + $this->validation->rule('id', 'alpha'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('name', 'alpha'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('title', 'alpha'); + $this->assertFalse($this->validation->validation()); + + } + + public function testAlphaNumRuleValid() + { + $this->validation->setData([ + 'id' => '12', + 'name' => 'product', + 'title' => 'Product Name' // The space character is not an alphanumeric value. + ]); + + $this->validation->rule('id', 'alphanum'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('name', 'alphanum'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('title', 'alphanum'); + $this->assertFalse($this->validation->validation()); + + } + + public function testNumericRuleValid() + { + $this->validation->setData([ + 'id' => '12', + 'name' => 'Product', + 'price' => '19.99', + 'discount' => '-2.00', + ]); + + $this->validation->rule('id', 'numeric'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('name', 'numeric'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('price', 'numeric'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('discount', 'numeric'); + $this->assertTrue($this->validation->validation()); + } + + public function testCreditCardRuleValid() + { + $this->validation->setData([ + 'id' => '12334', + 'name' => 'John', + 'amex_card' => '3700 0000 0000 002', + 'jcb_card' => '3569 9900 1009 5841', + 'maestro_card' => '6761 7980 2100 0008', + 'master_card' => '5577 0000 5577 0004', + 'visa_card' => '4988 4388 4388 4305', + ]); + + $this->validation->rule('id', 'creditcard'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('name', 'creditcard'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('amex_card', 'creditcard'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('amex_card', 'creditcard(amex)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('jcb_card', 'creditcard'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('jcb_card', 'creditcard(jcb)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('maestro_card', 'creditcard'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('maestro_card', 'creditcard(maestro)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('master_card', 'creditcard'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('master_card', 'creditcard(mastercard)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('visa_card', 'creditcard'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('visa_card', 'creditcard(visa)'); + $this->assertTrue($this->validation->validation()); + } + + public function testStringRuleValid() + { + // This validation method tests the type of data. + + $this->validation->setData([ + 'id' => 12, // It is an integer, not a string + 'name' => 'admin', + 'time' => '12345678901' // This is a string. + ]); + + $this->validation->rule('id', 'string'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('name', 'string'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('time', 'string'); + $this->assertTrue($this->validation->validation()); + } + + public function testBooleanRuleValid() + { + // All values defined below are considered boolean. + $this->validation->setData([ + 'key_1' => 0, + 'key_2' => 1, + 'key_3' => true, + 'key_4' => false, + 'key_5' => '0', + 'key_6' => '1', + 'key_7' => 'true', + 'key_8' => 'false', + ]); + + $this->validation->rule('key_1', 'boolean'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'boolean'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'boolean'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_4', 'boolean'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_5', 'boolean'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_6', 'boolean'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_7', 'boolean'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_8', 'boolean'); + $this->assertTrue($this->validation->validation()); + + } + + public function testMailRuleValid() + { + $this->validation->setData([ + 'mail_1' => 'example@gmail.com', + 'mail_2' => 'example@outlook.com', + 'mail_3' => 'random value' + ]); + + $this->validation->rule('mail_1', 'mail'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('mail_1', 'mailHost(gmail.com)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('mail_1', 'mailHost(hotmail.com)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('mail_1', 'mailHost(outlook.com,hotmail.com,google.com)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('mail_1', 'mailHost(outlook.com,hotmail.com,gmail.com)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('mail_2', 'mail'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('mail_2', 'mailHost(outlook.com)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('mail_2', 'mailHost(gmail.com)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('mail_3', 'mail'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('mail_3', 'mailHost(gmail.com)'); + $this->assertFalse($this->validation->validation()); + } + + public function testUrlRuleValid() + { + $this->validation->setData([ + 'url_1' => 'http://www.example.com', + 'url_2' => 'http://www.example.com/path?x=y', + ]); + + $this->validation->rule('url_1', 'url'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('url_2', 'url'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('url_1', 'urlHost(google.com)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('url_1', 'urlHost(example.com)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('url_1', 'urlHost(google.com,yahoo.com)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('url_1', 'urlHost(google.com,example.com)'); + $this->assertTrue($this->validation->validation()); + } + + public function testEmptyRuleValid() + { + $this->validation->setData([ + 'key_1' => ' ', // An empty string is an empty value. + 'key_2' => 'abc' + ]); + + $this->validation->rule('key_1', 'empty'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'required'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'empty'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'required'); + $this->assertTrue($this->validation->validation()); + } + + public function testMinRuleValid() + { + $this->validation->setData([ + 'key_1' => '3.14', + 'key_2' => 5, + 'key_3' => 'a string value', // This is a 14-character alphanumeric string. So the number of characters is considered a value. + ]); + + $this->validation->rule('key_1', 'min(3.14)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'min(2)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'min(5)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'min(5.1)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_3', 'min(14)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'min(15)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_3', 'min(10)'); + $this->assertTrue($this->validation->validation()); + } + + public function testMaxRuleValid() + { + $this->validation->setData([ + 'key_1' => '3.14', + 'key_2' => 5, + 'key_3' => 'a string value', // This is a 14-character alphanumeric string. So the number of characters is considered a value. + ]); + + $this->validation->rule('key_1', 'max(3.14)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'max(2)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'max(5)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'max(5.1)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'max(14)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'max(15)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'max(10)'); + $this->assertFalse($this->validation->validation()); + + } + + public function testRangeRuleValid() + { + $this->validation->setData([ + 'key_1' => '3.14', + 'key_2' => 5, + 'key_3' => 'a string value', // Because an alphanumeric is a string, it cannot be used with range(). + ]); + + $this->validation->rule('key_1', 'range(2...5)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'range(1...3)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'range(4...10)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'range(0...100)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'range(5...255)'); + $this->assertFalse($this->validation->validation()); + } + + public function testLengthRuleValid() + { + $this->validation->setData([ + 'key_1' => '3.14', // a 4-character string + 'key_2' => 5, // a 1-character string + 'key_3' => 'a string value', // a 14-character string. + ]); + + $this->validation->rule('key_1', 'length(2...5)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'length(1...3)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'length(5...10)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'length(1...100)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'length(5...255)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'length(...255)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'length(10...)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'length(15...)'); + $this->assertFalse($this->validation->validation()); + } + + public function testRegexRuleValid() + { + $this->validation->setData([ + 'key_1' => '13', + 'key_2' => 'admin', + 'key_3' => 'example@example.com', + ]); + + $this->validation->pattern('custom_int', '[0-9]+') + ->rule('key_1', 'regex(custom_int)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->pattern('alphanumeric', '[a-zA-Z0-9.,]+') + ->rule('key_2', 'regex(alphanumeric)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->pattern('numeric', '[\d]+') + ->rule('key_2', 'regex(numeric)'); + $this->assertFalse($this->validation->validation()); + + // "email" is a default regex. + $this->validation->rule('key_3', 'regex(email)'); + $this->assertTrue($this->validation->validation()); + } + + public function testDateRuleValid() + { + $this->validation->setData([ + 'key_1' => '2022/01/01', + 'key_2' => '2020-03-03', + 'key_3' => '10 September 2000', + 'key_4' => 'not good', // false + 'key_5' => 'next Thursday' + ]); + $this->validation->rule('key_1', 'date'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'date'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'date'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_4', 'date'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_5', 'date'); + $this->assertTrue($this->validation->validation()); + } + + public function testDateFormatRuleValid() + { + $this->validation->setData([ + 'key_1' => '2022/01/01' + ]); + + $this->validation->rule('key_1', 'dateFormat(Y/m/d)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'dateFormat(d/m/Y)'); + $this->assertFalse($this->validation->validation()); + } + + public function testIPsRuleValid() + { + $this->validation->setData([ + 'key_1' => '111.111.11.11', + 'key_2' => '2001:98:0:1:0:12:144.122.199.90', + 'key_3' => '2001:98:A11:10:11:1:0:106', + ]); + + $this->validation->rule('key_1', 'ip'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'ip'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'ip'); + $this->assertTrue($this->validation->validation()); + + + $this->validation->rule('key_1', 'ipv4'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'ipv4'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_3', 'ipv4'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'ipv6'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'ipv6'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_3', 'ipv6'); + $this->assertTrue($this->validation->validation()); + } + + public function testOnlyRuleValid() + { + $this->validation->setData([ + 'key_1' => 'Hamburger' + ]); + + $this->validation->rule('key_1', 'only(food,tea,meat)'); + $this->assertFalse($this->validation->validation()); + + // The only() method tries to match case-insensitively. + $this->validation->rule('key_1', 'only(hamburger,pizza)'); + $this->assertTrue($this->validation->validation()); + + // strictOnly() tries to match in a case sensitive way. + $this->validation->rule('key_1', 'strictOnly(hamburger, pizza)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'strictOnly(Hamburger,Pizza)'); + $this->assertTrue($this->validation->validation()); + } + + public function testAgainRuleValid() + { + $this->validation->setData([ + 'password' => '123b456', + 'password_again' => '123a45', + 'mail' => 'example@example.com', + 'mail_retype' => 'example@example.com' + ]); + + $this->validation->rule('password', 'again(password_again)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('mail', 'again(mail_retype)'); + $this->assertTrue($this->validation->validation()); + } + + public function testEqualsRuleValid() + { + $this->validation->setData([ + 'key_1' => '123', + 'key_2' => 'example@example.com', + ]); + + $this->validation->rule('key_1', 'equals(1234)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'equals(example@example.com)'); + $this->assertTrue($this->validation->validation()); + } + + public function testStartWithRuleValid() + { + $this->validation->setData([ + 'key_1' => '12345', + 'key_2' => 'lorem ipsum dolor sit amet' + ]); + + $this->validation->rule('key_1', 'startWith(345)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'startWith(12)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'startWith(lorem ipsum)'); + $this->assertTrue($this->validation->validation()); + } + + public function testEndWithRuleValid() + { + $this->validation->setData([ + 'key_1' => '12345', + 'key_2' => 'lorem ipsum dolor sit amet' + ]); + + $this->validation->rule('key_1', 'endWith(345)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'endWith(12)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'endWith(lorem ipsum)'); + $this->assertFalse($this->validation->validation()); + } + + public function testInRuleValid() + { + $this->validation->setData([ + 'key_1' => '12345', + 'key_2' => 'Lorem ipsum Dolor sit amet' + ]); + + // Verifies that the desired value is within the specified value, case-insensitive. + + $this->validation->rule('key_1', 'in(345)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'in(12)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'in(34)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'in(43)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'in(dolor)'); + $this->assertTrue($this->validation->validation()); + } + + public function testNotInRuleValid() + { + $this->validation->setData([ + 'key_1' => '12345', + 'key_2' => 'Lorem ipsum Dolor sit amet' + ]); + + // Verifies case-insensitively that the requested value is not within the specified value. + + $this->validation->rule('key_1', 'notIn(345)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'notIn(12)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'notIn(34)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'notIn(43)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'notIn(dolor)'); + $this->assertFalse($this->validation->validation()); + } + + public function testContainsRuleValid() + { + $this->validation->setData([ + 'key_1' => '12345', + 'key_2' => 'Lorem ipsum Dolor sit amet' + ]); + + // Verifies case sensitive that the requested value is within the specified value. + + $this->validation->rule('key_1', 'contains(345)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'contains(12)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'contains(34)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_1', 'contains(43)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'contains(dolor)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_2', 'contains(Dolor)'); + $this->assertTrue($this->validation->validation()); + } + + public function testNotContainsRuleValid() + { + $this->validation->setData([ + 'key_1' => '12345', + 'key_2' => 'Lorem ipsum Dolor sit amet' + ]); + + // Verifies case sensitive that the requested value is not within the specified value. + + $this->validation->rule('key_1', 'notContains(345)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'notContains(12)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'notContains(34)'); + $this->assertFalse($this->validation->validation()); + + $this->validation->rule('key_1', 'notContains(43)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'notContains(dolor)'); + $this->assertTrue($this->validation->validation()); + + $this->validation->rule('key_2', 'notContains(Dolor)'); + $this->assertFalse($this->validation->validation()); + } + +}