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 { AssetTypesController } from '../../src/asset-master/asset-types.controller'; import { AssetsController } from '../../src/asset-master/assets.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('AssetsController separates reading, editing and status permissions', () => { const controller = AssetsController.prototype; assert.deepEqual(permissionFor(controller, 'list'), ['assets.read']); assert.deepEqual(permissionFor(controller, 'tree'), ['assets.read']); assert.deepEqual(permissionFor(controller, 'treeChildren'), ['assets.read']); assert.deepEqual(permissionFor(controller, 'parentOptions'), ['assets.read']); assert.deepEqual(permissionFor(controller, 'getById'), ['assets.read']); assert.deepEqual(permissionFor(controller, 'create'), ['assets.create']); assert.deepEqual(permissionFor(controller, 'update'), ['assets.update']); assert.deepEqual(permissionFor(controller, 'changeStatus'), ['assets.change_status']); assert.deepEqual(permissionFor(controller, 'changeOperationalStatus'), ['assets.change_operational_status']); }); test('AssetTypesController reserves configuration for asset_types.manage', () => { const controller = AssetTypesController.prototype; assert.deepEqual(permissionFor(controller, 'list'), ['asset_types.read']); assert.deepEqual(permissionFor(controller, 'bootstrapStatus'), ['asset_types.read']); assert.deepEqual(permissionFor(controller, 'bootstrapDefaults'), ['asset_types.manage']); assert.deepEqual(permissionFor(controller, 'getById'), ['asset_types.read']); assert.deepEqual(permissionFor(controller, 'create'), ['asset_types.manage']); assert.deepEqual(permissionFor(controller, 'update'), ['asset_types.manage']); assert.deepEqual(permissionFor(controller, 'createAttribute'), ['asset_types.manage']); assert.deepEqual(permissionFor(controller, 'updateAttribute'), ['asset_types.manage']); });