Files
dh-inspeccion-v2/api-v3/test/unit/finding-catalog-administration-integrity.test.ts

31 lines
1.5 KiB
TypeScript

import assert from 'node:assert/strict';
import { readFile } from 'node:fs/promises';
import { resolve } from 'node:path';
import test from 'node:test';
async function source(relativePath: string): Promise<string> {
return readFile(resolve(process.cwd(), 'src', relativePath), 'utf8');
}
test('D5.2 versions every catalog item and keeps versions append-only', async () => {
const migration = await source(
'database/migrations/1787335200000-phase-d5-2-finding-catalog-administration.ts',
);
assert.match(migration, /CREATE TABLE finding_catalog_item_versions/);
assert.match(migration, /UNIQUE \(item_id, revision\)/);
assert.match(migration, /jsonb_typeof\(snapshot\) = 'object'/);
assert.match(migration, /INSERT INTO finding_catalog_item_versions/);
assert.match(migration, /FROM finding_catalog_items item/);
assert.match(migration, /GRANT SELECT, INSERT ON TABLE finding_catalog_item_versions/);
assert.match(migration, /REVOKE UPDATE, DELETE ON TABLE finding_catalog_item_versions/);
});
test('D5.2 catalog administration captures audit and immutable revisions', async () => {
const service = await source('inspection-findings/finding-catalog.service.ts');
assert.match(service, /item\.revision \+= 1/);
assert.match(service, /captureVersion\(manager, created, principal\)/);
assert.match(service, /captureVersion\(manager, updated, principal\)/);
assert.match(service, /FINDING_CATEGORY_CREATED/);
assert.match(service, /FINDING_CATALOG_ITEM_UPDATED/);
});