|
9 | 9 | use Illuminate\Support\Facades\Validator as ValidatorFacade;
|
10 | 10 | use Illuminate\Validation\Rules\Enum;
|
11 | 11 | use Illuminate\Validation\Rules\Exists as LaravelExists;
|
12 |
| - |
13 | 12 | use Illuminate\Validation\ValidationException;
|
14 | 13 | use Illuminate\Validation\Validator;
|
15 |
| - |
16 |
| -use function Pest\Laravel\mock; |
17 |
| -use function PHPUnit\Framework\assertFalse; |
18 |
| - |
19 | 14 | use Spatie\LaravelData\Attributes\DataCollectionOf;
|
20 |
| - |
21 | 15 | use Spatie\LaravelData\Attributes\MapInputName;
|
22 |
| - |
23 | 16 | use Spatie\LaravelData\Attributes\MapName;
|
24 | 17 | use Spatie\LaravelData\Attributes\Validation\ArrayType;
|
25 |
| - |
26 | 18 | use Spatie\LaravelData\Attributes\Validation\Bail;
|
27 |
| - |
28 | 19 | use Spatie\LaravelData\Attributes\Validation\Exists;
|
29 | 20 | use Spatie\LaravelData\Attributes\Validation\In;
|
30 |
| - |
31 | 21 | use Spatie\LaravelData\Attributes\Validation\IntegerType;
|
32 | 22 | use Spatie\LaravelData\Attributes\Validation\Max;
|
33 | 23 | use Spatie\LaravelData\Attributes\Validation\Min;
|
|
41 | 31 | use Spatie\LaravelData\Data;
|
42 | 32 | use Spatie\LaravelData\DataCollection;
|
43 | 33 | use Spatie\LaravelData\DataPipeline;
|
44 |
| - |
45 | 34 | use Spatie\LaravelData\DataPipes\AuthorizedDataPipe;
|
46 | 35 | use Spatie\LaravelData\DataPipes\CastPropertiesDataPipe;
|
47 | 36 | use Spatie\LaravelData\DataPipes\DefaultValuesDataPipe;
|
|
71 | 60 | use Spatie\LaravelData\Tests\Fakes\SimpleDataWithOverwrittenRules;
|
72 | 61 | use Spatie\LaravelData\Tests\Fakes\Support\FakeInjectable;
|
73 | 62 | use Spatie\LaravelData\Tests\TestSupport\DataValidationAsserter;
|
| 63 | +use function Pest\Laravel\mock; |
| 64 | +use function PHPUnit\Framework\assertFalse; |
74 | 65 |
|
75 | 66 | it('can validate a string', function () {
|
76 | 67 | $dataClass = new class () extends Data {
|
@@ -2169,3 +2160,43 @@ public static function rules(): array
|
2169 | 2160 | expect($validatorToPass->passes())->toBeTrue()
|
2170 | 2161 | ->and($validatorToFail->passes())->toBeFalse();
|
2171 | 2162 | });
|
| 2163 | + |
| 2164 | +it('wont validate default values when they are not provided', function () { |
| 2165 | + $dataClass = new class () extends Data { |
| 2166 | + #[Min(10)] |
| 2167 | + public string $default = 'Hello World'; |
| 2168 | + }; |
| 2169 | + |
| 2170 | + DataValidationAsserter::for($dataClass) |
| 2171 | + ->assertOk([]) |
| 2172 | + ->assertOk(['default' => 'Hi there in this world']) |
| 2173 | + ->assertErrors(['default' => 'minimal']) |
| 2174 | + ->assertErrors(['default' => null]) |
| 2175 | + ->assertRules([], payload: []) |
| 2176 | + ->assertRules([ |
| 2177 | + 'default' => ['required', 'string', 'min:10'], |
| 2178 | + ], ['default' => 'something']); |
| 2179 | +}); |
| 2180 | + |
| 2181 | +it('wont validate default values when they are not provided and rules are overwritten', function () { |
| 2182 | + $dataClass = new class () extends Data { |
| 2183 | + public string $default = 'Hello World'; |
| 2184 | + |
| 2185 | + public static function rules(ValidationContext $context): array |
| 2186 | + { |
| 2187 | + return [ |
| 2188 | + 'default' => ['required', 'string', 'min:10'], |
| 2189 | + ]; |
| 2190 | + } |
| 2191 | + }; |
| 2192 | + |
| 2193 | + DataValidationAsserter::for($dataClass) |
| 2194 | + ->assertOk([]) |
| 2195 | + ->assertOk(['default' => 'Hi there in this world']) |
| 2196 | + ->assertErrors(['default' => 'minimal']) |
| 2197 | + ->assertErrors(['default' => null]) |
| 2198 | + ->assertRules([], payload: []) |
| 2199 | + ->assertRules([ |
| 2200 | + 'default' => ['required', 'string', 'min:10'], |
| 2201 | + ], ['default' => 'something']); |
| 2202 | +}); |
0 commit comments