test: assert Survey planning authorization is retired in F4

This commit is contained in:
2026-09-08 09:18:04 -03:00
parent 792e21e669
commit 248fb6285b
@@ -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/);
});