feat: notification on filament dashboard
This commit is contained in:
@@ -6,9 +6,7 @@ use App\Models\MealPosts;
|
||||
use App\Models\ModerationCase;
|
||||
use App\Models\Report;
|
||||
use App\Models\User;
|
||||
use App\Notifications\ModerationThresholdReached;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use Laravel\Sanctum\Sanctum;
|
||||
|
||||
uses(RefreshDatabase::class);
|
||||
@@ -99,8 +97,6 @@ it('reports users and prevents reporting own profile', function () {
|
||||
});
|
||||
|
||||
it('notifies moderators once when a report threshold is reached', function () {
|
||||
Notification::fake();
|
||||
|
||||
$admin = User::factory()->create(['role' => UserRole::ADMIN]);
|
||||
$moderator = User::factory()->create(['role' => UserRole::MODERATOR]);
|
||||
$regularUser = User::factory()->create();
|
||||
@@ -119,11 +115,12 @@ it('notifies moderators once when a report threshold is reached', function () {
|
||||
expect($moderationCase->reports_count)->toBe(3)
|
||||
->and($moderationCase->threshold_notified_at)->not->toBeNull();
|
||||
|
||||
Notification::assertSentTo($admin, ModerationThresholdReached::class);
|
||||
Notification::assertSentTo($moderator, ModerationThresholdReached::class);
|
||||
Notification::assertNotSentTo($regularUser, ModerationThresholdReached::class);
|
||||
Notification::assertSentTimes(ModerationThresholdReached::class, 2);
|
||||
expect((new ModerationThresholdReached($moderationCase))->via($admin))->toBe(['database']);
|
||||
expect($admin->notifications)->toHaveCount(1)
|
||||
->and($admin->notifications->first()->data['format'])->toBe('filament')
|
||||
->and($admin->notifications->first()->data['title'])->toBe(__('api.notifications.moderation_threshold_title'))
|
||||
->and($moderator->notifications)->toHaveCount(1)
|
||||
->and($moderator->notifications->first()->data['format'])->toBe('filament')
|
||||
->and($regularUser->notifications)->toHaveCount(0);
|
||||
|
||||
Sanctum::actingAs(User::factory()->create());
|
||||
|
||||
@@ -131,5 +128,6 @@ it('notifies moderators once when a report threshold is reached', function () {
|
||||
'reason' => ReportReason::MISLEADING->value,
|
||||
])->assertCreated();
|
||||
|
||||
Notification::assertSentTimes(ModerationThresholdReached::class, 2);
|
||||
expect($admin->fresh()->notifications)->toHaveCount(1)
|
||||
->and($moderator->fresh()->notifications)->toHaveCount(1);
|
||||
});
|
||||
|
||||
@@ -10,6 +10,7 @@ use Filament\Forms\Components\Select;
|
||||
use Filament\Infolists\Components\TextEntry;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
use Filament\Tables\Filters\SelectFilter;
|
||||
use Filament\Tables\Filters\TernaryFilter;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Livewire\Livewire;
|
||||
|
||||
@@ -21,6 +22,37 @@ beforeEach(function () {
|
||||
Filament::setCurrentPanel(Filament::getPanel('dashboard'));
|
||||
});
|
||||
|
||||
it('suspends and reactivates users from the filament users table', function () {
|
||||
$admin = User::factory()->create([
|
||||
'role' => UserRole::ADMIN,
|
||||
]);
|
||||
$user = User::factory()->create();
|
||||
|
||||
$this->actingAs($admin);
|
||||
|
||||
Livewire::test(ListUsers::class)
|
||||
->assertTableColumnExists(
|
||||
'suspended_at',
|
||||
fn (TextColumn $column): bool => $column->getLabel() === 'Suspendu le',
|
||||
)
|
||||
->assertTableFilterExists(
|
||||
'suspended_at',
|
||||
fn (TernaryFilter $filter): bool => $filter->getLabel() === 'Suspendu',
|
||||
)
|
||||
->callTableAction('suspend', $user);
|
||||
|
||||
expect($user->fresh()->suspended_at)->not->toBeNull()
|
||||
->and($user->fresh()->suspended_by)->toBe($admin->id)
|
||||
->and($user->fresh()->suspended_reason)->toBe('Suspendre');
|
||||
|
||||
Livewire::test(ListUsers::class)
|
||||
->callTableAction('unsuspend', $user->fresh());
|
||||
|
||||
expect($user->fresh()->suspended_at)->toBeNull()
|
||||
->and($user->fresh()->suspended_by)->toBeNull()
|
||||
->and($user->fresh()->suspended_reason)->toBeNull();
|
||||
});
|
||||
|
||||
it('exposes translated user roles in filament user screens', function () {
|
||||
$admin = User::factory()->create([
|
||||
'role' => UserRole::ADMIN,
|
||||
|
||||
Reference in New Issue
Block a user