feat(S-102): Test-drive and implement --timeout flag, config layering, and default in
This commit is contained in:
@@ -203,4 +203,58 @@ describe("executePrompt", () => {
|
||||
err instanceof ExecError && err.message.includes("Unknown client")
|
||||
);
|
||||
});
|
||||
|
||||
it("includes client and durationMs in result", async () => {
|
||||
const scenarios = new Map<string, MockScenario>([
|
||||
["codex exec --yolo hello", { stdout: "ok", exitCode: 0 }],
|
||||
]);
|
||||
const result = await executePrompt("codex", "hello", {
|
||||
spawn: mockSpawn(scenarios),
|
||||
existsSync: () => true,
|
||||
});
|
||||
assert.strictEqual(result.client, "codex");
|
||||
assert.strictEqual(typeof result.durationMs, "number");
|
||||
assert.ok(result.durationMs >= 0);
|
||||
});
|
||||
|
||||
it("rejects with ExecError containing custom timeout value", async () => {
|
||||
const scenarios = new Map<string, MockScenario>([
|
||||
["codex exec --yolo slow", { hang: true }],
|
||||
]);
|
||||
await assert.rejects(
|
||||
executePrompt("codex", "slow", {
|
||||
spawn: mockSpawn(scenarios),
|
||||
existsSync: () => true,
|
||||
timeoutMs: 50,
|
||||
}),
|
||||
(err: unknown) =>
|
||||
err instanceof ExecError &&
|
||||
err.message === "Execution timed out after 50ms" &&
|
||||
err.result.exitCode === -1 &&
|
||||
err.result.client === "codex" &&
|
||||
typeof err.result.durationMs === "number"
|
||||
);
|
||||
});
|
||||
|
||||
it("uses default timeout of 600000 when timeoutMs is not provided", async () => {
|
||||
const delays: number[] = [];
|
||||
const origSetTimeout = global.setTimeout;
|
||||
(global as any).setTimeout = function(callback: any, delay: number) {
|
||||
delays.push(delay);
|
||||
return origSetTimeout(callback, delay);
|
||||
};
|
||||
|
||||
const scenarios = new Map<string, MockScenario>([
|
||||
["codex exec --yolo hello", { stdout: "ok", exitCode: 0 }],
|
||||
]);
|
||||
try {
|
||||
await executePrompt("codex", "hello", {
|
||||
spawn: mockSpawn(scenarios),
|
||||
existsSync: () => true,
|
||||
});
|
||||
assert.strictEqual(delays[0], 600_000);
|
||||
} finally {
|
||||
global.setTimeout = origSetTimeout;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user