From f7d2b396d64da8eaa1f649f2081a990e6ea638a1 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 27 Apr 2026 20:36:32 +0100 Subject: [PATCH] fix(test): restore gateway fixture startup config --- .../server-methods/nodes.invoke-wake.test.ts | 2 +- .../server.auth.default-token.suite.ts | 3 ++- src/gateway/test-helpers.config-runtime.ts | 22 ++++++++++++++++++- src/gateway/test-helpers.mocks.ts | 2 ++ src/gateway/test-helpers.server.ts | 4 ++++ test/vitest/vitest.unit-fast-paths.mjs | 5 +++++ 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/gateway/server-methods/nodes.invoke-wake.test.ts b/src/gateway/server-methods/nodes.invoke-wake.test.ts index d14c2a7f506..e98b3b0f3b4 100644 --- a/src/gateway/server-methods/nodes.invoke-wake.test.ts +++ b/src/gateway/server-methods/nodes.invoke-wake.test.ts @@ -32,7 +32,7 @@ const mocks = vi.hoisted(() => ({ shouldClearStoredApnsRegistration: vi.fn(() => false), })); -vi.mock("../../config/config.js", () => ({ +vi.mock("../../config/io.js", () => ({ getRuntimeConfig: mocks.getRuntimeConfig, })); diff --git a/src/gateway/server.auth.default-token.suite.ts b/src/gateway/server.auth.default-token.suite.ts index c68a90a4b5b..94bfa15eac3 100644 --- a/src/gateway/server.auth.default-token.suite.ts +++ b/src/gateway/server.auth.default-token.suite.ts @@ -121,7 +121,8 @@ export function registerDefaultAuthTokenSuite(): void { }); test("connect (req) handshake returns hello-ok payload", async () => { - const { STATE_DIR, createConfigIO } = await import("../config/config.js"); + const { createConfigIO } = await import("../config/config.js"); + const { STATE_DIR } = await import("../config/paths.js"); const ws = await openWs(port); const res = await connectReq(ws); diff --git a/src/gateway/test-helpers.config-runtime.ts b/src/gateway/test-helpers.config-runtime.ts index 36ffa5c94a4..c9fc14ea725 100644 --- a/src/gateway/test-helpers.config-runtime.ts +++ b/src/gateway/test-helpers.config-runtime.ts @@ -3,7 +3,10 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { vi } from "vitest"; -import type { ReadConfigFileSnapshotForWriteResult } from "../config/io.js"; +import type { + ReadConfigFileSnapshotForWriteResult, + ReadConfigFileSnapshotWithPluginMetadataResult, +} from "../config/io.js"; import { applyPluginAutoEnable } from "../config/plugin-auto-enable.js"; import type { AgentBinding } from "../config/types.agents.js"; import type { ConfigFileSnapshot, OpenClawConfig } from "../config/types.js"; @@ -222,6 +225,22 @@ export function createGatewayConfigModuleMock(actual: GatewayConfigModule): Gate expectedConfigPath: resolveConfigPath(), }, }); + const readConfigFileSnapshotWithPluginMetadata = + async (): Promise => { + const snapshot = await readConfigFileSnapshot(); + const validation = actual.validateConfigObjectWithPlugins(snapshot.config, { + env: process.env, + pluginValidation: "skip", + }); + return { + snapshot: { + ...snapshot, + valid: validation.ok, + issues: validation.ok ? [] : validation.issues, + warnings: validation.warnings, + }, + }; + }; const loadTestConfig = () => { const configPath = resolveConfigPath(); @@ -277,6 +296,7 @@ export function createGatewayConfigModuleMock(actual: GatewayConfigModule): Gate issues: [], }), readConfigFileSnapshot, + readConfigFileSnapshotWithPluginMetadata, readConfigFileSnapshotForWrite, writeConfigFile, }; diff --git a/src/gateway/test-helpers.mocks.ts b/src/gateway/test-helpers.mocks.ts index b8638123149..f2668c328d6 100644 --- a/src/gateway/test-helpers.mocks.ts +++ b/src/gateway/test-helpers.mocks.ts @@ -213,6 +213,7 @@ vi.mock("../config/io.js", async () => { ...actual.createConfigIO(), getRuntimeConfig: configMock.getRuntimeConfig, readConfigFileSnapshot: configMock.readConfigFileSnapshot, + readConfigFileSnapshotWithPluginMetadata: configMock.readConfigFileSnapshotWithPluginMetadata, readConfigFileSnapshotForWrite: configMock.readConfigFileSnapshotForWrite, writeConfigFile: configMock.writeConfigFile, })); @@ -221,6 +222,7 @@ vi.mock("../config/io.js", async () => { createConfigIO, getRuntimeConfig: configMock.getRuntimeConfig, readConfigFileSnapshot: configMock.readConfigFileSnapshot, + readConfigFileSnapshotWithPluginMetadata: configMock.readConfigFileSnapshotWithPluginMetadata, readConfigFileSnapshotForWrite: configMock.readConfigFileSnapshotForWrite, writeConfigFile: configMock.writeConfigFile, }; diff --git a/src/gateway/test-helpers.server.ts b/src/gateway/test-helpers.server.ts index cdc42e6570b..8a89ed594ce 100644 --- a/src/gateway/test-helpers.server.ts +++ b/src/gateway/test-helpers.server.ts @@ -576,6 +576,10 @@ export function onceMessage( } export async function startGatewayServer(port: number, opts?: GatewayServerOptions) { + // Tests mutate testState-backed config before server startup; discard earlier + // helper reads so startup observes the current fixture state. + resetConfigRuntimeState(); + clearSessionStoreCacheForTest(); const mod = await getServerModule(); const resolvedOpts = opts?.controlUiEnabled === undefined ? { ...opts, controlUiEnabled: false } : opts; diff --git a/test/vitest/vitest.unit-fast-paths.mjs b/test/vitest/vitest.unit-fast-paths.mjs index 6a62ceee824..771fedd42f2 100644 --- a/test/vitest/vitest.unit-fast-paths.mjs +++ b/test/vitest/vitest.unit-fast-paths.mjs @@ -62,6 +62,7 @@ export const forcedUnitFastTestFiles = [ "packages/memory-host-sdk/src/host/session-files.test.ts", "src/acp/client.test.ts", "src/acp/control-plane/manager.test.ts", + "src/acp/translator.prompt-prefix.test.ts", "src/acp/translator.cancel-scoping.test.ts", "src/acp/translator.stop-reason.test.ts", "src/acp/persistent-bindings.test.ts", @@ -94,6 +95,7 @@ export const forcedUnitFastTestFiles = [ "src/node-host/invoke-system-run.test.ts", "src/pairing/allow-from-store-read.test.ts", "src/pairing/pairing-store.test.ts", + "src/pairing/setup-code.test.ts", "src/plugin-sdk/memory-host-events.test.ts", "src/proxy-capture/store.sqlite.test.ts", "src/security/audit-exec-surface.test.ts", @@ -107,12 +109,15 @@ export const forcedUnitFastTestFiles = [ "src/realtime-transcription/websocket-session.test.ts", "src/routing/resolve-route.test.ts", "src/trajectory/export.test.ts", + "src/trajectory/metadata.test.ts", "src/trajectory/runtime.test.ts", "src/tts/provider-registry.test.ts", "src/tts/status-config.test.ts", "src/tts/tts-config.test.ts", "src/terminal/table.test.ts", "src/test-helpers/state-dir-env.test.ts", + "src/test-utils/env.test.ts", + "src/test-utils/temp-home.test.ts", "src/utils.test.ts", "src/version.test.ts", ];