attributes->set('actor_user', (object) [ 'user_type' => 'EXTERNAL', 'portal_status' => 'ACTIVE', ]); $request->attributes->set('actor_roles', ['SUPER_ADMIN']); $response = (new RequirePortal())->handle($request, fn () => response()->json(['ok' => true]), 'admin'); $this->assertSame(200, $response->getStatusCode()); } public function test_active_client_can_enter_client_portal(): void { $request = Request::create('/api/v1/memberships/me'); $request->attributes->set('actor_user', (object) [ 'user_type' => 'CLIENT', 'portal_status' => 'ACTIVE', ]); $request->attributes->set('actor_roles', ['CLIENT']); $response = (new RequirePortal())->handle($request, fn () => response()->json(['ok' => true]), 'client'); $this->assertSame(200, $response->getStatusCode()); } public function test_suspended_portal_user_is_rejected(): void { $request = Request::create('/api/v1/admin/ping'); $request->attributes->set('actor_user', (object) [ 'user_type' => 'ADMIN', 'portal_status' => 'SUSPENDED', ]); $request->attributes->set('actor_roles', []); $response = (new RequirePortal())->handle($request, fn () => response()->json(['ok' => true]), 'admin'); $this->assertSame(403, $response->getStatusCode()); } }