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')); });