import {test} from 'node:test'; import assert from 'node:assert/strict'; import {questionChunks,qualifyQuestionAnswer} from '../server/document-question.mjs'; test('long single-line sources and short final clauses are preserved without prefix truncation',()=>{ const text='Uzun şartname metni '.repeat(1500)+'Numune zorunludur.'; const parts=questionChunks(text); assert.equal(parts.join(''),text);assert.ok(parts.every(p=>p.length<=1200)); assert.ok(parts.at(-1).includes('Numune zorunludur.')); const shortTail=questionChunks('x'.repeat(1200)+'Son şart.'); assert.equal(shortTail[1],'Son şart.'); }); test('Unicode boundaries remain intact and chunk sizes are validated',()=>{ const text='x'.repeat(1199)+'🔬'+'y'.repeat(1300); const parts=questionChunks(text); assert.equal(parts.join(''),text);assert.ok(parts.every(p=>!/[\uD800-\uDBFF]$/.test(p))); for(const size of [0,-1,31,1401,Infinity]) assert.throws(()=>questionChunks(text,size)); }); test('unknown, absent and malformed citations cannot become a sourced answer',()=>{ const parts=[{n:7,icerik:'Teslim süresi 30 gün.'}]; for(const cevap of ['Teslim süresi 60 gün.','Teslim süresi 30 gün [1].','[7] ve [99]',null,{}]) assert.throws(()=>qualifyQuestionAnswer({cevap},parts)); }); test('only actually cited pieces are returned with their exact untruncated content',()=>{ const parts=[{n:2,icerik:'İlgisiz madde'},{n:7,icerik:'Teslim süresi 30 gün.\nSon koşul.'}]; const out=qualifyQuestionAnswer({cevap:'Teslim süresi 30 gün [7]. Kaynak [7].'},parts); assert.deepEqual(out.kaynaklar,[{n:7,alinti:parts[1].icerik}]); });