Skip to content

Commit 4ed35a8

Browse files
authored
Merge pull request #1 from EscuelaIt/integer-rule
Create integer rule
2 parents b755093 + 53ed66d commit 4ed35a8

File tree

4 files changed

+55
-1
lines changed

4 files changed

+55
-1
lines changed

src/Rules/IntegerRule.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Escuelait\MagnificValidator\Rules;
4+
5+
class IntegerRule implements ValidationRule {
6+
7+
public function validate(mixed $input) : bool {
8+
return filter_var($input, FILTER_VALIDATE_INT) !== false;
9+
}
10+
11+
public function message() : string {
12+
return 'The input should be an integer';
13+
}
14+
}

src/Rules/RuleParser.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public function parseRules(array $rules) :array {
88
return match(true) {
99
$rule == 'email' => new EmailRule(),
1010
$rule == 'url' => new UrlRule(),
11+
$rule == 'integer' => new IntegerRule(),
1112
$rule == 'required' => new RequiredRule(),
1213
str_starts_with($rule, 'max:') => new MaxRule((int) substr($rule, 4)),
1314
default => throw new \InvalidArgumentException("Unknown rule: $rule"),

tests/MagnificValidatorTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ public static function validInputProvider() :array {
1818
['https://escuela.it', ['url', 'required']],
1919
['https://escuela.it/algo', ['url']],
2020
['Algo que quiero validar', ['required', 'max:40']],
21-
['80', ['required', 'max:100']],
21+
['80', ['integer', 'required', 'max:100']],
2222
['https://escuela.it', ['url', 'required', 'max:200']],
23+
[34, ['required', 'integer']],
2324
];
2425
}
2526

@@ -39,6 +40,8 @@ public static function invalidInputProvider() :array {
3940
['no_es_un_email', ['email', 'required']],
4041
['escuela.it', ['url', 'required']],
4142
['Algo que quiero validar', ['required', 'max:10']],
43+
['234a', ['required', 'integer']],
44+
['', ['integer']],
4245
[1, ['required', 'max:0']],
4346
];
4447
}

tests/Rules/IntegerRuleTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace Escuelait\Tests\MagnificValidator\Rules;
4+
5+
use PHPUnit\Framework\TestCase;
6+
use PHPUnit\Framework\Attributes\Test;
7+
use Escuelait\MagnificValidator\Rules\IntegerRule;
8+
9+
class IntegerRuleTest extends TestCase {
10+
11+
#[Test]
12+
public function itValidatesCorrectIntegers() {
13+
$integerRule = new IntegerRule();
14+
15+
$this->assertTrue($integerRule->validate(123));
16+
$this->assertTrue($integerRule->validate('456'));
17+
$this->assertTrue($integerRule->validate(0));
18+
$this->assertTrue($integerRule->validate(-789));
19+
}
20+
21+
#[Test]
22+
public function itValidatesIncorrectIntegers() {
23+
$integerRule = new IntegerRule();
24+
25+
$this->assertFalse($integerRule->validate(12.34));
26+
$this->assertFalse($integerRule->validate('abc'));
27+
$this->assertFalse($integerRule->validate('123abc'));
28+
$this->assertFalse($integerRule->validate(null));
29+
}
30+
31+
#[Test]
32+
public function itReturnsExpectedMessage() {
33+
$integerRule = new IntegerRule();
34+
$this->assertEquals('The input should be an integer', $integerRule->message());
35+
}
36+
}

0 commit comments

Comments
 (0)