Open and retain tender details discovered outside the main pool

This commit is contained in:
2026-09-06 10:01:34 +03:00
parent 819a10c006
commit a136a74a1b
8 changed files with 66 additions and 6 deletions
+12
View File
@@ -0,0 +1,12 @@
import {test} from 'node:test';
import assert from 'node:assert/strict';
import {searchTender} from '../src/services/searchTender.js';
test('search-only tender becomes a stable detail without fabricated bid or classification fields',()=>{
const source={ikn:'2026/1538773',baslik:'Laboratuvar hizmeti',tur:'Hizmet Alımı',ihaleTarihSaat:'22.09.2026 11:30'};
const t=searchTender(source);
assert.equal(t.id,'ekap-2026/1538773');assert.equal(t.alimTuru,'Hizmet Alımı');
assert.equal(t.tarih,'22.09.2026');assert.equal(t.saat,'11:30');assert.deepEqual(t.items,[]);
const unknown=searchTender({...source,ihaleTarihSaat:'bilinmiyor'});
assert.equal(unknown.tarih,'');assert.equal(unknown.saat,'');assert.equal(unknown.aciklama,'');
assert.throws(()=>searchTender({...source,ikn:'unknown'}));
});
+14
View File
@@ -20,3 +20,17 @@ test('detail loading rejects empty source, supports retry and stops on timeout/c
await assert.rejects(()=>pending,{name:'AbortError'});
} finally { globalThis.fetch=original; }
});
test('search-only detail uses IKN endpoint and warns when official announcement is absent',async()=>{
const original=globalThis.fetch;
try {
globalThis.fetch=async url=>{
assert.equal(url,'/api/documents/ilan?ikn=2026%2F123');
return Response.json({success:true,ikn:'2026/123',metin:'Temel ihale bilgisi',ilanSayisi:0});
};
const detail=await fetchTenderDetail('ekap-2026/123');
assert.equal(detail.aciklama,'Temel ihale bilgisi');assert.match(detail.sourceWarning,/yalnız temel/);
globalThis.fetch=async()=>Response.json({success:true,ikn:'2026/999',metin:'Farklı kaynak'});
await assert.rejects(fetchTenderDetail('ekap-2026/123'),/İKN/);
} finally {globalThis.fetch=original;}
});