Files
Verde-Web/tests/Feature/Api/V1/Auth/RoleMiddlewareTest.php
admin dc297d4cd7 feat(backend): complete Module 1 auth (register/login/OTP/reset)
Closes Module 1: 9 auth endpoints under /api/v1/auth, OTP via SMS
(Semaphore + log + fake drivers), role middleware, role + admin seeders,
27 feature tests passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 21:46:53 +08:00

52 lines
1.4 KiB
PHP

<?php
namespace Tests\Feature\Api\V1\Auth;
use App\Models\User;
use Database\Seeders\RoleSeeder;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Route;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
class RoleMiddlewareTest extends TestCase
{
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();
$this->seed(RoleSeeder::class);
Route::middleware(['auth:sanctum', 'role:admin'])
->get('/api/v1/_test/admin-only', fn () => response()->json(['ok' => true]));
}
public function test_admin_can_access_role_protected_route(): void
{
$admin = User::factory()->create([
'role' => User::ROLE_ADMIN,
'status' => User::STATUS_ACTIVE,
]);
Sanctum::actingAs($admin);
$this->getJson('/api/v1/_test/admin-only')->assertOk();
}
public function test_resident_blocked_from_admin_route(): void
{
$resident = User::factory()->create([
'role' => User::ROLE_RESIDENT,
'status' => User::STATUS_ACTIVE,
]);
Sanctum::actingAs($resident);
$this->getJson('/api/v1/_test/admin-only')->assertStatus(403);
}
public function test_unauthed_blocked_from_admin_route(): void
{
$this->getJson('/api/v1/_test/admin-only')->assertStatus(401);
}
}