17 lines
1.3 KiB
JavaScript
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/)
|
|
})
|