XuqmGroup-RNSDK/packages/common/tests/http.test.ts

57 行
1.8 KiB
TypeScript

import assert from 'node:assert/strict'
import test from 'node:test'
import { apiRequest, configureHttp } from '../src/http'
import { _setUserInfo, initConfigFromRemote } from '../src/config'
test('apiRequest aborts a stalled request at the shared timeout boundary', async () => {
const originalFetch = globalThis.fetch
configureHttp({ baseUrl: 'https://platform.example.test' })
globalThis.fetch = async (_input, init) =>
new Promise((_resolve, reject) => {
init?.signal?.addEventListener(
'abort',
() => reject(init.signal?.reason ?? new Error('aborted')),
{ once: true },
)
})
try {
await assert.rejects(
() => apiRequest('/api/v1/rn/release-set/check', { skipAuth: true, timeoutMs: 5 }),
/Request timed out after 5ms/,
)
} finally {
globalThis.fetch = originalFetch
}
})
test('configured requests use public identity headers without client HMAC headers', async () => {
const originalFetch = globalThis.fetch
let sentHeaders = new Headers()
initConfigFromRemote(
{ appKey: 'public-app-key', platformUrl: 'https://platform.example.test' },
{},
)
await _setUserInfo({ userId: 'user-1' })
globalThis.fetch = async (_input, init) => {
sentHeaders = new Headers(init?.headers)
return new Response(JSON.stringify({ data: { ok: true } }), {
headers: { 'content-type': 'application/json' },
status: 200,
})
}
try {
await apiRequest('/config', { skipAuth: true })
assert.equal(sentHeaders.get('X-App-Key'), 'public-app-key')
assert.equal(sentHeaders.get('X-User-Id'), 'user-1')
assert.equal(sentHeaders.has('X-Signature'), false)
assert.equal(sentHeaders.has('X-Nonce'), false)
assert.equal(sentHeaders.has('X-Timestamp'), false)
} finally {
await _setUserInfo(null)
globalThis.fetch = originalFetch
}
})