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 { 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/); });