mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
feature: page action testing helpers
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Livewire\Testing {
|
||||
class TestableLivewire {
|
||||
public function callPageAction(string $name, array $formData = []): static {}
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ use Filament\Http\Responses\Auth\LogoutResponse;
|
||||
use Filament\Pages\Dashboard;
|
||||
use Filament\Pages\Page;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Testing\TestsPages;
|
||||
use Filament\Widgets\AccountWidget;
|
||||
use Filament\Widgets\FilamentInfoWidget;
|
||||
use Filament\Widgets\Widget;
|
||||
@@ -22,6 +23,7 @@ use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Str;
|
||||
use Livewire\Component;
|
||||
use Livewire\Livewire;
|
||||
use Livewire\Testing\TestableLivewire;
|
||||
use ReflectionClass;
|
||||
use Spatie\LaravelPackageTools\Package;
|
||||
use Spatie\LaravelPackageTools\PackageServiceProvider;
|
||||
@@ -90,6 +92,8 @@ class FilamentServiceProvider extends PackageServiceProvider
|
||||
|
||||
public function packageBooted(): void
|
||||
{
|
||||
TestableLivewire::mixin(new TestsPages);
|
||||
|
||||
$this->bootLivewireComponents();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Testing;
|
||||
|
||||
/**
|
||||
* @mixin \Livewire\Testing\TestableLivewire
|
||||
*/
|
||||
class TestsPages
|
||||
{
|
||||
public function callPageAction()
|
||||
{
|
||||
return function (string $name, array $formData = []) {
|
||||
$this
|
||||
->call('mountAction', $name)
|
||||
->assertSet('mountedAction', $name)
|
||||
->set('mountedActionData', $formData);
|
||||
|
||||
$action = $this->instance()->getMountedAction();
|
||||
|
||||
if ($action->shouldOpenModal()) {
|
||||
$this
|
||||
->assertDispatchedBrowserEvent('open-modal', [
|
||||
'id' => 'page-action'
|
||||
])
|
||||
->call('callMountedAction');
|
||||
}
|
||||
|
||||
return $this->call('callMountedAction');
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Tests\Admin\Fixtures\Pages;
|
||||
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Pages\Actions\ButtonAction;
|
||||
use Filament\Pages\Page;
|
||||
use Illuminate\Contracts\View\View;
|
||||
|
||||
class Actions extends Page
|
||||
{
|
||||
protected static string $view = 'fixtures.pages.actions';
|
||||
|
||||
protected function getActions(): array|View|null
|
||||
{
|
||||
return [
|
||||
ButtonAction::make('foo')
|
||||
->action(fn () => $this->dispatchBrowserEvent('foo-called')),
|
||||
ButtonAction::make('foo-form')
|
||||
->form([
|
||||
TextInput::make('name')
|
||||
->required()
|
||||
])
|
||||
->action(fn (array $data) => $this->dispatchBrowserEvent('foo-form-called', $data)),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
use Filament\Tests\Admin\Fixtures\Pages\Actions;
|
||||
use Filament\Tests\Admin\Pages\TestCase;
|
||||
use Livewire\Livewire;
|
||||
|
||||
uses(TestCase::class);
|
||||
|
||||
it('can call a page action', function () {
|
||||
Livewire::test(Actions::class)
|
||||
->callPageAction('foo')
|
||||
->assertSuccessful()
|
||||
->assertDispatchedBrowserEvent('foo-called');
|
||||
});
|
||||
|
||||
it('can call a page action with data', function () {
|
||||
Livewire::test(Actions::class)
|
||||
->callPageAction('foo-form', [
|
||||
'name' => 'Ryan',
|
||||
])
|
||||
->assertHasNoErrors()
|
||||
->assertDispatchedBrowserEvent('foo-form-called', [
|
||||
'name' => 'Ryan',
|
||||
]);
|
||||
});
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Filament\Tests\Admin\Pages;
|
||||
|
||||
use Filament\PluginServiceProvider;
|
||||
use Filament\Tests\Admin\Fixtures\Pages\Actions;
|
||||
use Filament\Tests\Admin\Fixtures\Pages\Settings;
|
||||
|
||||
class PagesServiceProvider extends PluginServiceProvider
|
||||
@@ -13,6 +14,7 @@ class PagesServiceProvider extends PluginServiceProvider
|
||||
{
|
||||
return [
|
||||
Settings::class,
|
||||
Actions::class,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user