Files
ihaleist/tests/analysis-quality.test.mjs
T

40 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import test from 'node:test';
import assert from 'node:assert/strict';
import {qualifyAnalysis} from '../server/analysis-quality.mjs';
import {analysisStatusBlocksPreparation} from '../src/services/preparationAnalysis.js';
test('all non-final analysis states block preparation',()=>{
for(const status of ['partial','error','processing','pending'])assert.equal(analysisStatusBlocksPreparation(status),true);
for(const status of ['complete','verified',''])assert.equal(analysisStatusBlocksPreparation(status),false);
});
test('malformed nested model fields cannot reach preparation screens',()=>{
for(const result of [
{itemsAndSpecs:[null]}, {itemsAndSpecs:[{name:{text:'Kit'}}]},
{itemsAndSpecs:[{name:'Kit',quantity:'2 adet',keySpecs:'steril'}]},
{documentChecklist:[{document:'ÜTS',mandatory:'false'}]},
{criticalRequirements:[{text:'Numune'}]}, {deadlines:'120 gün'},
{roadmap:[{action:'Hazırla',step:'bir'}]},
{bidAnalysis:{recommendedBid:'1000'}}, {bidAnalysis:{winProbability:101}},
{citations:[null]}, {summary:{text:'Analiz'}}
]) assert.throws(()=>qualifyAnalysis(result), /biçim/);
});
test('missing item quantity or document obligation keeps analysis partial',()=>{
const out=qualifyAnalysis({itemsAndSpecs:[{name:'Kit'}],documentChecklist:[{document:'ÜTS'}]});
assert.equal(out.sourceReview.status,'partial');
assert.ok(out.sourceReview.issues.some(v=>v.includes('miktar/birim')));
assert.ok(out.sourceReview.issues.some(v=>v.includes('zorunluluk')));
});
test('truncated input and repaired output are partial, never complete analysis',()=>{
const r=qualifyAnalysis({itemsAndSpecs:[{name:'Kit',quantity:'2 adet'}]},{text:'a'.repeat(100),limit:50,expectedItems:100,repaired:true});
assert.equal(r.sourceReview.status,'partial');assert.equal(r.sourceReview.issues.length,3);
assert.equal(r.sourceReview.analyzedCharacters,50);
assert.equal(r.sourceReview.sections.documentChecklist,'not_extracted');
});
test('source versions change with content and empty sections do not claim absence',()=>{
const a=qualifyAnalysis({documentChecklist:[]},{text:'kaynak A'});
const b=qualifyAnalysis({documentChecklist:[]},{text:'kaynak B'});
assert.notEqual(a.documentVersion,b.documentVersion);
assert.equal(a.sourceReview.status,'review_required');
assert.equal(a.sourceReview.sections.documentChecklist,'not_extracted');
assert.throws(()=>qualifyAnalysis({itemsAndSpecs:'kalem yok'}));
});