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>
52 lines
1.4 KiB
PHP
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);
|
|
}
|
|
}
|