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/) })