diff --git a/api-v3/test/unit/survey-planning-authorization.test.ts b/api-v3/test/unit/survey-planning-authorization.test.ts index 63949ae..92682a0 100644 --- a/api-v3/test/unit/survey-planning-authorization.test.ts +++ b/api-v3/test/unit/survey-planning-authorization.test.ts @@ -1,31 +1,29 @@ -import 'reflect-metadata'; import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; import test from 'node:test'; -import { REQUIRED_PERMISSIONS_KEY } from '../../src/authorization/decorators/require-permissions.decorator'; -import { - SurveyCampaignsController, - SurveyCampaignTargetsController, -} from '../../src/survey-planning/survey-campaigns.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[]; -} +const root = process.cwd(); +const migration = fs.readFileSync( + path.join(root, 'src/database/migrations/1790000300000-f4-remove-survey-subsystem.ts'), + 'utf8', +); -test('campaign endpoints separate reading, management and assignment', () => { - const controller = SurveyCampaignsController.prototype; - assert.deepEqual(permissionFor(controller, 'list'), ['surveys.read']); - assert.deepEqual(permissionFor(controller, 'get'), ['surveys.read']); - assert.deepEqual(permissionFor(controller, 'assignees'), ['surveys.assign']); - assert.deepEqual(permissionFor(controller, 'create'), ['surveys.manage']); - assert.deepEqual(permissionFor(controller, 'update'), ['surveys.manage']); - assert.deepEqual(permissionFor(controller, 'changeStatus'), ['surveys.manage']); - assert.deepEqual(permissionFor(controller, 'addTarget'), ['surveys.manage']); +test('F4 removes Survey planning controllers from the active API', () => { + assert.equal(fs.existsSync(path.join(root, 'src/survey-planning/survey-campaigns.controller.ts')), false); + assert.equal(fs.existsSync(path.join(root, 'src/survey-planning/survey-campaigns.service.ts')), false); }); -test('target planning, assignment and execution use distinct permissions', () => { - const controller = SurveyCampaignTargetsController.prototype; - assert.deepEqual(permissionFor(controller, 'update'), ['surveys.manage']); - assert.deepEqual(permissionFor(controller, 'assign'), ['surveys.assign']); - assert.deepEqual(permissionFor(controller, 'changeStatus'), ['surveys.execute']); +test('F4 removes Survey planning permissions and their role bindings', () => { + assert.match(migration, /'surveys\.read'/); + assert.match(migration, /'surveys\.manage'/); + assert.match(migration, /'surveys\.assign'/); + assert.match(migration, /DELETE FROM role_permissions/); + assert.match(migration, /DELETE FROM permissions/); +}); + +test('F4 rollback retains the former role-permission map only as a reversible migration path', () => { + assert.match(migration, /const rolePermissionValues/); + assert.match(migration, /WITH mapping\(role_code,permission_code\)/); + assert.match(migration, /INSERT INTO role_permissions/); });