Require real draft evidence for offer audit findings

This commit is contained in:
2026-09-06 10:09:12 +03:00
parent ecc031a822
commit 0b3bb8223f
5 changed files with 74 additions and 12 deletions
+25
View File
@@ -0,0 +1,25 @@
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);
});