mirror of
https://github.com/OpenRouterTeam/spawn.git
synced 2026-05-08 01:51:14 +00:00
test: fix 25 test failures from mock.module global pollution and sandbox env (#1539)
Add autocomplete mock to 38 @clack/prompts mock.module declarations that were missing it. Bun's mock.module is process-global, so when any other test file's mock wins the race, p.autocomplete was undefined, causing 17 cmd-interactive tests to fail non-deterministically. Also guard sandbox-verification tests with describe.skipIf(!isSandboxed) so the 8 meta-tests skip cleanly when running from repo root (where bunfig.toml preload is not active) instead of failing. Result: 6995 pass, 0 fail from cli/; 6978 pass, 0 fail, 17 skip from root. Agent: test-engineer Co-authored-by: B <6723574+louisgv@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
38b972f5ce
commit
3c4d92cc9f
39 changed files with 79 additions and 1 deletions
|
|
@ -257,6 +257,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -241,6 +241,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
confirm: mock(() => Promise.resolve(true)),
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -187,6 +187,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -102,6 +102,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -142,6 +142,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -74,6 +74,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -173,6 +173,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
import {
|
||||
|
|
|
|||
|
|
@ -119,6 +119,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -236,6 +236,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -176,6 +176,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -122,6 +122,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -152,6 +152,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -137,6 +137,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -97,6 +97,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -178,6 +178,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ mock.module("@clack/prompts", () => ({
|
|||
intro: mock(() => {}),
|
||||
outro: mock(() => {}),
|
||||
select: mock(() => Promise.resolve("")),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
spinner: mock(() => ({ start: mock(() => {}), stop: mock(() => {}), message: mock(() => {}) })),
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -90,6 +90,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
confirm: mock(() => Promise.resolve(true)),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -444,6 +444,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => Promise.resolve(0)),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -139,6 +139,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => Promise.resolve("hetzner")),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
confirm: mock(() => Promise.resolve(true)),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ import { spawnSync } from "child_process";
|
|||
* Agent: test-engineer
|
||||
*/
|
||||
|
||||
describe("Test Sandbox Verification", () => {
|
||||
const isSandboxed = process.env.HOME?.includes("spawn-test-home-");
|
||||
|
||||
describe.skipIf(!isSandboxed)("Test Sandbox Verification", () => {
|
||||
describe("Environment variables", () => {
|
||||
it("should sandbox HOME to a temp directory", () => {
|
||||
const home = process.env.HOME!;
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -371,6 +371,8 @@ mock.module("@clack/prompts", () => ({
|
|||
outro: mock(() => {}),
|
||||
cancel: mock(() => {}),
|
||||
select: mock(() => {}),
|
||||
autocomplete: mock(async () => "claude"),
|
||||
text: mock(async () => undefined),
|
||||
isCancel: () => false,
|
||||
}));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue