Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit 19b6bf2

Browse files
committed
feat(tests): added Range tests
1 parent c16d183 commit 19b6bf2

File tree

2 files changed

+84
-1
lines changed

2 files changed

+84
-1
lines changed

src/Rule/Range.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public function __construct(
2323
$resolver = new OptionsResolver();
2424

2525
$resolver->setDefaults([
26-
'message' => 'The {{ name }} value should be between "{{ minConstraint }}" and "{{ maxConstraint }}", "{{ value }}" given.'
26+
'message' => 'The "{{ name }}" value should be between "{{ minConstraint }}" and "{{ maxConstraint }}", "{{ value }}" given.'
2727
]);
2828

2929
$resolver->setAllowedTypes('message', 'string');

tests/RangeTest.php

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
namespace ProgrammatorDev\YetAnotherPhpValidator\Test;
4+
5+
use ProgrammatorDev\YetAnotherPhpValidator\Exception\RangeException;
6+
use ProgrammatorDev\YetAnotherPhpValidator\Rule\Range;
7+
use ProgrammatorDev\YetAnotherPhpValidator\Test\Util\TestRuleFailureConditionTrait;
8+
use ProgrammatorDev\YetAnotherPhpValidator\Test\Util\TestRuleMessageOptionTrait;
9+
use ProgrammatorDev\YetAnotherPhpValidator\Test\Util\TestRuleSuccessConditionTrait;
10+
use ProgrammatorDev\YetAnotherPhpValidator\Test\Util\TestRuleUnexpectedValueTrait;
11+
12+
class RangeTest extends AbstractTest
13+
{
14+
use TestRuleUnexpectedValueTrait;
15+
use TestRuleFailureConditionTrait;
16+
use TestRuleSuccessConditionTrait;
17+
use TestRuleMessageOptionTrait;
18+
19+
public static function provideRuleUnexpectedValueData(): \Generator
20+
{
21+
$comparableMessage = '/Cannot compare a type "(.*)" with a type "(.*)"/';
22+
$constraintMessage = '/Max constraint value must be greater than min constraint value./';
23+
24+
yield 'datetime constraint with int constraint' => [new Range(new \DateTime(), 10), new \DateTime(), $comparableMessage];
25+
yield 'datetime constraint with float constraint' => [new Range(new \DateTime(), 10.0), new \DateTime(), $comparableMessage];
26+
yield 'datetime constraint with string constraint' => [new Range(new \DateTime(), 'a'), new \DateTime(), $comparableMessage];
27+
yield 'int constraint with string constraint' => [new Range(10, 'a'), 10, $comparableMessage];
28+
yield 'float constraint with string constraint' => [new Range(1.0, 'a'), 1.0, $comparableMessage];
29+
yield 'array constraint' => [new Range([10], 10), 10, $comparableMessage];
30+
yield 'null constraint' => [new Range(null, 10), 10, $comparableMessage];
31+
32+
yield 'min constraint greater than max constraint' => [new Range(10, 9), 10, $constraintMessage];
33+
}
34+
35+
public static function provideRuleFailureConditionData(): \Generator
36+
{
37+
$exception = RangeException::class;
38+
$message = '/The "(.*)" value should be between "(.*)" and "(.*)", "(.*)" given./';
39+
40+
yield 'min datetime' => [new Range(new \DateTime('today'), new \DateTime('tomorrow')), new \DateTime('yesterday'), $exception, $message];
41+
yield 'min int' => [new Range(10, 20), 1, $exception, $message];
42+
yield 'min float' => [new Range(10.0, 20.0), 1.0, $exception, $message];
43+
yield 'min int with float' => [new Range(10, 20), 1.0, $exception, $message];
44+
yield 'min string' => [new Range('b', 'z'), 'a', $exception, $message];
45+
yield 'max datetime' => [new Range(new \DateTime('today'), new \DateTime('tomorrow')), new \DateTime('+2 days'), $exception, $message];
46+
yield 'max int' => [new Range(10, 20), 30, $exception, $message];
47+
yield 'max float' => [new Range(10.0, 20.0), 30.0, $exception, $message];
48+
yield 'max int with float' => [new Range(10, 20), 30.0, $exception, $message];
49+
yield 'max string' => [new Range('a', 'y'), 'z', $exception, $message];
50+
}
51+
52+
public static function provideRuleSuccessConditionData(): \Generator
53+
{
54+
yield 'datetime' => [new Range(new \DateTime('today'), new \DateTime('tomorrow')), new \DateTime('+1 hour')];
55+
yield 'int' => [new Range(10, 20), 15];
56+
yield 'float' => [new Range(10.0, 20.0), 15.0];
57+
yield 'int with float' => [new Range(10, 20), 15.0];
58+
yield 'string' => [new Range('a', 'z'), 'b'];
59+
yield 'min datetime' => [new Range(new \DateTime('today'), new \DateTime('tomorrow')), new \DateTime('today')];
60+
yield 'min int' => [new Range(10, 20), 10];
61+
yield 'min float' => [new Range(10.0, 20.0), 10.0];
62+
yield 'min int with float' => [new Range(10, 20), 10.0];
63+
yield 'min string' => [new Range('a', 'z'), 'a'];
64+
yield 'max datetime' => [new Range(new \DateTime('today'), new \DateTime('tomorrow')), new \DateTime('tomorrow')];
65+
yield 'max int' => [new Range(10, 20), 20];
66+
yield 'max float' => [new Range(10.0, 20.0), 20.0];
67+
yield 'max int with float' => [new Range(10, 20), 20.0];
68+
yield 'max string' => [new Range('a', 'z'), 'z'];
69+
}
70+
71+
public static function provideRuleMessageOptionData(): \Generator
72+
{
73+
yield 'message' => [
74+
new Range(
75+
minConstraint: 10,
76+
maxConstraint: 20,
77+
options: [
78+
'message' => 'The "{{ name }}" value "{{ value }}" should be between "{{ minConstraint }}" and "{{ maxConstraint }}".'
79+
]
80+
), 30, 'The "test" value "30" should be between "10" and "20".'
81+
];
82+
}
83+
}

0 commit comments

Comments
 (0)