From 47563305a2158e01f38376f48322157122f8f2ff Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 7 Apr 2026 14:14:43 +0100 Subject: [PATCH] Tests: isolate full-suite state leaks --- .../browser/src/browser/cdp-proxy-bypass.test.ts | 6 +++++- src/auto-reply/reply/model-selection.test.ts | 10 ++++------ src/gateway/client.test.ts | 1 + 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/extensions/browser/src/browser/cdp-proxy-bypass.test.ts b/extensions/browser/src/browser/cdp-proxy-bypass.test.ts index 138853eb0d5..101ba83046d 100644 --- a/extensions/browser/src/browser/cdp-proxy-bypass.test.ts +++ b/extensions/browser/src/browser/cdp-proxy-bypass.test.ts @@ -1,6 +1,6 @@ import http from "node:http"; import https from "node:https"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { getDirectAgentForCdp, hasProxyEnv, @@ -10,6 +10,10 @@ import { const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); +beforeEach(() => { + vi.useRealTimers(); +}); + async function withIsolatedNoProxyEnv(fn: () => Promise) { const origNoProxy = process.env.NO_PROXY; const origNoProxyLower = process.env.no_proxy; diff --git a/src/auto-reply/reply/model-selection.test.ts b/src/auto-reply/reply/model-selection.test.ts index f5684b82305..694fd3a7a71 100644 --- a/src/auto-reply/reply/model-selection.test.ts +++ b/src/auto-reply/reply/model-selection.test.ts @@ -1,11 +1,11 @@ import { afterEach, describe, expect, it, vi } from "vitest"; import { MODEL_CONTEXT_TOKEN_CACHE } from "../../agents/context-cache.js"; -import { loadModelCatalog } from "../../agents/model-catalog.js"; +import { loadModelCatalog } from "../../agents/model-catalog.runtime.js"; import type { OpenClawConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; import { createModelSelectionState, resolveContextTokens } from "./model-selection.js"; -vi.mock("../../agents/model-catalog.js", () => ({ +vi.mock("../../agents/model-catalog.runtime.js", () => ({ loadModelCatalog: vi.fn(async () => [ { provider: "anthropic", id: "claude-opus-4-6", name: "Claude Opus 4.5" }, { provider: "inferencer", id: "deepseek-v3-4bit-mlx", name: "DeepSeek V3" }, @@ -19,9 +19,7 @@ vi.mock("../../agents/model-catalog.js", () => ({ vi.mock("../../channels/plugins/session-conversation.js", () => ({ resolveSessionParentSessionKey: (sessionKey?: string) => - sessionKey - ?.replace(/:thread:[^:]+$/, "") - .replace(/:topic:[^:]+$/, "") ?? null, + sessionKey?.replace(/:thread:[^:]+$/, "").replace(/:topic:[^:]+$/, "") ?? null, })); afterEach(() => { @@ -533,7 +531,7 @@ describe("createModelSelectionState respects session model override", () => { describe("createModelSelectionState resolveDefaultReasoningLevel", () => { it("returns on when catalog model has reasoning true", async () => { - const { loadModelCatalog } = await import("../../agents/model-catalog.js"); + const { loadModelCatalog } = await import("../../agents/model-catalog.runtime.js"); vi.mocked(loadModelCatalog).mockResolvedValueOnce([ { provider: "openrouter", id: "x-ai/grok-4.1-fast", name: "Grok", reasoning: true }, ]); diff --git a/src/gateway/client.test.ts b/src/gateway/client.test.ts index 5747df14f0c..e1042162168 100644 --- a/src/gateway/client.test.ts +++ b/src/gateway/client.test.ts @@ -415,6 +415,7 @@ describe("GatewayClient close handling", () => { describe("GatewayClient connect auth payload", () => { beforeEach(() => { + vi.useRealTimers(); wsInstances.length = 0; loadDeviceAuthTokenMock.mockReset(); storeDeviceAuthTokenMock.mockReset();