From abf7779088d6c47f823dae1e76ea25862e81dccb Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Mon, 4 May 2026 20:08:07 -0400 Subject: [PATCH] test: cover typed timeout mapping in query dispatch --- sdk/src/query/query-dispatch.test.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/sdk/src/query/query-dispatch.test.ts b/sdk/src/query/query-dispatch.test.ts index 359744f99..01ccbf9a1 100644 --- a/sdk/src/query/query-dispatch.test.ts +++ b/sdk/src/query/query-dispatch.test.ts @@ -3,9 +3,9 @@ import { mkdir, rm, writeFile } from 'node:fs/promises'; import { join } from 'node:path'; import { tmpdir } from 'node:os'; import { createRegistry } from './index.js'; +import { GSDToolsError } from '../gsd-tools-error.js'; import { runQueryDispatch } from './query-dispatch.js'; import { createCommandTopology } from './command-topology.js'; - describe('runQueryDispatch', () => { let tmpDir: string; let fixtureDir: string; @@ -152,6 +152,24 @@ describe('runQueryDispatch', () => { expect(out.error.details).toMatchObject({ command: 'state.load', args: [], timeout_ms: 30000 }); }); + it('maps typed native timeout to native_timeout kind with details', async () => { + const registry = createRegistry(); + const out = await runQueryDispatch({ + registry, + projectDir: tmpDir, + cjsFallbackEnabled: true, + resolveGsdToolsPath: () => '', + dispatchNative: async () => { throw GSDToolsError.timeout('timed out', 'state', ['load'], '', 30000); }, + topology: createCommandTopology(registry), + }, ['state', 'load']); + + expect(out.ok).toBe(false); + if (out.ok) throw new Error('expected failure'); + expect(out.error.kind).toBe('native_timeout'); + expect(out.error.code).toBe(1); + expect(out.error.details).toMatchObject({ command: 'state.load', args: [], timeout_ms: 30000 }); + }); + it('maps native error to native_failure kind with details', async () => { const registry = createRegistry(); const out = await runQueryDispatch({