mirror of
https://github.com/gadgethd/ukmesh.git
synced 2026-09-11 09:35:35 +00:00
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
ApiResponseError,
|
|
checkedJson,
|
|
withScopeParams,
|
|
} from './api.js';
|
|
|
|
test('scope parameters preserve existing queries', () => {
|
|
assert.equal(
|
|
withScopeParams('/api/items?limit=2', { network: 'ukmesh', observer: 'AA' }),
|
|
'/api/items?limit=2&network=ukmesh&observer=AA',
|
|
);
|
|
});
|
|
|
|
test('checked JSON rejects HTTP, malformed, oversized, and schema-invalid responses', async () => {
|
|
await assert.rejects(
|
|
checkedJson(new Response('no', { status: 503 })),
|
|
(error: unknown) => error instanceof ApiResponseError && error.status === 503,
|
|
);
|
|
await assert.rejects(
|
|
checkedJson(new Response('not-json', { status: 200 })),
|
|
/not valid JSON/,
|
|
);
|
|
await assert.rejects(
|
|
checkedJson(new Response(JSON.stringify({ value: '12345' }), { status: 200 }), { maxBytes: 4 }),
|
|
/byte limit/,
|
|
);
|
|
await assert.rejects(
|
|
checkedJson<{ value: number }>(
|
|
new Response(JSON.stringify({ value: 'wrong' }), { status: 200 }),
|
|
{
|
|
validate: (value): value is { value: number } => (
|
|
typeof value === 'object'
|
|
&& value !== null
|
|
&& typeof (value as { value?: unknown }).value === 'number'
|
|
),
|
|
},
|
|
),
|
|
/expected schema/,
|
|
);
|
|
assert.deepEqual(
|
|
await checkedJson<{ value: number }>(new Response('{"value":3}', { status: 200 })),
|
|
{ value: 3 },
|
|
);
|
|
});
|