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

28 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 {executeAnalysisJob} from '../server/analysis-job.mjs';
const input={text:'Kaynak metni '.repeat(10),tender:{ikn:'2026/1'},mode:'derin'};
const output=()=>({result:{summary:'Analiz'},model:{label:'QA',provider:'test'}});
test('general analysis pins source and passes cancellation signal to provider',async()=>{
let pinned,request;const signal=new AbortController().signal;
const result=await executeAnalysisJob({id:'a',runId:'r',input},{signal,pin:(id,runId,data)=>{pinned=data;return true;},analyze:async data=>{request=data;return output();}});
assert.equal(pinned.text,input.text);assert.equal(request.signal,signal);assert.equal(request.mode,'derin');assert.equal(result.success,true);
assert.ok(Number.isFinite(Date.parse(result.analyzedAt)));
await assert.rejects(executeAnalysisJob({input:{text:'short'}},{pin:()=>assert.fail(),analyze:()=>assert.fail()}),/en az 40/);
});
test('reviewed analysis uses owner source and refuses changed review before or after provider',async()=>{
const reviewed={text:'Sunucu inceleme metni '.repeat(5),fileName:'checked.pdf',humanReview:{textHash:'A'}};
const job={id:'a',runId:'r',email:'owner',input:{...input,reviewedSource:{documentId:'doc',revision:1},humanReview:{textHash:'forged'}}};
let pinned,calls=0;
await assert.rejects(executeAnalysisJob(job,{pin:(id,runId,data)=>{pinned=data;return true;},reviewSource:(email,ref,key)=>{
assert.equal(email,'owner');assert.equal(key,'2026/1');calls++;return calls===1?reviewed:{...reviewed,humanReview:{textHash:'B'}};
},analyze:async request=>{assert.equal(request.text,reviewed.text);return output();}}),/analiz sırasında değişti/);
assert.equal(pinned.humanReview.textHash,'A');
await assert.rejects(executeAnalysisJob({...job,sourcePinned:true,input:pinned},{reviewSource:()=>({...reviewed,humanReview:{textHash:'B'}}),analyze:()=>assert.fail('stale source must not run')}),/İnceleme değişti/);
});
test('cancelled source pin prevents provider call and cancellation after provider rejects result',async()=>{
await assert.rejects(executeAnalysisJob({input},{pin:()=>false,analyze:()=>assert.fail()}),/artık etkin değil/);
const controller=new AbortController();
await assert.rejects(executeAnalysisJob({input},{signal:controller.signal,pin:()=>true,analyze:async()=>{controller.abort();return output();}}),{name:'AbortError'});
});