Skip to content

Commit 942ddc9

Browse files
committed
Added tests for AndRule and OrRule
1 parent ef482c9 commit 942ddc9

File tree

5 files changed

+156
-3
lines changed

5 files changed

+156
-3
lines changed

src/Validation/Rules/StringRule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public static function make(?array $parameters = null): self
4343

4444
/** @var 'string' | 'alpha' $strType */
4545
$strPattern = match ($strType) {
46-
self::TYPE_STRING => '[a-zA-Z]',
46+
self::TYPE_STRING => '.',
4747
self::TYPE_ALPHA => '[a-zA-Z0-9]'
4848
};
4949

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
namespace Nuxtifyts\PhpDto\Tests\Unit\Validation\Logical;
4+
5+
use Nuxtifyts\PhpDto\Exceptions\LogicalRuleException;
6+
use Nuxtifyts\PhpDto\Validation\Contracts\RuleEvaluator;
7+
use Nuxtifyts\PhpDto\Validation\Logic\AndRule;
8+
use Nuxtifyts\PhpDto\Validation\Logic\LogicalRule;
9+
use Nuxtifyts\PhpDto\Validation\Rules\EmailRule;
10+
use Nuxtifyts\PhpDto\Validation\Rules\StringRule;
11+
use PHPUnit\Framework\Attributes\CoversClass;
12+
use PHPUnit\Framework\Attributes\UsesClass;
13+
use Throwable;
14+
15+
#[CoversClass(AndRule::class)]
16+
#[UsesClass(StringRule::class)]
17+
#[UsesClass(EmailRule::class)]
18+
final class AndRuleTest extends LogicalRuleTestCase
19+
{
20+
21+
/**
22+
* @return array<string, array{
23+
* logicalRuleClassString: class-string<LogicalRule>,
24+
* ruleEvaluators: list<RuleEvaluator>,
25+
* expectedCreateException: ?class-string<LogicalRuleException>,
26+
* valueToBeEvaluated: mixed,
27+
* expectedResult: bool,
28+
* expectedValidationMessageTree: array<string, mixed>
29+
* }>
30+
*
31+
* @throws Throwable
32+
*/
33+
public static function data_provider(): array
34+
{
35+
return [
36+
'Will be able to use validation rules' => [
37+
'logicalRuleClassString' => AndRule::class,
38+
'ruleEvaluators' => [
39+
$stringRule = StringRule::make(),
40+
$emailRule = EmailRule::make()
41+
],
42+
'expectedCreateException' => null,
43+
'valueToBeEvaluated' => 'string',
44+
'expectedResult' => false,
45+
'expectedValidationMessageTree' => [
46+
'and' => [
47+
$stringRule->name => $stringRule->validationMessage(),
48+
$emailRule->name => $emailRule->validationMessage()
49+
]
50+
]
51+
],
52+
'Will be able to use validation rules 2' => [
53+
'logicalRuleClassString' => AndRule::class,
54+
'ruleEvaluators' => [
55+
$stringRule = StringRule::make(),
56+
$emailRule = EmailRule::make()
57+
],
58+
'expectedCreateException' => null,
59+
'valueToBeEvaluated' => '[email protected]',
60+
'expectedResult' => true,
61+
'expectedValidationMessageTree' => [
62+
'and' => [
63+
$stringRule->name => $stringRule->validationMessage(),
64+
$emailRule->name => $emailRule->validationMessage()
65+
]
66+
]
67+
]
68+
];
69+
}
70+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
namespace Nuxtifyts\PhpDto\Tests\Unit\Validation\Logical;
4+
5+
use Nuxtifyts\PhpDto\Exceptions\LogicalRuleException;
6+
use Nuxtifyts\PhpDto\Validation\Contracts\RuleEvaluator;
7+
use Nuxtifyts\PhpDto\Validation\Logic\LogicalRule;
8+
use Nuxtifyts\PhpDto\Validation\Logic\OrRule;
9+
use Nuxtifyts\PhpDto\Validation\Rules\NumericRule;
10+
use Nuxtifyts\PhpDto\Validation\Rules\StringRule;
11+
use PHPUnit\Framework\Attributes\CoversClass;
12+
use PHPUnit\Framework\Attributes\UsesClass;
13+
use Throwable;
14+
15+
#[CoversClass(OrRule::class)]
16+
#[UsesClass(StringRule::class)]
17+
#[UsesClass(NumericRule::class)]
18+
final class OrRuleTest extends LogicalRuleTestCase
19+
{
20+
/**
21+
* @return array<string, array{
22+
* logicalRuleClassString: class-string<LogicalRule>,
23+
* ruleEvaluators: list<RuleEvaluator>,
24+
* expectedCreateException: ?class-string<LogicalRuleException>,
25+
* valueToBeEvaluated: mixed,
26+
* expectedResult: bool,
27+
* expectedValidationMessageTree: array<string, mixed>
28+
* }>
29+
*
30+
* @throws Throwable
31+
*/
32+
public static function data_provider(): array
33+
{
34+
return [
35+
'Will be able to use validation rules' => [
36+
'logicalRuleClassString' => OrRule::class,
37+
'ruleEvaluators' => [
38+
$stringRule = StringRule::make(),
39+
$numericRule = NumericRule::make()
40+
],
41+
'expectedCreateException' => null,
42+
'valueToBeEvaluated' => 'string',
43+
'expectedResult' => true,
44+
'expectedValidationMessageTree' => [
45+
'or' => [
46+
$stringRule->name => $stringRule->validationMessage(),
47+
$numericRule->name => $numericRule->validationMessage()
48+
]
49+
]
50+
],
51+
'Will be able to use validation rules 2' => [
52+
'logicalRuleClassString' => OrRule::class,
53+
'ruleEvaluators' => [
54+
$stringRule,
55+
$numericRule
56+
],
57+
'expectedCreateException' => null,
58+
'valueToBeEvaluated' => 1234,
59+
'expectedResult' => true,
60+
'expectedValidationMessageTree' => [
61+
'or' => [
62+
$stringRule->name => $stringRule->validationMessage(),
63+
$numericRule->name => $numericRule->validationMessage()
64+
]
65+
]
66+
],
67+
'Will be able to use validation rule 3' => [
68+
'logicalRuleClassString' => OrRule::class,
69+
'ruleEvaluators' => [
70+
$numericRule
71+
],
72+
'expectedCreateException' => null,
73+
'valueToBeEvaluated' => 1234.45,
74+
'expectedResult' => false,
75+
'expectedValidationMessageTree' => [
76+
'or' => [
77+
$numericRule->name => $numericRule->validationMessage()
78+
]
79+
]
80+
]
81+
];
82+
}
83+
}

tests/Unit/Validation/Logical/SingularLogicalRuleTest.php renamed to tests/Unit/Validation/Logical/SingularRuleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#[UsesClass(OrRule::class)]
2222
#[UsesClass(AndRule::class)]
2323
#[UsesClass(OrRule::class)]
24-
final class SingularLogicalRuleTest extends LogicalRuleTestCase
24+
final class SingularRuleTest extends LogicalRuleTestCase
2525
{
2626
/**
2727
* @return array<string, array{

tests/Unit/Validation/Rules/StringRuleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static function data_provider(): array
4040
'validationRuleClassString' => StringRule::class,
4141
'makeParams' => null,
4242
'expectedMakeException' => null,
43-
'valueToBeEvaluated' => 'test1234',
43+
'valueToBeEvaluated' => null,
4444
'expectedResult' => false
4545
],
4646
'Will evaluate true when a string value is provided' => [

0 commit comments

Comments
 (0)