artisan('db:seed'); }); test('guest is blocked', function () { $request = Request::create('/'); $this->expectException(HttpException::class); permissionMiddleware()->handle($request, fn () => 'ok', 'users.manage'); }); test('user without permission is blocked', function () { $user = UserFactory::user()->create(); $this->be($user); $this->expectException(HttpException::class); permissionMiddleware()->handle(permissionRequestFor($user), fn () => 'ok', 'users.manage'); }); test('user with permission passes', function () { $user = UserFactory::withPermissions('users.manage')->create(); $this->be($user); $response = permissionMiddleware()->handle(permissionRequestFor($user), fn () => 'ok', 'users.manage'); $this->assertSame('ok', $response); }); test('multiple permissions separated by pipe', function () { $role = Role::factory()->create(); $role->attachPermission(Permission::where('name', 'users.manage')->first()); $role->attachPermission(Permission::where('name', 'roles.manage')->first()); $user = User::factory()->create(['role_id' => $role->id]); $this->be($user); $response = permissionMiddleware()->handle(permissionRequestFor($user), fn () => 'ok', 'users.manage|roles.manage'); $this->assertSame('ok', $response); }); function permissionRequestFor($user): Request { $request = Request::create('/'); $request->setUserResolver(fn () => $user); return $request; } function permissionMiddleware(): CheckPermissions { return new CheckPermissions(auth()->guard()); }