33 lines
2.3 KiB
JavaScript
33 lines
2.3 KiB
JavaScript
import test from 'node:test';
|
||
import assert from 'node:assert/strict';
|
||
import {preparationSummary} from '../src/services/preparationSummary.js';
|
||
import {documentKey,documentRevision} from '../src/services/preparationChecks.js';
|
||
const now=new Date('2026-09-06T10:00:00Z');
|
||
const tender={id:'test',ikn:'2026/1',tarih:'10.09.2026',saat:'10:00',baslik:'Lab',items:[{ad:'Kit',miktar:2,birim:'adet'}]};
|
||
const vault={loading:false,error:null,documents:[]};
|
||
test('five saved dossiers retain distinct owners, missing documents and actionable targets',()=>{
|
||
const rows=Array.from({length:5},(_,i)=>({...tender,id:`t-${i}`,ikn:`2026/${i}`,atananPersonel:`Sorumlu ${i}`,bidDraft:{manualDocuments:[{document:`Belge ${i}`}],teklifTuru:'birim'}}));
|
||
rows.forEach((row,i)=>{
|
||
const result=preparationSummary(row,vault,now);
|
||
assert.equal(result.owner,`Sorumlu ${i}`);
|
||
assert.ok(result.documentIssues.some(text=>text.includes(`Belge ${i}`)));
|
||
assert.equal(result.next.target,'source');
|
||
assert.ok(result.issues.some(issue=>issue.target.startsWith('price:')));
|
||
assert.ok(result.issues.some(issue=>issue.target==='firm:vergiNo'));
|
||
});
|
||
});
|
||
test('document revision and vault failures invalidate a previously verified saved document',()=>{
|
||
const doc={document:'Ürün belgesi'};
|
||
const file={id:'f',tur:'firma',olusturma:'2026-09-01',boyut:20,son_kullanma:'2026-12-31'};
|
||
const draft={manualDocuments:[doc],checks:{documents:{[documentKey(doc)]:{status:'verified',evidence:'Madde 2',documentId:'f',documentRevision:documentRevision(file)}}}};
|
||
assert.deepEqual(preparationSummary({...tender,bidDraft:draft},{...vault,documents:[file]},now).documentIssues,[]);
|
||
assert.ok(preparationSummary({...tender,bidDraft:draft},{...vault,documents:[{...file,boyut:21}]},now).documentIssues.some(text=>text.includes('değişti')));
|
||
assert.ok(preparationSummary({...tender,bidDraft:draft},{...vault,error:'offline'},now).documentIssues.some(text=>text.includes('doğrulanamadı')));
|
||
});
|
||
test('expired source takes priority over completion or manually moved Kanban status',()=>{
|
||
const summary=preparationSummary({...tender,tarih:'01.09.2026',kanbanStatus:'teklif_verildi'},vault,now);
|
||
assert.match(summary.next.text,/zamanı geçti/);
|
||
assert.equal(summary.next.target,'source');
|
||
assert.equal(summary.owner,'Atanmadı');
|
||
});
|