import test from 'node:test'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import {DatabaseSync} from 'node:sqlite'; import {backupUserData,restoreUserData,verifyUserBackup} from '../server/backup-user-data.mjs'; test('offline backup restores actual documents and preparation data without overwriting a target',()=>{ const root=fs.mkdtempSync(path.join(os.tmpdir(),'ihale-backup-')); try { const source=path.join(root,'source'),backup=path.join(root,'backup'),restored=path.join(root,'restored'); fs.mkdirSync(source);fs.mkdirSync(path.join(source,'belgeler')); fs.writeFileSync(path.join(source,'belgeler','file1'),'Türkçe yetki belgesi'); const db=new DatabaseSync(path.join(source,'users.sqlite')); db.exec('CREATE TABLE belgeler(dosya TEXT); CREATE TABLE tender_state(data TEXT);'); db.prepare('INSERT INTO belgeler VALUES(?)').run('file1');db.prepare('INSERT INTO tender_state VALUES(?)').run(JSON.stringify({ikn:'2026/1',bidDraft:{price:'125,50'}}));db.close(); assert.throws(()=>backupUserData(source,backup)); backupUserData(source,backup,{offline:true});assert.equal(verifyUserBackup(backup).files.length,2); restoreUserData(backup,restored); assert.equal(fs.readFileSync(path.join(restored,'belgeler','file1'),'utf8'),'Türkçe yetki belgesi'); const read=new DatabaseSync(path.join(restored,'users.sqlite'));assert.equal(JSON.parse(read.prepare('SELECT data FROM tender_state').get().data).bidDraft.price,'125,50');read.close(); assert.throws(()=>restoreUserData(backup,restored));assert.throws(()=>backupUserData(source,backup,{offline:true})); fs.appendFileSync(path.join(backup,'belgeler','file1'),'corrupt');assert.throws(()=>verifyUserBackup(backup)); assert.throws(()=>restoreUserData(backup,path.join(root,'bad')));assert.equal(fs.existsSync(path.join(root,'bad')),false); }finally{fs.rmSync(root,{recursive:true,force:true});} });