45 lines
1.7 KiB
TypeScript
45 lines
1.7 KiB
TypeScript
/**
|
|
* P7/D15 A3 — drift-lock for the install_audit CHECK constraints.
|
|
*
|
|
* The table is declared in TWO places: install-audit.ts (core, generated from
|
|
* the canonical @waggle/shared arrays) and hive-mind-core/src/mind/schema.ts
|
|
* (the OSS substrate, a standalone literal). They MUST produce identical CHECK
|
|
* lists or auditStore.record() crashes on one path. This test pins both to the
|
|
* single canonical source, so a drift in either fails CI instead of production.
|
|
*/
|
|
import { describe, it, expect } from 'vitest';
|
|
import {
|
|
sqlInList, RISK_LEVELS, APPROVAL_CLASSES, AUDIT_ACTIONS,
|
|
AUDIT_CAPABILITY_TYPES, AUDIT_INITIATORS, TRUST_SOURCES,
|
|
} from '@waggle/shared';
|
|
import { SCHEMA_SQL } from '@waggle/hive-mind-core';
|
|
import { INSTALL_AUDIT_TABLE_SQL } from '../src/install-audit.js';
|
|
|
|
const COLUMNS = [
|
|
{ col: 'capability_type', values: AUDIT_CAPABILITY_TYPES },
|
|
{ col: 'risk_level', values: RISK_LEVELS },
|
|
{ col: 'trust_source', values: TRUST_SOURCES },
|
|
{ col: 'approval_class', values: APPROVAL_CLASSES },
|
|
{ col: 'action', values: AUDIT_ACTIONS },
|
|
{ col: 'initiator', values: AUDIT_INITIATORS },
|
|
] as const;
|
|
|
|
describe('install_audit CHECK parity (A3)', () => {
|
|
for (const { col, values } of COLUMNS) {
|
|
const expected = `${col} IN (${sqlInList(values)})`;
|
|
|
|
it(`core install-audit DDL pins ${col} to the canonical list`, () => {
|
|
expect(INSTALL_AUDIT_TABLE_SQL).toContain(expected);
|
|
});
|
|
|
|
it(`OSS substrate schema.ts pins ${col} to the canonical list`, () => {
|
|
expect(SCHEMA_SQL).toContain(expected);
|
|
});
|
|
}
|
|
|
|
it('both DDLs accept the P5/D4 uninstalled action', () => {
|
|
expect(INSTALL_AUDIT_TABLE_SQL).toContain("'uninstalled'");
|
|
expect(SCHEMA_SQL).toContain("'uninstalled'");
|
|
});
|
|
});
|