gongxiangp2/scripts/desktop-client-migration.test.mjs

17 lines
1.3 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {assertDesktopWorkspaceEvidence} from './safe-production-migrate.mjs'
import {desktopEvidence} from './desktop-client-migration-fixture.mjs'
test('desktop migration requires credential hashes, owner boundaries, and draft persistence columns',()=>{
assert.doesNotThrow(()=>assertDesktopWorkspaceEvidence(desktopEvidence()))
for(const name of ['code_hash','token_hash','owner_id','expires_at','composer','document','storage_key']){
const evidence=desktopEvidence();evidence.columns=evidence.columns.filter(row=>row.column_name!==name)
assert.throws(()=>assertDesktopWorkspaceEvidence(evidence),/column mismatch/)
}
})
test('desktop migration rejects missing uniqueness and cross-account or invalid foreign keys',()=>{
for(let i=0;i<4;i++){const evidence=desktopEvidence();evidence.indexes[i].indisunique=false;assert.throws(()=>assertDesktopWorkspaceEvidence(evidence),/unique index mismatch/)}
for(let i=0;i<5;i++){const evidence=desktopEvidence();evidence.constraints[i].referenced_table='other_accounts';assert.throws(()=>assertDesktopWorkspaceEvidence(evidence),/foreign key mismatch/)}
const evidence=desktopEvidence();evidence.columns.find(row=>row.column_name==='token_hash').is_nullable='YES';assert.throws(()=>assertDesktopWorkspaceEvidence(evidence),/column mismatch/)
})