import {test} from 'node:test'; import assert from 'node:assert/strict'; import {qualifyOfferAudit} from '../server/offer-audit.mjs'; const requirements=['Teslim süresi 30 gün','Numune sunulacak']; const draft='Teslim süresi 30 gün olarak teklif edilmiştir.'; test('invented evidence and missing rows cannot count as satisfied or receive partial credit',()=>{ const out=qualifyOfferAudit({maddeler:[{gereklilik:requirements[0],durum:'karsilaniyor',kanit:'Ürünler 30 gün içinde teslim edilir.'}]},requirements,draft); assert.equal(out.uyum_yuzde,0);assert.equal(out.belirsizSayisi,2); assert.equal(out.maddeler[0].kanit,null); }); test('reordered model rows match the actual requirement, not their array position',()=>{ const out=qualifyOfferAudit({maddeler:[{gereklilik:requirements[1],durum:'eksik'}, {gereklilik:requirements[0],durum:'karsilaniyor',kanit:'Teslim süresi 30 gün'}]},requirements,draft); assert.equal(out.maddeler[0].durum,'karsilaniyor');assert.equal(out.maddeler[1].durum,'eksik'); assert.equal(out.uyum_yuzde,50);assert.deepEqual(out.eksikler,[requirements[1]]); assert.match(out.kapsam,/tüm dokümanın/); }); test('duplicate and mismatched requirement identities remain unresolved',()=>{ const row={gereklilik:requirements[0],durum:'karsilaniyor',kanit:'Teslim süresi 30 gün'}; const out=qualifyOfferAudit({maddeler:[row,row,{...row,gereklilik:'Değiştirilmiş gereklilik'}]},requirements,draft); assert.equal(out.uyum_yuzde,0);assert.equal(out.belirsizSayisi,2); }); test('blank and malformed model payloads fail instead of claiming a completed audit',()=>{ for(const result of [null,{}, {maddeler:[]},{maddeler:'wrong'}]) assert.throws(()=>qualifyOfferAudit(result,requirements,draft),/denetim maddelerini/); const out=qualifyOfferAudit({maddeler:[null]},requirements,draft);assert.equal(out.belirsizSayisi,2); });