createUser(['ROLE_USER']); $res = $this->authJson('GET', '/api/v1/permission-catalog', $user); self::assertSame(200, $this->responseCode()); self::assertSame( array_keys(PermissionCatalog::RESOURCES), array_column($res['data']['resources'], 'key'), 'کاتالوگ باید همان منابع رجیستری و با همان ترتیب باشد', ); } public function testEveryResourceCarriesLabelAndActions(): void { $user = $this->createUser(['ROLE_USER']); $res = $this->authJson('GET', '/api/v1/permission-catalog', $user); foreach ($res['data']['resources'] as $resource) { self::assertNotSame('', $resource['label'], "منبع {$resource['key']} برچسب ندارد"); self::assertNotEmpty($resource['actions'], "منبع {$resource['key']} اکشن ندارد"); foreach ($resource['actions'] as $action) { self::assertArrayHasKey('key', $action); self::assertNotSame('', $action['label']); } } } public function testClinicOnlyFlagIsExposed(): void { $user = $this->createUser(['ROLE_USER']); $res = $this->authJson('GET', '/api/v1/permission-catalog', $user); $byKey = array_column($res['data']['resources'], 'clinic_only', 'key'); self::assertTrue($byKey['clinic_doctors'], 'مدیریت پزشکان کلینیک فقط برای مالکِ کلینیک است'); self::assertFalse($byKey['appointments']); } public function testAnonymousIsRejected(): void { $this->client->request('GET', '/api/v1/permission-catalog'); self::assertSame(401, $this->responseCode()); } }