diff --git a/app/Filament/Resources/SuggestedOrganizationResource.php b/app/Filament/Resources/SuggestedOrganizationResource.php index 105d8a5..11ebdde 100644 --- a/app/Filament/Resources/SuggestedOrganizationResource.php +++ b/app/Filament/Resources/SuggestedOrganizationResource.php @@ -94,6 +94,8 @@ public static function table(Table $table): Table ->icon('heroicon-m-check-badge') ->action(function (SuggestedOrganization $record) { (new ApproveSuggestedOrganization)($record); + + return to_route('filament.bts.resources.organizations.edit', ['record' => str($record->name)->slug()]); }), Action::make('reject') ->requiresConfirmation() diff --git a/app/Filament/Resources/SuggestedOrganizationResource/Pages/EditSuggestedOrganization.php b/app/Filament/Resources/SuggestedOrganizationResource/Pages/EditSuggestedOrganization.php index 17f3e99..af0a175 100644 --- a/app/Filament/Resources/SuggestedOrganizationResource/Pages/EditSuggestedOrganization.php +++ b/app/Filament/Resources/SuggestedOrganizationResource/Pages/EditSuggestedOrganization.php @@ -2,7 +2,10 @@ namespace App\Filament\Resources\SuggestedOrganizationResource\Pages; +use App\Actions\ApproveSuggestedOrganization; use App\Filament\Resources\SuggestedOrganizationResource; +use App\Models\SuggestedOrganization; +use Filament\Actions\Action; use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; @@ -13,6 +16,15 @@ class EditSuggestedOrganization extends EditRecord protected function getHeaderActions(): array { return [ + Action::make('approve') + ->visible($this->record->approved_at === null) + ->requiresConfirmation() + ->icon('heroicon-m-check-badge') + ->action(function (SuggestedOrganization $record) { + (new ApproveSuggestedOrganization)($record); + + return to_route('filament.bts.resources.organizations.edit', ['record' => str($record->name)->slug()]); + }), DeleteAction::make(), ]; } diff --git a/tests/Feature/Filament/SuggestedOrganizationTest.php b/tests/Feature/Filament/SuggestedOrganizationTest.php new file mode 100644 index 0000000..5a9eb31 --- /dev/null +++ b/tests/Feature/Filament/SuggestedOrganizationTest.php @@ -0,0 +1,33 @@ +create(['name' => 'Shiz University']); + + Livewire::test(ListSuggestedOrganizations::class, ['record' => $suggested->id]) + ->callTableAction('approve', $suggested->id) + ->assertRedirect(route('filament.bts.resources.organizations.edit', ['record' => 'shiz-university'])); + + expect($suggested->fresh()->approved_at)->not->toBeNull(); +}); + +it('can approve suggestion from edit page', function () { + $suggested = SuggestedOrganization::factory()->create(['name' => 'Shiz']); + + Livewire::test(EditSuggestedOrganization::class, ['record' => $suggested->id]) + ->callAction('approve') + ->assertRedirect(route('filament.bts.resources.organizations.edit', ['record' => 'shiz'])); + + expect($suggested->fresh()->approved_at)->not->toBeNull(); +}); + +it('can hide approval button if already approved', function () { + $suggested = SuggestedOrganization::factory()->create(['approved_at' => now()]); + + Livewire::test(EditSuggestedOrganization::class, ['record' => $suggested->id]) + ->assertActionHidden('approve'); +});