import 'reflect-metadata'; import assert from 'node:assert/strict'; import test from 'node:test'; import { REQUIRED_PERMISSIONS_KEY } from '../../src/authorization/decorators/require-permissions.decorator'; import { RolesController } from '../../src/administration/roles/roles.controller'; import { UsersController } from '../../src/administration/users/users.controller'; function permissionFor(controller: object, method: string): string[] { const handler = controller[method as keyof typeof controller]; return Reflect.getMetadata(REQUIRED_PERMISSIONS_KEY, handler) as string[]; } test('UsersController declares a permission for every administrative action', () => { const controller = UsersController.prototype; assert.deepEqual(permissionFor(controller, 'list'), ['users.read']); assert.deepEqual(permissionFor(controller, 'getById'), ['users.read']); assert.deepEqual(permissionFor(controller, 'create'), ['users.create']); assert.deepEqual(permissionFor(controller, 'update'), ['users.update']); assert.deepEqual(permissionFor(controller, 'changeStatus'), [ 'users.change_status', ]); assert.deepEqual(permissionFor(controller, 'replaceRoles'), [ 'users.assign_roles', ]); }); test('RolesController separates reading from matrix administration', () => { const controller = RolesController.prototype; assert.deepEqual(permissionFor(controller, 'list'), ['roles.read']); assert.deepEqual(permissionFor(controller, 'listPermissions'), [ 'roles.read', ]); assert.deepEqual(permissionFor(controller, 'getById'), ['roles.read']); assert.deepEqual(permissionFor(controller, 'create'), ['roles.manage']); assert.deepEqual(permissionFor(controller, 'update'), ['roles.manage']); assert.deepEqual(permissionFor(controller, 'replacePermissions'), [ 'roles.manage', ]); });