Assessor_2.0/tests/postgres/unified-result-schema.test.ts

39 lines
1.6 KiB
TypeScript

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');
});
});