diff --git a/app/Filament/Resources/SupportTicketResource/Pages/ListSupportTickets.php b/app/Filament/Resources/SupportTicketResource/Pages/ListSupportTickets.php index 4c356473..7ff6ecc8 100644 --- a/app/Filament/Resources/SupportTicketResource/Pages/ListSupportTickets.php +++ b/app/Filament/Resources/SupportTicketResource/Pages/ListSupportTickets.php @@ -3,9 +3,25 @@ namespace App\Filament\Resources\SupportTicketResource\Pages; use App\Filament\Resources\SupportTicketResource; +use App\SupportTicket\Status; use Filament\Resources\Pages\ListRecords; +use Filament\Schemas\Components\Tabs\Tab; +use Illuminate\Database\Eloquent\Builder; class ListSupportTickets extends ListRecords { protected static string $resource = SupportTicketResource::class; + + public function getTabs(): array + { + return [ + 'all' => Tab::make('All'), + 'new' => Tab::make('New') + ->modifyQueryUsing(fn (Builder $query) => $query->where('status', Status::OPEN)), + 'in_progress' => Tab::make('In Progress') + ->modifyQueryUsing(fn (Builder $query) => $query->where('status', Status::IN_PROGRESS)), + 'on_hold' => Tab::make('On Hold') + ->modifyQueryUsing(fn (Builder $query) => $query->where('status', Status::ON_HOLD)), + ]; + } } diff --git a/tests/Feature/SupportTicketTest.php b/tests/Feature/SupportTicketTest.php index f1e37e4f..00e7cf02 100644 --- a/tests/Feature/SupportTicketTest.php +++ b/tests/Feature/SupportTicketTest.php @@ -3,6 +3,7 @@ namespace Tests\Feature; use App\Filament\Resources\SupportTicketResource; +use App\Filament\Resources\SupportTicketResource\Pages\ListSupportTickets; use App\Filament\Resources\SupportTicketResource\Pages\ViewSupportTicket; use App\Filament\Resources\SupportTicketResource\Widgets\TicketRepliesWidget; use App\Livewire\Customer\Support\Create; @@ -1238,6 +1239,30 @@ public function only_internal_notes_can_be_pinned(): void ->call('togglePin', $reply->id); } + #[Test] + public function admin_list_page_tabs_filter_tickets_by_status(): void + { + $admin = User::factory()->create(['email' => 'admin@test.com']); + config(['filament.users' => ['admin@test.com']]); + + $openTicket = SupportTicket::factory()->create(['status' => Status::OPEN]); + $inProgressTicket = SupportTicket::factory()->create(['status' => Status::IN_PROGRESS]); + $onHoldTicket = SupportTicket::factory()->create(['status' => Status::ON_HOLD]); + + Livewire::actingAs($admin) + ->test(ListSupportTickets::class) + ->assertCanSeeTableRecords([$openTicket, $inProgressTicket, $onHoldTicket]) + ->set('activeTab', 'new') + ->assertCanSeeTableRecords([$openTicket]) + ->assertCanNotSeeTableRecords([$inProgressTicket, $onHoldTicket]) + ->set('activeTab', 'in_progress') + ->assertCanSeeTableRecords([$inProgressTicket]) + ->assertCanNotSeeTableRecords([$openTicket, $onHoldTicket]) + ->set('activeTab', 'on_hold') + ->assertCanSeeTableRecords([$onHoldTicket]) + ->assertCanNotSeeTableRecords([$openTicket, $inProgressTicket]); + } + #[Test] public function admin_view_page_shows_user_email_when_name_is_null(): void {