diff --git a/src/agents/auth-profiles/state-observation.test.ts b/src/agents/auth-profiles/state-observation.test.ts index 05f2abfff19..1fbc6abb5ab 100644 --- a/src/agents/auth-profiles/state-observation.test.ts +++ b/src/agents/auth-profiles/state-observation.test.ts @@ -5,11 +5,14 @@ import { logAuthProfileFailureStateChange } from "./state-observation.js"; afterEach(() => { setLoggerOverride(null); resetLogger(); + vi.unstubAllEnvs(); }); describe("logAuthProfileFailureStateChange", () => { it("sanitizes consoleMessage fields before logging", () => { const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {}); + vi.stubEnv("FORCE_COLOR", "0"); + vi.stubEnv("NO_COLOR", "1"); setLoggerOverride({ level: "silent", consoleLevel: "warn" }); logAuthProfileFailureStateChange({ diff --git a/src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts b/src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts index 2520c2ffe8a..e92ee49fb11 100644 --- a/src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts +++ b/src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts @@ -12,6 +12,7 @@ import { loadOpenClawPlugins } from "../plugins/loader.js"; import { guardSessionManager } from "./session-tool-result-guard-wrapper.js"; const EMPTY_PLUGIN_SCHEMA = { type: "object", additionalProperties: false, properties: {} }; +const originalBundledPluginsDir = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; function writeTempPlugin(params: { dir: string; id: string; body: string }): string { const pluginDir = path.join(params.dir, params.id); @@ -60,6 +61,11 @@ function getPersistedToolResult(sm: ReturnType) afterEach(() => { resetGlobalHookRunner(); + if (originalBundledPluginsDir === undefined) { + delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; + } else { + process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = originalBundledPluginsDir; + } }); describe("tool_result_persist hook", () => { diff --git a/src/commands/models/auth.test.ts b/src/commands/models/auth.test.ts index dc9f407a684..3768b51f1ea 100644 --- a/src/commands/models/auth.test.ts +++ b/src/commands/models/auth.test.ts @@ -20,6 +20,7 @@ const mocks = vi.hoisted(() => ({ updateConfig: vi.fn(), logConfigUpdated: vi.fn(), openUrl: vi.fn(), + isRemoteEnvironment: vi.fn(() => false), loadAuthProfileStoreForRuntime: vi.fn(), listProfilesForProvider: vi.fn(), clearAuthProfileCooldown: vi.fn(), @@ -75,6 +76,10 @@ vi.mock("../onboard-helpers.js", () => ({ openUrl: mocks.openUrl, })); +vi.mock("../oauth-env.js", () => ({ + isRemoteEnvironment: mocks.isRemoteEnvironment, +})); + const { modelsAuthLoginCommand, modelsAuthPasteTokenCommand, modelsAuthSetupTokenCommand } = await import("./auth.js"); @@ -147,6 +152,7 @@ describe("modelsAuthLoginCommand", () => { mocks.resolveAgentDir.mockReturnValue("/tmp/openclaw/agents/main"); mocks.resolveAgentWorkspaceDir.mockReturnValue("/tmp/openclaw/workspace"); mocks.resolveDefaultAgentWorkspaceDir.mockReturnValue("/tmp/openclaw/workspace"); + mocks.isRemoteEnvironment.mockReturnValue(false); mocks.loadValidConfigOrThrow.mockImplementation(async () => currentConfig); mocks.updateConfig.mockImplementation( async (mutator: (cfg: OpenClawConfig) => OpenClawConfig) => { diff --git a/vitest.unit-fast-paths.mjs b/vitest.unit-fast-paths.mjs index d2bac881c9a..88a2d8691b5 100644 --- a/vitest.unit-fast-paths.mjs +++ b/vitest.unit-fast-paths.mjs @@ -72,6 +72,10 @@ const disqualifyingPatterns = [ code: "module-mocking", pattern: /\bvi\.(?:mock|doMock|unmock|doUnmock|importActual|resetModules)\s*\(/u, }, + { + code: "module-mocking-helper", + pattern: /runtime-module-mocks/u, + }, { code: "vitest-mock-api", pattern: /\bvi\b/u,