diff --git a/README.md b/README.md index 7b05abae..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 @@ -39,6 +42,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 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'); + } +}