Files
ihaleist/tests/backup-user-data.test.mjs
T

27 lines
1.9 KiB
JavaScript

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