10 lines
1010 B
JavaScript
10 lines
1010 B
JavaScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import fs from 'node:fs'
|
|
import {assertSalaryGradeEvidence} from './safe-production-migrate.mjs'
|
|
const fixture=()=>JSON.parse(fs.readFileSync(new URL('./fixtures/salary-grade-evidence.json',import.meta.url),'utf8'))
|
|
test('grade migration retains blank defaults, parent FK and exact unique active grade semantics',()=>{assert.doesNotThrow(()=>assertSalaryGradeEvidence(fixture()))})
|
|
test('grade audit rejects weakened formats, defaults, foreign key and uniqueness',()=>{
|
|
for(const mutate of [e=>e.columns[0].column_default="'P3'::character varying",e=>e.columns[0].is_nullable='YES',e=>e.constraints.find(r=>r.contype==='f').delete_action='c',e=>e.constraints.find(r=>r.constraint_name==='personnel_salary_grade_check').expression='true',e=>e.indexes.find(r=>r.indisunique).predicate='deleted_at IS NULL',e=>e.indexes.find(r=>r.indisunique).columns.reverse()]){const e=fixture();mutate(e);assert.throws(()=>assertSalaryGradeEvidence(e))}
|
|
})
|