diff --git a/app/Filament/Resources/DiscussionResource.php b/app/Filament/Resources/DiscussionResource.php new file mode 100644 index 00000000..eccf6927 --- /dev/null +++ b/app/Filament/Resources/DiscussionResource.php @@ -0,0 +1,71 @@ +columns([ + TextColumn::make('title') + ->label('Titre') + ->sortable(), + TextColumn::make('locked') + ->label('Vérrouillé') + ->getStateUsing(fn ($record) => ($record->locked) ? 'Oui' : 'Non') + ->colors([ + 'success' => 'Oui', + 'danger' => 'Non', + ]) + ->badge(), + TextColumn::make('is_pinned') + ->label('Epinglé') + ->getStateUsing(fn ($record) => ($record->is_pinned) ? 'Oui' : 'Non') + ->colors([ + 'success' => 'Oui', + 'danger' => 'Non', + ]) + ->badge(), + TextColumn::make('created_at') + ->label('Date de création') + ->dateTime(), + TextColumn::make('user.name') + ->label('Auteur'), + ]) + ->filters([ + Filter::make('is_pinned')->query(fn (Builder $query) => $query->where('is_pinned', true))->label('Epinglé'), + Filter::make('is_locked')->query(fn (Builder $query) => $query->where('locked', true))->label('Vérrouillé'), + ]) + ->actions([ + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListDiscussions::route('/'), + ]; + } +} diff --git a/app/Filament/Resources/DiscussionResource/Pages/ListDiscussions.php b/app/Filament/Resources/DiscussionResource/Pages/ListDiscussions.php new file mode 100644 index 00000000..01661beb --- /dev/null +++ b/app/Filament/Resources/DiscussionResource/Pages/ListDiscussions.php @@ -0,0 +1,13 @@ +user = $this->login(); + $this->discussions = Discussion::factory() + ->count(10) + ->state(new Sequence( + ['is_pinned' => true, 'locked' => false], + ['is_pinned' => false, 'locked' => true], + )) + ->create(); +}); + +describe(DiscussionResource::class, function (): void { + + it('page can display table with records', function (): void { + Livewire::test(ListDiscussions::class) + ->assertCanSeeTableRecords($this->discussions); + }); + + it('admin user can filter discussion by `is_pinned`', function (): void { + Livewire::test(ListDiscussions::class) + ->assertCanSeeTableRecords($this->discussions) + ->filterTable('is_pinned') + ->assertCountTableRecords(5); + }); + + it('admin user can filter discussion by `locked`', function (): void { + Livewire::test(ListDiscussions::class) + ->assertCanSeeTableRecords($this->discussions) + ->filterTable('is_locked') + ->assertCountTableRecords(5); + }); +})->group('discussions');