import { readFile } from 'node:fs/promises'; import { resolve } from 'node:path'; import { describe, expect, it } from 'vitest'; import { databaseMigrations } from '../../server/postgres/migration-catalog'; const migrationPath = resolve( import.meta.dirname, '..', '..', 'server', 'postgres', 'migrations', '007_unified_result_read_model.sql' ); describe('PostgreSQL unified-result read-model migration', () => { it('adds independent outcome and technical execution dimensions', async () => { const sql = await readFile(migrationPath, 'utf8'); expect(databaseMigrations.find(migration => migration.version === '007')).toMatchObject({ version: '007', name: 'unified-result-read-model' }); expect(sql).toContain('ADD COLUMN outcome_normalized text'); expect(sql).toContain('ADD COLUMN technical_execution_state text'); expect(sql).toContain('assessor_occurrences_outcome_check'); expect(sql).toContain('assessor_occurrences_execution_state_check'); expect(sql).not.toMatch(/DROP\s+(TABLE|COLUMN)/i); }); it('persists namespaced, profile-versioned multi-category assignments', async () => { const sql = await readFile(migrationPath, 'utf8'); expect(sql).toContain('CREATE TABLE assessor_result_categories'); expect(sql).toContain('CREATE TABLE assessor_finding_occurrence_categories'); expect(sql).toContain('PRIMARY KEY (namespace, category_code, source_profile_id, source_profile_version)'); expect(sql).toContain('FOREIGN KEY (namespace, category_code, source_profile_id, source_profile_version)'); expect(sql).toContain('assessor_occurrence_categories_filter_idx'); }); });