Files
ihaleist/tests/offer-source.test.mjs

25 lines
1.6 KiB
JavaScript

import {test} from 'node:test';
import assert from 'node:assert/strict';
import {ihaleMetni,teklifDenetle,teklifTaslak} from '../server/ai-teklif.mjs';
test('an explicitly supplied short source is used intact instead of another tender announcement',async()=>{
const supplied='Geçerlilik 120 gündür. Numune istenir.';
const result=await ihaleMetni('2026/123',supplied,'Geçerlilik 60 gündür. '.repeat(20));
assert.deepEqual(result,{text:supplied,kaynak:'yüklenen'});
});
test('explicit empty or invalid sources fail without falling back to a different document',async()=>{
for(const text of ['', ' ', null, {}, 123]) {
await assert.rejects(ihaleMetni('2026/123',text,'Başka ilan '.repeat(30)),/kaynak metni boş veya geçersiz/);
}
});
test('audit and draft generation do not swallow explicit source validation errors',async()=>{
await assert.rejects(teklifDenetle({ikn:'2026/123',text:' ',taslak:'Sentetik taslak '.repeat(30)}),/kaynak metni boş veya geçersiz/);
await assert.rejects(teklifTaslak({ikn:'2026/123',text:' '}),/kaynak metni boş veya geçersiz/);
});
test('audit requirement collection retains all supplied tender items and explicit conditions',async()=>{
const {gereklilikMetni}=await import('../server/ai-teklif.mjs');
const items=Array.from({length:100},(_,i)=>({ad:`Kalem ${i+1}`,miktar:i+1,birim:'adet'}));
const conditions=Array.from({length:80},(_,i)=>`Koşul ${i+1}`);
const collected=gereklilikMetni({items},conditions,'',true);
assert.equal(collected.length,180);assert.ok(collected.includes('Kalem: Kalem 100 100 adet'));assert.ok(collected.includes('Koşul 80'));
});