From fba09424074f39562f9998248ee41ced7ba67820 Mon Sep 17 00:00:00 2001 From: Leon Morival Date: Wed, 29 Apr 2026 12:07:45 +0200 Subject: [PATCH] feat: detach instead of delete participant --- .../ParticipantsRelationManager.php | 9 ++-- .../HuntParticipantsRelationManagerTest.php | 44 +++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 tests/Feature/Filament/HuntParticipantsRelationManagerTest.php diff --git a/app/Filament/Resources/Hunts/RelationManagers/ParticipantsRelationManager.php b/app/Filament/Resources/Hunts/RelationManagers/ParticipantsRelationManager.php index c859037..63a432b 100644 --- a/app/Filament/Resources/Hunts/RelationManagers/ParticipantsRelationManager.php +++ b/app/Filament/Resources/Hunts/RelationManagers/ParticipantsRelationManager.php @@ -3,13 +3,14 @@ namespace App\Filament\Resources\Hunts\RelationManagers; use Filament\Actions\BulkActionGroup; -use Filament\Actions\DeleteBulkAction; -use Filament\Actions\DeleteAction; +use Filament\Actions\DetachAction; +use Filament\Actions\DetachBulkAction; use Filament\Forms; use Filament\Resources\RelationManagers\RelationManager; use Filament\Schemas\Schema; use Filament\Tables; use Filament\Tables\Table; + class ParticipantsRelationManager extends RelationManager { protected static string $relationship = 'participants'; @@ -51,11 +52,11 @@ class ParticipantsRelationManager extends RelationManager // Tables\Actions\AttachAction::make(), ]) ->actions([ - DeleteAction::make(), + DetachAction::make(), ]) ->bulkActions([ BulkActionGroup::make([ - DeleteBulkAction::make(), + DetachBulkAction::make(), ]), ]); } diff --git a/tests/Feature/Filament/HuntParticipantsRelationManagerTest.php b/tests/Feature/Filament/HuntParticipantsRelationManagerTest.php new file mode 100644 index 0000000..d456278 --- /dev/null +++ b/tests/Feature/Filament/HuntParticipantsRelationManagerTest.php @@ -0,0 +1,44 @@ +create([ + 'role' => UserRole::ADMIN, + ]); + + $hunt = Hunts::withoutSyncingToSearch(fn () => Hunts::factory()->create([ + 'creator_id' => $admin->id, + ])); + + $participant = User::factory()->create(); + + $hunt->participants()->attach($participant->id); + + $this->actingAs($admin); + + Livewire::test(ParticipantsRelationManager::class, [ + 'ownerRecord' => $hunt, + 'pageClass' => EditHunts::class, + ]) + ->assertTableActionExists('detach', record: $participant->getKey()) + ->assertTableActionDoesNotExist('delete', record: $participant->getKey()) + ->callTableAction('detach', $participant->getKey()); + + $this->assertDatabaseHas('users', [ + 'id' => $participant->id, + ]); + + $this->assertDatabaseMissing('hunt_participants', [ + 'hunt_id' => $hunt->id, + 'user_id' => $participant->id, + ]); +});