From 6237f8bffb8cb934f17d93d38fe370ee40a81094 Mon Sep 17 00:00:00 2001 From: CodeWithDennis Date: Thu, 18 Sep 2025 14:52:28 +0200 Subject: [PATCH 1/3] Add CanUpdateRecordTest and CanValidateEditFormData --- .../pages/create/can-create-record.blade.php | 1 - .../can-validate-create-form-data.blade.php | 2 +- .../pages/edit/can-update-record.blade.php | 20 +++++++++++++++++ .../can-validate-edit-form-data.blade.php | 22 +++++++++++++++++++ src/Commands/FilamentTestsCommand.php | 4 ++++ .../Pages/Edit/CanUpdateRecordTest.php | 15 +++++++++++++ .../Pages/Edit/CanValidateEditFormData.php | 15 +++++++++++++ 7 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 resources/views/resources/pages/edit/can-update-record.blade.php create mode 100644 resources/views/resources/pages/edit/can-validate-edit-form-data.blade.php create mode 100644 src/TestRenderers/Resources/Pages/Edit/CanUpdateRecordTest.php create mode 100644 src/TestRenderers/Resources/Pages/Edit/CanValidateEditFormData.php diff --git a/resources/views/resources/pages/create/can-create-record.blade.php b/resources/views/resources/pages/create/can-create-record.blade.php index 2b8801d6..5c05c56d 100644 --- a/resources/views/resources/pages/create/can-create-record.blade.php +++ b/resources/views/resources/pages/create/can-create-record.blade.php @@ -1,4 +1,3 @@ -@php use Filament\Forms\Components\RichEditor; @endphp it('can create a record', function (): void { $record = {{ $getResourceModel() }}::factory()->make(); diff --git a/resources/views/resources/pages/create/can-validate-create-form-data.blade.php b/resources/views/resources/pages/create/can-validate-create-form-data.blade.php index 5dcf24d9..8adc53a1 100644 --- a/resources/views/resources/pages/create/can-validate-create-form-data.blade.php +++ b/resources/views/resources/pages/create/can-validate-create-form-data.blade.php @@ -1,4 +1,4 @@ -it('validates form data field :dataset', function (array $data, array $errors): void { +it('validates create form data field :dataset', function (array $data, array $errors): void { $record = {{ $getResourceModel() }}::factory()->make(); livewire({{ $getPageClass('create') }}::class) diff --git a/resources/views/resources/pages/edit/can-update-record.blade.php b/resources/views/resources/pages/edit/can-update-record.blade.php new file mode 100644 index 00000000..52ffdbdc --- /dev/null +++ b/resources/views/resources/pages/edit/can-update-record.blade.php @@ -0,0 +1,20 @@ +it('can update a record', function (): void { + $record = {{ $getResourceModel() }}::factory()->create(); + $newRecord = {{ $getResourceModel() }}::factory()->make(); + + livewire({{ $getPageClass('edit') }}::class, ['record' => $record->getKey()]) + ->fillForm([ + @foreach($getResourceFormFields() as $key => $field) + '{{ $key }}' => $newRecord->{{ $key }}, + @endforeach + ]) + ->call('save') + ->assertHasNoFormErrors() + ->assertNotified(); + + $this->assertDatabaseHas({{ $getResourceModel() }}::class, [ + @foreach($getResourceFormFields() as $key => $field) + '{{ $key }}' => $newRecord->{{ $key }}, + @endforeach + ]); +}); diff --git a/resources/views/resources/pages/edit/can-validate-edit-form-data.blade.php b/resources/views/resources/pages/edit/can-validate-edit-form-data.blade.php new file mode 100644 index 00000000..cccf5961 --- /dev/null +++ b/resources/views/resources/pages/edit/can-validate-edit-form-data.blade.php @@ -0,0 +1,22 @@ +it('validates edit form data field :dataset', function (array $data, array $errors): void { + $record = {{ $getResourceModel() }}::factory()->create(); + $newRecord = {{ $getResourceModel() }}::factory()->make(); + + livewire({{ $getPageClass('edit') }}::class, ['record' => $record->getKey()]) + ->fillForm([ + ...$data + ]) + ->call('save') + ->assertHasFormErrors($errors) + ->assertNotified(); +})->with([ + @foreach($getResourceFormFieldsByRulePrefix('required') as $key => $field) + '`{{ $key }}` is required' => [['{{ $key }}' => null], ['{{ $key }}' => 'required']], + @endforeach + @foreach($getResourceFormFieldsByRulePrefix('max') as $key => $field) + '`{{ $key }}` is max {{ $getRuleValue($field, 'max') }} characters' => [['{{ $key }}' => Illuminate\Support\Str::random({{ $getRuleValue($field, 'max') + 1 }})], ['{{ $key }}' => 'max']], + @endforeach + @foreach($getResourceFormFieldsByRulePrefix('min') as $key => $field) + '`{{ $key }}` is min {{ $getRuleValue($field, 'min') }} characters' => [['{{ $key }}' => Illuminate\Support\Str::random({{ $getRuleValue($field, 'min') - 1 }})], ['{{ $key }}' => 'min']], + @endforeach +]); diff --git a/src/Commands/FilamentTestsCommand.php b/src/Commands/FilamentTestsCommand.php index b8d3ce6e..95741f62 100644 --- a/src/Commands/FilamentTestsCommand.php +++ b/src/Commands/FilamentTestsCommand.php @@ -11,6 +11,8 @@ use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Create\CanValidateCreateFormData; use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\CanDeleteRecordTest; use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\CanRenderEditPageTest; +use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\CanUpdateRecordTest; +use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\CanValidateEditFormData; use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\HasHeaderActionTest; use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\HidesHeaderActionTest; use CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit\ShowsHeaderActionTest; @@ -93,6 +95,8 @@ protected function getRenderers(): array HasFilterTest::class, CanCreateRecordTest::class, CanValidateCreateFormData::class, + CanUpdateRecordTest::class, + CanValidateEditFormData::class, ]; } } diff --git a/src/TestRenderers/Resources/Pages/Edit/CanUpdateRecordTest.php b/src/TestRenderers/Resources/Pages/Edit/CanUpdateRecordTest.php new file mode 100644 index 00000000..32e86300 --- /dev/null +++ b/src/TestRenderers/Resources/Pages/Edit/CanUpdateRecordTest.php @@ -0,0 +1,15 @@ +hasPage('edit'); + } +} diff --git a/src/TestRenderers/Resources/Pages/Edit/CanValidateEditFormData.php b/src/TestRenderers/Resources/Pages/Edit/CanValidateEditFormData.php new file mode 100644 index 00000000..d38aa218 --- /dev/null +++ b/src/TestRenderers/Resources/Pages/Edit/CanValidateEditFormData.php @@ -0,0 +1,15 @@ +hasPage('edit'); + } +} From 4f590c9656fd6b1bd9c908f31962ac9860c585f7 Mon Sep 17 00:00:00 2001 From: CodeWithDennis Date: Thu, 18 Sep 2025 14:53:07 +0200 Subject: [PATCH 2/3] Add new edit form validation tests --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 7b05abae..bb167689 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,11 @@ This package generates comprehensive PEST tests for your Filament resources. Her - [x] Max - [x] Min - [x] Required +- **CanEditRecordTest** - Tests that a record can be edited +- **CanValidateEditFormTest** - Tests that the edit form validates input correctly + - [x] Max + - [x] Min + - [x] Required ### Page Rendering Tests - **CanRenderCreatePageTest** - Tests that the create page renders correctly From 7505acee3f398a69113dddd7b54b3eb450748d93 Mon Sep 17 00:00:00 2001 From: CodeWithDennis Date: Thu, 18 Sep 2025 14:55:24 +0200 Subject: [PATCH 3/3] Add note about requiring model factories in README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index bb167689..68789808 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,9 @@ A package that creates PEST tests specifically tailored for your Filament compon > [!CAUTION] > This package is not ready yet, use it at your own risk. ⚠️ +> [!NOTE] +> This package requires that your models define model [factories](https://laravel.com/docs/master/database-testing#defining-model-factories). + ## Installation ```bash