Files
ppeasy_vg12/tests/Unit/Http/Middleware/CheckRoleTest.php
T
2026-10-09 08:21:06 +02:00

54 lines
1.4 KiB
PHP

<?php
use App\Http\Middleware\CheckRole;
use App\Models\Role;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\Request;
use Symfony\Component\HttpKernel\Exception\HttpException;
uses(RefreshDatabase::class);
beforeEach(function () {
$this->artisan('db:seed');
});
test('guest is blocked', function () {
$this->expectException(HttpException::class);
roleMiddleware()->handle(Request::create('/'), fn () => 'ok', 'Admin');
});
test('user with matching role passes', function () {
$role = Role::factory()->create(['name' => 'Editor']);
$user = User::factory()->create(['role_id' => $role->id]);
$this->be($user);
$response = roleMiddleware()->handle(roleRequestFor($user), fn () => 'ok', 'Editor');
$this->assertSame('ok', $response);
});
test('user with wrong role is blocked', function () {
$role = Role::factory()->create(['name' => 'Editor']);
$user = User::factory()->create(['role_id' => $role->id]);
$this->be($user);
$this->expectException(HttpException::class);
roleMiddleware()->handle(roleRequestFor($user), fn () => 'ok', 'Admin');
});
function roleRequestFor($user): Request
{
$request = Request::create('/');
$request->setUserResolver(fn () => $user);
return $request;
}
function roleMiddleware(): CheckRole
{
return new CheckRole(auth()->guard());
}