Distinguish shared item inventory from tender rows and load errors

This commit is contained in:
2026-09-06 10:15:53 +03:00
parent 0fd46c4867
commit 91451b1134
6 changed files with 77 additions and 16 deletions
+25
View File
@@ -0,0 +1,25 @@
import {test} from 'node:test';
import assert from 'node:assert/strict';
import {kalemleriGetir} from '../src/services/kalem.js';
test('empty shared inventory is distinct from HTTP errors and malformed responses',async()=>{
const original=globalThis.fetch;
try {
globalThis.fetch=async()=>Response.json({success:true,kalemler:[]});
assert.deepEqual((await kalemleriGetir('2026/123')).kalemler,[]);
for(const response of [Response.json({success:true,kalemler:[]},{status:503}),Response.json({success:true}),new Response('Bad gateway')]) {
globalThis.fetch=async()=>response;await assert.rejects(kalemleriGetir('2026/123'),/alınamadı/);
}
} finally {globalThis.fetch=original;}
});
test('shared inventory waits are bounded and can be cancelled on tender change',async()=>{
const original=globalThis.fetch;
try {
globalThis.fetch=async(url,{signal})=>new Promise((resolve,reject)=>{
const cancel=()=>reject(new DOMException('Aborted','AbortError'));
if(signal.aborted)cancel();else signal.addEventListener('abort',cancel,{once:true});
});
await assert.rejects(kalemleriGetir('2026/123',{timeoutMs:5}),/zaman aşımı/);
const c=new AbortController();const pending=kalemleriGetir('2026/123',{signal:c.signal});c.abort();
await assert.rejects(pending,{name:'AbortError'});
} finally {globalThis.fetch=original;}
});