32 lines
1.9 KiB
TypeScript
32 lines
1.9 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', '013_policy_identity_and_baseline_analysis.sql');
|
|
|
|
describe('PostgreSQL policy identity and baseline analysis migration', () => {
|
|
it('separates stable identities, versioned runs, catalog metadata and individual settings', async () => {
|
|
const sql = await readFile(migrationPath, 'utf8');
|
|
expect(databaseMigrations.find(migration => migration.version === '013'))
|
|
.toMatchObject({ version: '013', name: 'policy-identity-and-baseline-analysis' });
|
|
expect(sql).toContain('CREATE TABLE assessor_policy_identities');
|
|
expect(sql).toContain('CREATE TABLE assessor_policy_identity_analysis_runs');
|
|
expect(sql).toContain('CREATE TABLE assessor_policy_identity_resolutions');
|
|
expect(sql).toContain('CREATE TABLE assessor_microsoft_security_baseline_analyses');
|
|
expect(sql).toContain('CREATE TABLE assessor_admx_catalog_versions');
|
|
expect(sql).toContain('CREATE TABLE assessor_microsoft_security_baseline_settings');
|
|
expect(sql).toContain('supersedes_analysis_run_id');
|
|
expect(sql).toContain('UNIQUE (source_processing_run_id)');
|
|
expect(sql).toContain('UNIQUE (baseline_id, analyzer_version)');
|
|
});
|
|
|
|
it('never treats display metadata as a stable technical identity column', async () => {
|
|
const sql = await readFile(migrationPath, 'utf8');
|
|
const identityTable = sql.slice(sql.indexOf('CREATE TABLE assessor_policy_identities'), sql.indexOf('CREATE TABLE assessor_policy_identity_analysis_runs'));
|
|
expect(identityTable).not.toMatch(/display|file_name|policy_name/i);
|
|
expect(identityTable).toMatch(/resolver_version/);
|
|
expect(identityTable).toMatch(/target_kind/);
|
|
});
|
|
});
|