Skip to content

Commit f86a301

Browse files
Add CanValidateFormData test renderer for validation
1 parent 586e610 commit f86a301

File tree

5 files changed

+41
-2
lines changed

5 files changed

+41
-2
lines changed

resources/views/form-validation-rules.blade.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
describe('validation', function (): void {
2-
it('validates the form data', function (array $data, array $errors): void {
2+
it('validates the form :dataset:', function (array $data, array $errors): void {
33
$record = {{ $modelClass }}::factory()->create();
44
$newRecordData = {{ $modelClass }}::factory()->make();
55

@@ -16,4 +16,4 @@
1616
'`name` is max 255 characters' => [['name' => Str::random(256)], ['name' => 'max']],
1717
'`description` is max 255 characters' => [['description' => Str::random(256)], ['description' => 'max']],
1818
]);
19-
});
19+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
it('validates form data field :dataset', function (array $data, array $errors): void {
2+
$record = {{ $getResourceModel() }}::factory()->make();
3+
4+
livewire({{ $getPageClass('create') }}::class)
5+
->fillForm([
6+
...$data
7+
])
8+
->call('create')
9+
->assertHasFormErrors($errors)
10+
->assertNotified();
11+
})->with([
12+
@foreach($getResourceRequiredFormFields() as $key => $field)
13+
'`{{ $key }}` is required' => [['{{ $key }}' => null], ['{{ $key }}' => 'required']],
14+
@endforeach
15+
]);

src/Commands/FilamentTestsCommand.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use CodeWithDennis\FilamentTests\TestRenderers\BeforeEach;
99
use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Create\CanCreateRecordTest;
1010
use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Create\CanRenderCreatePageTest;
11+
use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Create\CanValidateFormData;
1112
use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\CanDeleteRecordTest;
1213
use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\CanRenderEditPageTest;
1314
use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\HasHeaderActionTest;
@@ -91,6 +92,7 @@ protected function getRenderers(): array
9192
HidesHeaderActionTest::class,
9293
HasFilterTest::class,
9394
CanCreateRecordTest::class,
95+
CanValidateFormData::class,
9496
];
9597
}
9698
}

src/Concerns/Resources/InteractsWithSchemas.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ public function getResourceFormFields(): array
2222
return $this->getResourceForm()->getFlatFields(true);
2323
}
2424

25+
public function getResourceRequiredFormFields(): array
26+
{
27+
return collect($this->getResourceFormFields())
28+
->filter(fn (Field $field): bool => $field->isRequired())
29+
->all();
30+
}
31+
2532
public function getResourceFormFieldKeys(): array
2633
{
2734
return collect($this->getResourceFormFields())
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Create;
4+
5+
use CodeWithDennis\FilamentTests\TestRenderers\BaseTest;
6+
7+
class CanValidateFormData extends BaseTest
8+
{
9+
public ?string $view = 'filament-tests::resources.pages.create.can-validate-form-data';
10+
11+
public function getShouldRender(): bool
12+
{
13+
return $this->hasPage('create');
14+
}
15+
}

0 commit comments

Comments
 (0)