28 lines
1.6 KiB
JavaScript
28 lines
1.6 KiB
JavaScript
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}]);
|
|
});
|