Bound account requests and reject stale or malformed private responses

This commit is contained in:
2026-09-06 10:54:28 +03:00
parent b44ec646a0
commit 9f70e3e77f
4 changed files with 95 additions and 24 deletions
+38
View File
@@ -0,0 +1,38 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import {accountRequest} from '../src/services/accountRequest.js';
import {getAllUserData,listDocuments,getTenderStates} from '../src/services/account.js';
test('account requests preserve conflict codes, distinguish malformed lists and reject HTTP errors',async()=>{
const original=globalThis.fetch;
try {
globalThis.fetch=async()=>Response.json({success:true});
for(const call of [listDocuments,getAllUserData,getTenderStates])await assert.rejects(call(),/eksik veya geçersiz/);
globalThis.fetch=async()=>Response.json({success:false,error:'Conflict',kod:'VERSION_CONFLICT'},{status:409});
await assert.rejects(accountRequest('/state'),{kod:'VERSION_CONFLICT'});
globalThis.fetch=async()=>Response.json({success:true},{status:503});
await assert.rejects(accountRequest('/state'),/503/);
globalThis.fetch=async()=>Response.json({success:true,belgeler:[]});
assert.deepEqual((await listDocuments()).belgeler,[]);
} finally {globalThis.fetch=original;}
});
test('stalled response bodies time out and uncertain writes are not retried',async()=>{
const original=globalThis.fetch;let calls=0;
try {
globalThis.fetch=async()=>{calls++;return {ok:true,json:()=>new Promise(()=>{})};};
await assert.rejects(accountRequest('/state',{method:'PUT',timeoutMs:5}),/sunucuda gerçekleşmiş olabilir/);
assert.equal(calls,1);
await assert.rejects(accountRequest('/state',{timeoutMs:5}),/Bilgiler zamanında/);
} finally {globalThis.fetch=original;}
});
test('late private account responses and explicit cancellation do not reach the caller',async()=>{
const original=globalThis.fetch,storage=Object.getOwnPropertyDescriptor(globalThis,'localStorage');
let token='first';Object.defineProperty(globalThis,'localStorage',{configurable:true,value:{getItem:()=>token}});
try {
globalThis.fetch=async()=>({ok:true,json:async()=>{token='second';return {success:true,veri:{private:'old account'}};}});
await assert.rejects(getAllUserData(),/Oturum değişti/);
const controller=new AbortController();controller.abort();
globalThis.fetch=async()=>{throw new Error('must not be called');};
await assert.rejects(accountRequest('/state',{signal:controller.signal}),{name:'AbortError'});
} finally {globalThis.fetch=original;if(storage)Object.defineProperty(globalThis,'localStorage',storage);else delete globalThis.localStorage;}
});