Skip to content
This repository was archived by the owner on Feb 14, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
@php use Filament\Forms\Components\RichEditor; @endphp
it('can create a record', function (): void {
$record = {{ $getResourceModel() }}::factory()->make();

Expand Down
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
20 changes: 20 additions & 0 deletions resources/views/resources/pages/edit/can-update-record.blade.php
Original file line number Diff line number Diff line change
@@ -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
]);
});
Original file line number Diff line number Diff line change
@@ -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
]);
4 changes: 4 additions & 0 deletions src/Commands/FilamentTestsCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -93,6 +95,8 @@ protected function getRenderers(): array
HasFilterTest::class,
CanCreateRecordTest::class,
CanValidateCreateFormData::class,
CanUpdateRecordTest::class,
CanValidateEditFormData::class,
];
}
}
15 changes: 15 additions & 0 deletions src/TestRenderers/Resources/Pages/Edit/CanUpdateRecordTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit;

use CodeWithDennis\FilamentTests\TestRenderers\BaseTest;

class CanUpdateRecordTest extends BaseTest
{
public ?string $view = 'filament-tests::resources.pages.edit.can-update-record';

public function getShouldRender(): bool
{
return $this->hasPage('edit');
}
}
15 changes: 15 additions & 0 deletions src/TestRenderers/Resources/Pages/Edit/CanValidateEditFormData.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace CodeWithDennis\FilamentTests\TestRenderers\Resources\Pages\Edit;

use CodeWithDennis\FilamentTests\TestRenderers\BaseTest;

class CanValidateEditFormData extends BaseTest
{
public ?string $view = 'filament-tests::resources.pages.edit.can-validate-edit-form-data';

public function getShouldRender(): bool
{
return $this->hasPage('edit');
}
}