fix: expose tender detail loading errors and retry

This commit is contained in:
2026-09-06 09:23:13 +03:00
parent a34b758430
commit e07be66e7f
5 changed files with 73 additions and 15 deletions
+22
View File
@@ -0,0 +1,22 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import {fetchTenderDetail} from '../src/services/tenderApi.js';
test('detail loading rejects empty source, supports retry and stops on timeout/cancel',async()=>{
const original=globalThis.fetch;
try {
globalThis.fetch=async()=>new Response(JSON.stringify({success:true,aciklama:''}));
await assert.rejects(()=>fetchTenderDetail('ilan-1'),/Kaynak ilan metni alınamadı/);
globalThis.fetch=async()=>new Response(JSON.stringify({success:true,aciklama:'Tam ilan metni'}));
assert.equal((await fetchTenderDetail('ilan-1')).aciklama,'Tam ilan metni');
globalThis.fetch=async()=>new Response('error',{status:503});
await assert.rejects(()=>fetchTenderDetail('ilan-1'),/HTTP 503/);
globalThis.fetch=async(url,{signal})=>new Promise((resolve,reject)=>{
if(signal.aborted) reject(new DOMException('Cancelled','AbortError'));
else signal.addEventListener('abort',()=>reject(new DOMException('Cancelled','AbortError')),{once:true});
});
await assert.rejects(()=>fetchTenderDetail('ilan-1',{timeoutMs:5}),/zaman aşımı/);
const controller=new AbortController();
const pending=fetchTenderDetail('ilan-1',{signal:controller.signal});controller.abort();
await assert.rejects(()=>pending,{name:'AbortError'});
} finally { globalThis.fetch=original; }
});