diff --git a/src/gateway/http-utils.authorize-request.test.ts b/src/gateway/http-utils.authorize-request.test.ts index 06a08b70fdb..0c78645a041 100644 --- a/src/gateway/http-utils.authorize-request.test.ts +++ b/src/gateway/http-utils.authorize-request.test.ts @@ -15,6 +15,16 @@ vi.mock("../config/config.js", () => ({ })), })); +vi.mock("../config/io.js", () => ({ + getRuntimeConfig: vi.fn(() => ({ + gateway: { + controlUi: { + allowedOrigins: ["https://control.example.com"], + }, + }, + })), +})); + vi.mock("./http-common.js", () => ({ sendGatewayAuthFailure: vi.fn(), sendJson: vi.fn(), diff --git a/src/gateway/http-utils.model-override.test.ts b/src/gateway/http-utils.model-override.test.ts index 1e29ffc2595..3d67a9bc584 100644 --- a/src/gateway/http-utils.model-override.test.ts +++ b/src/gateway/http-utils.model-override.test.ts @@ -9,6 +9,10 @@ vi.mock("../config/config.js", () => ({ getRuntimeConfig: () => loadConfigMock(), })); +vi.mock("../config/io.js", () => ({ + getRuntimeConfig: () => loadConfigMock(), +})); + vi.mock("./server-model-catalog.js", () => ({ loadGatewayModelCatalog: () => loadGatewayModelCatalogMock(), })); diff --git a/src/gateway/server-chat.agent-events.test.ts b/src/gateway/server-chat.agent-events.test.ts index 1eeb74ece64..8828a2246ab 100644 --- a/src/gateway/server-chat.agent-events.test.ts +++ b/src/gateway/server-chat.agent-events.test.ts @@ -12,6 +12,10 @@ vi.mock("../config/io.js", () => ({ getRuntimeConfig: vi.fn(() => ({})), })); +vi.mock("../config/io.js", () => ({ + getRuntimeConfig: vi.fn(() => ({})), +})); + vi.mock("../infra/heartbeat-visibility.js", () => ({ resolveHeartbeatVisibility: vi.fn(() => ({ showOk: false, diff --git a/src/gateway/server-session-key.test.ts b/src/gateway/server-session-key.test.ts index be39eb318b0..84b3dfc3527 100644 --- a/src/gateway/server-session-key.test.ts +++ b/src/gateway/server-session-key.test.ts @@ -11,6 +11,10 @@ vi.mock("../config/io.js", () => ({ getRuntimeConfig: () => hoisted.loadConfigMock(), })); +vi.mock("../config/io.js", () => ({ + getRuntimeConfig: () => hoisted.loadConfigMock(), +})); + vi.mock("./session-utils.js", async () => { const actual = await vi.importActual("./session-utils.js"); return { diff --git a/src/gateway/server-startup-config.recovery.test.ts b/src/gateway/server-startup-config.recovery.test.ts index d7b7263afd2..62164a1f08b 100644 --- a/src/gateway/server-startup-config.recovery.test.ts +++ b/src/gateway/server-startup-config.recovery.test.ts @@ -54,12 +54,12 @@ const pluginMetadataSnapshot = vi.hoisted( }, }), ); - vi.mock("../config/io.js", () => ({ readConfigFileSnapshot: vi.fn(), readConfigFileSnapshotWithPluginMetadata: vi.fn(), recoverConfigFromLastKnownGood: vi.fn(), recoverConfigFromJsonRootSuffix: vi.fn(), + writeConfigFile: vi.fn(), })); vi.mock("../config/paths.js", () => ({ diff --git a/src/gateway/server/ws-connection/message-handler.post-connect-health.test.ts b/src/gateway/server/ws-connection/message-handler.post-connect-health.test.ts index 25735fc61a7..7f153467675 100644 --- a/src/gateway/server/ws-connection/message-handler.post-connect-health.test.ts +++ b/src/gateway/server/ws-connection/message-handler.post-connect-health.test.ts @@ -45,6 +45,10 @@ vi.mock("../../../config/config.js", () => ({ loadConfig: loadConfigMock, })); +vi.mock("../../../config/io.js", () => ({ + getRuntimeConfig: loadConfigMock, +})); + vi.mock("../../../infra/system-presence.js", () => ({ upsertPresence: upsertPresenceMock, })); diff --git a/src/gateway/session-kill-http.test.ts b/src/gateway/session-kill-http.test.ts index 18f7236d521..3eb6a8d66d9 100644 --- a/src/gateway/session-kill-http.test.ts +++ b/src/gateway/session-kill-http.test.ts @@ -18,6 +18,10 @@ vi.mock("../config/config.js", () => ({ getRuntimeConfig: () => cfg, })); +vi.mock("../config/io.js", () => ({ + getRuntimeConfig: () => cfg, +})); + vi.mock("./auth.js", () => ({ authorizeHttpGatewayConnect: authMock, isLocalDirectRequest: isLocalDirectRequestMock, diff --git a/src/gateway/startup-auth.test.ts b/src/gateway/startup-auth.test.ts index 1d39d7aea12..f5dd6cdb039 100644 --- a/src/gateway/startup-auth.test.ts +++ b/src/gateway/startup-auth.test.ts @@ -20,6 +20,14 @@ vi.mock("../config/config.js", async () => { }; }); +vi.mock("../config/mutate.js", async () => { + const actual = await vi.importActual("../config/mutate.js"); + return { + ...actual, + replaceConfigFile: mocks.replaceConfigFile, + }; +}); + describe("ensureGatewayStartupAuth", () => { async function expectEphemeralGeneratedTokenWhenOverridden(cfg: OpenClawConfig) { const result = await ensureGatewayStartupAuth({ diff --git a/src/gateway/tools-invoke-http.cron-regression.test.ts b/src/gateway/tools-invoke-http.cron-regression.test.ts index c2e490b35c6..9c7ceb15b6e 100644 --- a/src/gateway/tools-invoke-http.cron-regression.test.ts +++ b/src/gateway/tools-invoke-http.cron-regression.test.ts @@ -19,6 +19,10 @@ vi.mock("../config/config.js", () => ({ getRuntimeConfig: () => cfg, })); +vi.mock("../config/io.js", () => ({ + getRuntimeConfig: () => cfg, +})); + vi.mock("../config/sessions.js", () => ({ resolveMainSessionKey: () => "agent:main:main", })); diff --git a/src/gateway/tools-invoke-http.test.ts b/src/gateway/tools-invoke-http.test.ts index 21cfe141a05..edac17f0c83 100644 --- a/src/gateway/tools-invoke-http.test.ts +++ b/src/gateway/tools-invoke-http.test.ts @@ -25,6 +25,10 @@ vi.mock("../config/config.js", () => ({ getRuntimeConfig: () => cfg, })); +vi.mock("../config/io.js", () => ({ + getRuntimeConfig: () => cfg, +})); + vi.mock("../config/sessions.js", () => ({ resolveMainSessionKey: (params?: { session?: { scope?: string; mainKey?: string };