feat: usr roles and soft deletes and filament
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
use App\Enums\UserRole;
|
||||
use App\Filament\Resources\Users\Pages\EditUser;
|
||||
use App\Filament\Resources\Users\Pages\ListUsers;
|
||||
use App\Filament\Resources\Users\Pages\ViewUser;
|
||||
use App\Models\User;
|
||||
use Filament\Facades\Filament;
|
||||
use Filament\Forms\Components\Select;
|
||||
use Filament\Infolists\Components\TextEntry;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
use Filament\Tables\Filters\SelectFilter;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Livewire\Livewire;
|
||||
|
||||
uses(RefreshDatabase::class);
|
||||
|
||||
beforeEach(function () {
|
||||
app()->setLocale('fr');
|
||||
|
||||
Filament::setCurrentPanel(Filament::getPanel('dashboard'));
|
||||
});
|
||||
|
||||
it('exposes translated user roles in filament user screens', function () {
|
||||
$admin = User::factory()->create([
|
||||
'role' => UserRole::ADMIN,
|
||||
]);
|
||||
$user = User::factory()->create([
|
||||
'role' => UserRole::MODERATOR,
|
||||
]);
|
||||
|
||||
$this->actingAs($admin);
|
||||
|
||||
$expectedOptions = [
|
||||
'user' => 'Utilisateur',
|
||||
'admin' => 'Administrateur',
|
||||
'moderator' => 'Modérateur',
|
||||
];
|
||||
|
||||
Livewire::test(EditUser::class, ['record' => $user->getKey()])
|
||||
->assertFormFieldExists(
|
||||
'role',
|
||||
null,
|
||||
fn (Select $field): bool => $field->getLabel() === 'Rôle'
|
||||
&& $field->getOptions() === $expectedOptions,
|
||||
);
|
||||
|
||||
Livewire::test(ViewUser::class, ['record' => $user->getKey()])
|
||||
->assertSchemaComponentExists(
|
||||
'role',
|
||||
'infolist',
|
||||
fn (TextEntry $entry): bool => $entry->getLabel() === 'Rôle',
|
||||
);
|
||||
|
||||
Livewire::test(ListUsers::class)
|
||||
->assertTableColumnExists(
|
||||
'role',
|
||||
fn (TextColumn $column): bool => $column->getLabel() === 'Rôle',
|
||||
)
|
||||
->assertTableFilterExists(
|
||||
'role',
|
||||
fn (SelectFilter $filter): bool => $filter->getLabel() === 'Rôle'
|
||||
&& $filter->getOptions() === $expectedOptions,
|
||||
);
|
||||
});
|
||||
|
||||
it('changes a user role by id with the artisan command', function () {
|
||||
$user = User::factory()->create([
|
||||
'role' => UserRole::USER,
|
||||
]);
|
||||
|
||||
$this->artisan('user:change-role', [
|
||||
'userId' => $user->getKey(),
|
||||
'role' => UserRole::ADMIN->value,
|
||||
])
|
||||
->expectsOutput("User {$user->getKey()} role changed to admin.")
|
||||
->assertExitCode(0);
|
||||
|
||||
expect($user->fresh()->role)->toBe(UserRole::ADMIN);
|
||||
});
|
||||
|
||||
it('rejects an invalid user role', function () {
|
||||
$user = User::factory()->create([
|
||||
'role' => UserRole::USER,
|
||||
]);
|
||||
|
||||
$this->artisan('user:change-role', [
|
||||
'userId' => $user->getKey(),
|
||||
'role' => 'owner',
|
||||
])
|
||||
->expectsOutput('Invalid role. Available roles: user, admin, moderator.')
|
||||
->assertExitCode(1);
|
||||
|
||||
expect($user->fresh()->role)->toBe(UserRole::USER);
|
||||
});
|
||||
|
||||
it('rejects an unknown user id', function () {
|
||||
$this->artisan('user:change-role', [
|
||||
'userId' => '01J00000000000000000000000',
|
||||
'role' => UserRole::ADMIN->value,
|
||||
])
|
||||
->expectsOutput('User not found.')
|
||||
->assertExitCode(1);
|
||||
});
|
||||
Reference in New Issue
Block a user