Implementa gestão Filament de configurações, serviços, portfólio e depoimentos com policies admin-only, upload validado e seed determinístico. Co-authored-by: Cursor <cursoragent@cursor.com>
91 lines
2.5 KiB
PHP
91 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Feature\Auth;
|
|
|
|
use App\Enums\UserRole;
|
|
use App\Filament\Resources\Users\Pages\ListUsers;
|
|
use App\Models\User;
|
|
use Filament\Auth\Pages\Login;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Livewire\Livewire;
|
|
use Tests\TestCase;
|
|
|
|
class InternalAuthenticationTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function test_active_admin_can_log_in_to_filament_panel(): void
|
|
{
|
|
$admin = User::factory()->admin()->create([
|
|
'email' => 'admin@example.com',
|
|
]);
|
|
|
|
Livewire::test(Login::class)
|
|
->set('data.email', $admin->email)
|
|
->set('data.password', 'password')
|
|
->call('authenticate')
|
|
->assertHasNoFormErrors()
|
|
->assertRedirect(route('filament.admin.pages.dashboard'));
|
|
|
|
$this->assertAuthenticatedAs($admin);
|
|
}
|
|
|
|
public function test_active_assistant_can_log_in_to_filament_panel(): void
|
|
{
|
|
$assistant = User::factory()->assistant()->create([
|
|
'email' => 'assistant@example.com',
|
|
]);
|
|
|
|
Livewire::test(Login::class)
|
|
->set('data.email', $assistant->email)
|
|
->set('data.password', 'password')
|
|
->call('authenticate')
|
|
->assertHasNoFormErrors()
|
|
->assertRedirect(route('filament.admin.pages.dashboard'));
|
|
|
|
$this->assertAuthenticatedAs($assistant);
|
|
}
|
|
|
|
public function test_inactive_user_is_denied_panel_access(): void
|
|
{
|
|
$inactiveUser = User::factory()->admin()->inactive()->create([
|
|
'email' => 'inactive@example.com',
|
|
]);
|
|
|
|
Livewire::test(Login::class)
|
|
->set('data.email', $inactiveUser->email)
|
|
->set('data.password', 'password')
|
|
->call('authenticate')
|
|
->assertHasFormErrors(['email']);
|
|
|
|
$this->assertGuest();
|
|
}
|
|
|
|
public function test_assistant_cannot_access_user_management(): void
|
|
{
|
|
$assistant = User::factory()->assistant()->create();
|
|
|
|
$this->actingAs($assistant);
|
|
|
|
Livewire::test(ListUsers::class)
|
|
->assertForbidden();
|
|
}
|
|
|
|
public function test_admin_can_access_user_management(): void
|
|
{
|
|
$admin = User::factory()->admin()->create();
|
|
|
|
$this->actingAs($admin);
|
|
|
|
Livewire::test(ListUsers::class)
|
|
->assertSuccessful();
|
|
}
|
|
|
|
public function test_user_role_is_limited_to_admin_and_assistant(): void
|
|
{
|
|
$this->assertSame(['admin', 'assistant'], array_column(UserRole::cases(), 'value'));
|
|
}
|
|
}
|