From 97ed9f87dc982cd04fdc33dadb31e2df1175d964 Mon Sep 17 00:00:00 2001 From: Ryan Chandler Date: Fri, 22 Apr 2022 15:40:14 +0100 Subject: [PATCH] feature: page action testing helpers --- packages/admin/.stubs.php | 7 +++++ .../admin/src/FilamentServiceProvider.php | 4 +++ packages/admin/src/Testing/TestsPages.php | 31 +++++++++++++++++++ .../views/fixtures/pages/actions.blade.php | 0 tests/src/Admin/Fixtures/Pages/Actions.php | 27 ++++++++++++++++ tests/src/Admin/Pages/PageActionTest.php | 25 +++++++++++++++ .../src/Admin/Pages/PagesServiceProvider.php | 2 ++ 7 files changed, 96 insertions(+) create mode 100644 packages/admin/.stubs.php create mode 100644 packages/admin/src/Testing/TestsPages.php create mode 100644 tests/resources/views/fixtures/pages/actions.blade.php create mode 100644 tests/src/Admin/Fixtures/Pages/Actions.php create mode 100644 tests/src/Admin/Pages/PageActionTest.php diff --git a/packages/admin/.stubs.php b/packages/admin/.stubs.php new file mode 100644 index 0000000000..76c3a04d1d --- /dev/null +++ b/packages/admin/.stubs.php @@ -0,0 +1,7 @@ +bootLivewireComponents(); } diff --git a/packages/admin/src/Testing/TestsPages.php b/packages/admin/src/Testing/TestsPages.php new file mode 100644 index 0000000000..0c4c681399 --- /dev/null +++ b/packages/admin/src/Testing/TestsPages.php @@ -0,0 +1,31 @@ +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'); + }; + } +} diff --git a/tests/resources/views/fixtures/pages/actions.blade.php b/tests/resources/views/fixtures/pages/actions.blade.php new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/src/Admin/Fixtures/Pages/Actions.php b/tests/src/Admin/Fixtures/Pages/Actions.php new file mode 100644 index 0000000000..544c7c378c --- /dev/null +++ b/tests/src/Admin/Fixtures/Pages/Actions.php @@ -0,0 +1,27 @@ +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)), + ]; + } +} diff --git a/tests/src/Admin/Pages/PageActionTest.php b/tests/src/Admin/Pages/PageActionTest.php new file mode 100644 index 0000000000..50073ce53e --- /dev/null +++ b/tests/src/Admin/Pages/PageActionTest.php @@ -0,0 +1,25 @@ +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', + ]); +}); diff --git a/tests/src/Admin/Pages/PagesServiceProvider.php b/tests/src/Admin/Pages/PagesServiceProvider.php index 0cf037352c..52b33faee3 100644 --- a/tests/src/Admin/Pages/PagesServiceProvider.php +++ b/tests/src/Admin/Pages/PagesServiceProvider.php @@ -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, ]; } }