From d32ce5b67cf9f635a31cc278e7b32b602aae85e6 Mon Sep 17 00:00:00 2001 From: Chri$ Date: Mon, 21 Oct 2024 13:06:37 +0200 Subject: [PATCH 1/4] feat:[LAR-70] Add discussions table in admin cpanel and add feature test for discussion --- app/Filament/Resources/DiscussionResource.php | 69 +++++++++++++++++++ .../Pages/ListDiscussions.php | 13 ++++ tests/Feature/Filament/DiscussionTest.php | 49 +++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 app/Filament/Resources/DiscussionResource.php create mode 100644 app/Filament/Resources/DiscussionResource/Pages/ListDiscussions.php create mode 100644 tests/Feature/Filament/DiscussionTest.php diff --git a/app/Filament/Resources/DiscussionResource.php b/app/Filament/Resources/DiscussionResource.php new file mode 100644 index 00000000..604129da --- /dev/null +++ b/app/Filament/Resources/DiscussionResource.php @@ -0,0 +1,69 @@ +columns([ + TextColumn::make('title') + ->label('Titre') + ->sortable(), + TextColumn::make('Vérrouillé') + ->getStateUsing(fn ($record) => ($record->locked) ? 'OUI' : 'NON') + ->colors([ + 'success' => 'OUI', + 'danger' => 'NON', + ]) + ->badge(), + TextColumn::make('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('delete'), + ]) + ->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(function () { + return [ + 'is_pinned' => rand(0, 1), + 'locked' => rand(0, 1), + 'created_at' => now(), + ]; + }) + ->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') + ->assertCanSeeTableRecords($this->discussions->where('is_pinned', true)) + ->assertCanNotSeeTableRecords($this->discussions->where('is_pinned', false)); + }); + + it('admin user can filter discussion by `locked`', function (): void { + + Livewire::test(ListDiscussions::class) + ->assertCanSeeTableRecords($this->discussions) + ->filterTable('is_locked') + ->assertCanSeeTableRecords($this->discussions->where('locked', true)) + ->assertCanNotSeeTableRecords($this->discussions->where('locked', false)); + }); + +})->group(groups: 'discussions'); From b553afc236f77cbbe4296c9096734436df93cdb0 Mon Sep 17 00:00:00 2001 From: Chri$ Date: Mon, 21 Oct 2024 16:53:52 +0200 Subject: [PATCH 2/4] feat:[LAR-70]Add label in text input,remove space in files and add count table record after filter in discussion feature test --- app/Filament/Resources/DiscussionResource.php | 8 ++++--- tests/Feature/Filament/DiscussionTest.php | 23 +++++++------------ 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/app/Filament/Resources/DiscussionResource.php b/app/Filament/Resources/DiscussionResource.php index 604129da..ad6a8212 100644 --- a/app/Filament/Resources/DiscussionResource.php +++ b/app/Filament/Resources/DiscussionResource.php @@ -26,14 +26,16 @@ public static function table(Table $table): Table TextColumn::make('title') ->label('Titre') ->sortable(), - TextColumn::make('Vérrouillé') + TextColumn::make('locked') + ->label(label: 'Vérrouillé') ->getStateUsing(fn ($record) => ($record->locked) ? 'OUI' : 'NON') ->colors([ 'success' => 'OUI', 'danger' => 'NON', ]) ->badge(), - TextColumn::make('Epinglé') + TextColumn::make('is_pinned') + ->label(label: 'Epinglé') ->getStateUsing(fn ($record) => ($record->is_pinned) ? 'OUI' : 'NON') ->colors([ 'success' => 'OUI', @@ -51,7 +53,7 @@ public static function table(Table $table): Table Filter::make('is_locked')->query(fn (Builder $query) => $query->where('locked', true))->label('Vérrouillé'), ]) ->actions([ - Tables\Actions\DeleteAction::make('delete'), + Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ diff --git a/tests/Feature/Filament/DiscussionTest.php b/tests/Feature/Filament/DiscussionTest.php index 04a8d8f0..e82c5d22 100644 --- a/tests/Feature/Filament/DiscussionTest.php +++ b/tests/Feature/Filament/DiscussionTest.php @@ -5,19 +5,17 @@ use App\Filament\Resources\DiscussionResource; use App\Filament\Resources\DiscussionResource\Pages\ListDiscussions; use App\Models\Discussion; +use Illuminate\Database\Eloquent\Factories\Sequence; use Livewire\Livewire; beforeEach(function (): void { $this->user = $this->login(); $this->discussions = Discussion::factory() ->count(10) - ->state(function () { - return [ - 'is_pinned' => rand(0, 1), - 'locked' => rand(0, 1), - 'created_at' => now(), - ]; - }) + ->state(new Sequence( + ['is_pinned' => true, 'locked' => false], + ['is_pinned' => false, 'locked' => true], + )) ->create(); }); @@ -29,21 +27,16 @@ }); it('admin user can filter discussion by `is_pinned`', function (): void { - Livewire::test(ListDiscussions::class) ->assertCanSeeTableRecords($this->discussions) ->filterTable('is_pinned') - ->assertCanSeeTableRecords($this->discussions->where('is_pinned', true)) - ->assertCanNotSeeTableRecords($this->discussions->where('is_pinned', false)); + ->assertCountTableRecords(5); }); it('admin user can filter discussion by `locked`', function (): void { - Livewire::test(ListDiscussions::class) ->assertCanSeeTableRecords($this->discussions) ->filterTable('is_locked') - ->assertCanSeeTableRecords($this->discussions->where('locked', true)) - ->assertCanNotSeeTableRecords($this->discussions->where('locked', false)); + ->assertCountTableRecords(5); }); - -})->group(groups: 'discussions'); +})->group('discussions'); From 11f4165cf1080649d895b121b2036c0b4ab8233c Mon Sep 17 00:00:00 2001 From: Chri$ Date: Mon, 21 Oct 2024 17:05:33 +0200 Subject: [PATCH 3/4] feat:[LAR-70] Replace uppercase word and remove parameter name --- app/Filament/Resources/DiscussionResource.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Filament/Resources/DiscussionResource.php b/app/Filament/Resources/DiscussionResource.php index ad6a8212..5dcad886 100644 --- a/app/Filament/Resources/DiscussionResource.php +++ b/app/Filament/Resources/DiscussionResource.php @@ -27,19 +27,19 @@ public static function table(Table $table): Table ->label('Titre') ->sortable(), TextColumn::make('locked') - ->label(label: 'Vérrouillé') - ->getStateUsing(fn ($record) => ($record->locked) ? 'OUI' : 'NON') + ->label('Vérrouillé') + ->getStateUsing(fn ($record) => ($record->locked) ? 'Oui' : 'Non') ->colors([ 'success' => 'OUI', 'danger' => 'NON', ]) ->badge(), TextColumn::make('is_pinned') - ->label(label: 'Epinglé') - ->getStateUsing(fn ($record) => ($record->is_pinned) ? 'OUI' : 'NON') + ->label('Epinglé') + ->getStateUsing(fn ($record) => ($record->is_pinned) ? 'Oui' : 'Non') ->colors([ - 'success' => 'OUI', - 'danger' => 'NON', + 'success' => 'Oui', + 'danger' => 'Non', ]) ->badge(), TextColumn::make('created_at') From bb75c79bec622145ebd24dfc44a4d8ae4bf88f0b Mon Sep 17 00:00:00 2001 From: Chri$ Date: Mon, 21 Oct 2024 17:05:58 +0200 Subject: [PATCH 4/4] feat:[LAR-70] Replace uppercase word and remove parameter name --- app/Filament/Resources/DiscussionResource.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Filament/Resources/DiscussionResource.php b/app/Filament/Resources/DiscussionResource.php index 5dcad886..eccf6927 100644 --- a/app/Filament/Resources/DiscussionResource.php +++ b/app/Filament/Resources/DiscussionResource.php @@ -30,8 +30,8 @@ public static function table(Table $table): Table ->label('Vérrouillé') ->getStateUsing(fn ($record) => ($record->locked) ? 'Oui' : 'Non') ->colors([ - 'success' => 'OUI', - 'danger' => 'NON', + 'success' => 'Oui', + 'danger' => 'Non', ]) ->badge(), TextColumn::make('is_pinned')