Skip to content

Commit e08f32f

Browse files
committed
Add DateRule validation and corresponding tests; refactor validation test cases
1 parent f841242 commit e08f32f

File tree

7 files changed

+118
-7
lines changed

7 files changed

+118
-7
lines changed

clover.xml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<coverage generated="1736375439">
3-
<project timestamp="1736375439">
2+
<coverage generated="1736423484">
3+
<project timestamp="1736423484">
44
<package name="Nuxtifyts\PhpDto\Attributes\Class">
55
<file name="/Users/faroukbraik/Dev/php-dto/src/Attributes/Class/MapName.php">
66
<class name="Nuxtifyts\PhpDto\Attributes\Class\MapName" namespace="Nuxtifyts\PhpDto\Attributes\Class">
@@ -1727,6 +1727,18 @@
17271727
<line num="85" type="stmt" count="1"/>
17281728
<metrics loc="89" ncloc="79" classes="1" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="33" coveredstatements="33" elements="36" coveredelements="36"/>
17291729
</file>
1730+
<file name="/Users/faroukbraik/Dev/php-dto/src/Validation/Rules/DateRule.php">
1731+
<class name="Nuxtifyts\PhpDto\Validation\Rules\DateRule" namespace="Nuxtifyts\PhpDto\Validation\Rules">
1732+
<metrics complexity="4" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="3" coveredstatements="3" elements="6" coveredelements="6"/>
1733+
</class>
1734+
<line num="13" type="method" name="evaluate" visibility="public" complexity="2" crap="2" count="4"/>
1735+
<line num="15" type="stmt" count="4"/>
1736+
<line num="21" type="method" name="make" visibility="public" complexity="1" crap="1" count="5"/>
1737+
<line num="23" type="stmt" count="5"/>
1738+
<line num="26" type="method" name="validationMessage" visibility="public" complexity="1" crap="1" count="1"/>
1739+
<line num="28" type="stmt" count="1"/>
1740+
<metrics loc="31" ncloc="28" classes="1" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="3" coveredstatements="3" elements="6" coveredelements="6"/>
1741+
</file>
17301742
<file name="/Users/faroukbraik/Dev/php-dto/src/Validation/Rules/NullableRule.php">
17311743
<class name="Nuxtifyts\PhpDto\Validation\Rules\NullableRule" namespace="Nuxtifyts\PhpDto\Validation\Rules">
17321744
<metrics complexity="3" methods="3" coveredmethods="3" conditionals="0" coveredconditionals="0" statements="3" coveredstatements="3" elements="6" coveredelements="6"/>
@@ -1763,6 +1775,6 @@
17631775
<metrics loc="9" ncloc="9" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
17641776
</file>
17651777
</package>
1766-
<metrics files="83" loc="4250" ncloc="3605" classes="65" methods="176" coveredmethods="145" conditionals="0" coveredconditionals="0" statements="1079" coveredstatements="993" elements="1255" coveredelements="1138"/>
1778+
<metrics files="84" loc="4281" ncloc="3633" classes="66" methods="179" coveredmethods="148" conditionals="0" coveredconditionals="0" statements="1082" coveredstatements="996" elements="1261" coveredelements="1144"/>
17671779
</project>
17681780
</coverage>

src/Validation/Rules/DateRule.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace Nuxtifyts\PhpDto\Validation\Rules;
4+
5+
class DateRule implements ValidationRule
6+
{
7+
public string $name {
8+
get {
9+
return 'date';
10+
}
11+
}
12+
13+
public function evaluate(mixed $value): bool
14+
{
15+
return is_string($value) && strtotime($value) !== false;
16+
}
17+
18+
/**
19+
* @param ?array<string, mixed> $parameters
20+
*/
21+
public static function make(?array $parameters = null): self
22+
{
23+
return new self();
24+
}
25+
26+
public function validationMessage(): string
27+
{
28+
return 'The :attribute must be a valid date.';
29+
}
30+
}

tests/Unit/Validation/BackedEnumRuleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#[CoversClass(ValidationRuleException::class)]
1717
#[UsesClass(YesNoBackedEnum::class)]
1818
#[UsesClass(YesNoEnum::class)]
19-
final class BackedEnumRuleTest extends ValidationRuleUnitCase
19+
final class BackedEnumRuleTest extends ValidationRuleTestCase
2020
{
2121
/**
2222
* @throws Throwable
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
namespace Nuxtifyts\PhpDto\Tests\Unit\Validation;
4+
5+
use Nuxtifyts\PhpDto\Validation\Rules\DateRule;
6+
use PHPUnit\Framework\Attributes\CoversClass;
7+
use PHPUnit\Framework\Attributes\Test;
8+
use Throwable;
9+
10+
#[CoversClass(DateRule::class)]
11+
final class DateRuleTest extends ValidationRuleTestCase
12+
{
13+
/**
14+
* @throws Throwable
15+
*/
16+
#[Test]
17+
public function validate_validation_message(): void
18+
{
19+
$rule = DateRule::make();
20+
21+
self::assertEquals(
22+
'The :attribute must be a valid date.',
23+
$rule->validationMessage()
24+
);
25+
}
26+
27+
/**
28+
* @return array<string, array{
29+
* validationRuleClassString: class-string<ValidationRule>,
30+
* makeParams: ?array<string, mixed>,
31+
* expectedMakeException: ?class-string<ValidationRuleException>,
32+
* valueToBeEvaluated: mixed,
33+
* expectedResult: bool
34+
* }>
35+
*/
36+
public static function data_provider(): array
37+
{
38+
return [
39+
'Will evaluate false when value is not a valid datetime string' => [
40+
'validationRuleClassString' => DateRule::class,
41+
'makeParams' => null,
42+
'expectedMakeException' => null,
43+
'valueToBeEvaluated' => 'not-a-valid-datetime-string',
44+
'expectedResult' => false
45+
],
46+
'Will evaluate true when a valid datetime string is provided (Y-m-d)' => [
47+
'validationRuleClassString' => DateRule::class,
48+
'makeParams' => null,
49+
'expectedMakeException' => null,
50+
'valueToBeEvaluated' => '2021-01-01',
51+
'expectedResult' => true
52+
],
53+
'Will evaluate true when a valid datetime string is provided (ATOM)' => [
54+
'validationRuleClassString' => DateRule::class,
55+
'makeParams' => null,
56+
'expectedMakeException' => null,
57+
'valueToBeEvaluated' => '2021-01-01T00:00:00+00:00',
58+
'expectedResult' => true
59+
],
60+
'Will evaluate true when a valid datetime string is provided (Y-m-d H:m:s)' => [
61+
'validationRuleClassString' => DateRule::class,
62+
'makeParams' => null,
63+
'expectedMakeException' => null,
64+
'valueToBeEvaluated' => '2021-01-01 00:00:00',
65+
'expectedResult' => true
66+
],
67+
];
68+
}
69+
}

tests/Unit/Validation/NullableRuleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use Throwable;
1111

1212
#[CoversClass(NullableRule::class)]
13-
final class NullableRuleTest extends ValidationRuleUnitCase
13+
final class NullableRuleTest extends ValidationRuleTestCase
1414
{
1515
/**
1616
* @throws Throwable

tests/Unit/Validation/RequiredRuleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use Throwable;
1111

1212
#[CoversClass(RequiredRule::class)]
13-
final class RequiredRuleTest extends ValidationRuleUnitCase
13+
final class RequiredRuleTest extends ValidationRuleTestCase
1414
{
1515
/**
1616
* @throws Throwable

tests/Unit/Validation/ValidationRuleUnitCase.php renamed to tests/Unit/Validation/ValidationRuleTestCase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use PHPUnit\Framework\Attributes\Test;
1010
use Throwable;
1111

12-
abstract class ValidationRuleUnitCase extends UnitCase
12+
abstract class ValidationRuleTestCase extends UnitCase
1313
{
1414
abstract function validate_validation_message(): void;
1515

0 commit comments

Comments
 (0)