Surface shared inventory failures and isolate test database storage
This commit is contained in:
@@ -12,7 +12,7 @@ const {signToken}=await import('../server/auth.mjs');
|
||||
const user={email:'browser-qa@example.test',name:'Laboratuvar QA',isAdmin:false};
|
||||
const token=signToken(user);
|
||||
const probe=netServer();await new Promise(r=>probe.listen(0,'127.0.0.1',r));const port=probe.address().port;await new Promise(r=>probe.close(r));
|
||||
const api=spawn(process.execPath,['server/index.js'],{cwd:new URL('..',import.meta.url),env:{PATH:process.env.PATH,NODE_ENV:'test',AUTH_SECRET:process.env.AUTH_SECRET,IHALEIST_USER_DATA_DIR:dir,PORT:String(port),UYUM_GOMME:'0'},stdio:'ignore'});
|
||||
const api=spawn(process.execPath,['server/index.js'],{cwd:new URL('..',import.meta.url),env:{PATH:process.env.PATH,NODE_ENV:'test',AUTH_SECRET:process.env.AUTH_SECRET,IHALEIST_USER_DATA_DIR:dir,IHALEIST_SHARED_DATA_DIR:join(dir,'shared'),PORT:String(port),UYUM_GOMME:'0'},stdio:'ignore'});
|
||||
const entries=[['1582991','Giresun','10.09.2026','10:00'],['1534665','Kayseri','22.09.2026','11:00'],['1499061','Akdeniz','22.09.2026','10:30'],['1573235','Aksaray','09.09.2026','10:00'],['1523851','Tepecik','11.09.2026','10:00']];
|
||||
const tenders=entries.map(([id,city,date,time])=>({id:'qa-'+id,ikn:'2026/'+id,baslik:'QA — '+city+' laboratuvar',kurum:city+' TEST KURUMU',sehir:city,tarih:date,saat:time,alimTuru:'Mal Alımı',sektor:'Laboratuvar & Ölçüm',sektorler:['Laboratuvar & Ölçüm'],durum:'Açık',takipte:false,kanbanStatus:'incelenecek',items:[{id:'1',ad:'Sentetik test kalemi',miktar:2,birim:'adet'}],aciklama:'Bu yalnızca yerel arayüz test verisidir. Teklif geçerlilik süresi 120 takvim günü. Birim fiyat teklif. '.repeat(3)}));
|
||||
const ui=await createServer({server:{host:'127.0.0.1',port:0,proxy:{'/api':{target:'http://127.0.0.1:'+port}}},plugins:[{name:'qa-fixtures',configureServer(server){server.middlewares.use((req,res,next)=>{
|
||||
|
||||
@@ -19,7 +19,7 @@ const request=async(path,method='GET',body,auth=token)=>{
|
||||
before(async()=>{
|
||||
const socket=createServer();await new Promise(r=>socket.listen(0,'127.0.0.1',r));const port=socket.address().port;await new Promise(r=>socket.close(r));
|
||||
base='http://127.0.0.1:'+port;
|
||||
child=spawn(process.execPath,['server/index.js'],{cwd:new URL('..',import.meta.url),env:{...process.env,NODE_ENV:'test',PORT:String(port),IHALEIST_USER_DATA_DIR:dir,UYUM_GOMME:'0'},stdio:'ignore'});
|
||||
child=spawn(process.execPath,['server/index.js'],{cwd:new URL('..',import.meta.url),env:{...process.env,NODE_ENV:'test',PORT:String(port),IHALEIST_USER_DATA_DIR:dir,IHALEIST_SHARED_DATA_DIR:join(dir,'shared'),UYUM_GOMME:'0'},stdio:'ignore'});
|
||||
for(let i=0;i<100;i++){try{await fetch(base+'/api/auth/google/config');return;}catch{await new Promise(r=>setTimeout(r,50));}}
|
||||
throw new Error('QA API did not start');
|
||||
});
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
import {test} from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {mkdtempSync,writeFileSync,rmSync,existsSync} from 'node:fs';
|
||||
import {tmpdir} from 'node:os';
|
||||
import {join} from 'node:path';
|
||||
import {execFileSync} from 'node:child_process';
|
||||
test('failed shared-store initialization is retryable after storage is repaired',()=>{
|
||||
const dir=mkdtempSync(join(tmpdir(),'ihaleist-shared-recovery-'));
|
||||
try {
|
||||
writeFileSync(join(dir,'kalem.sqlite'),'not a sqlite database');
|
||||
execFileSync(process.execPath,['--input-type=module','-e',`
|
||||
import assert from 'node:assert/strict';
|
||||
import {rmSync} from 'node:fs';
|
||||
import {join} from 'node:path';
|
||||
const store=await import('./server/kalem-store.mjs');
|
||||
assert.throws(()=>store.kalemOku('2026/123'));
|
||||
rmSync(join(process.env.IHALEIST_SHARED_DATA_DIR,'kalem.sqlite'));
|
||||
assert.deepEqual(store.kalemOku('2026/123'),{kalemler:[],kaynak:null});
|
||||
assert.equal(store.kalemYaz('2026/123',[{ad:'QA tüp',miktar:2,birim:'adet'}]),1);
|
||||
assert.equal(store.kalemOku('2026/123').kalemler[0].ad,'QA tüp');
|
||||
`],{cwd:new URL('..',import.meta.url),env:{...process.env,IHALEIST_SHARED_DATA_DIR:dir},stdio:'pipe'});
|
||||
assert.equal(existsSync(join(dir,'kalem.sqlite')),true);
|
||||
} finally {rmSync(dir,{recursive:true,force:true});}
|
||||
});
|
||||
Reference in New Issue
Block a user