From 2844ec2bb09dd864f2d46df228b39bafe148536c Mon Sep 17 00:00:00 2001 From: Shakker Date: Sat, 20 Jun 2026 02:57:09 +0100 Subject: [PATCH] test: isolate exec approval env --- src/infra/exec-approvals-store.test.ts | 27 +++++++++----------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/infra/exec-approvals-store.test.ts b/src/infra/exec-approvals-store.test.ts index b57ee1e0ba7c..24c02719b95d 100644 --- a/src/infra/exec-approvals-store.test.ts +++ b/src/infra/exec-approvals-store.test.ts @@ -2,6 +2,7 @@ import fs from "node:fs"; import path from "node:path"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { captureEnv, deleteTestEnvValue, setTestEnvValue } from "../test-utils/env.js"; import { makeTempDir } from "./exec-approvals-test-helpers.js"; const requestJsonlSocketMock = vi.hoisted(() => vi.fn()); @@ -33,8 +34,7 @@ let resolveExecApprovalsTranscriptPath: ExecApprovalsModule["resolveExecApproval let saveExecApprovals: ExecApprovalsModule["saveExecApprovals"]; const tempDirs: string[] = []; -const originalOpenClawHome = process.env.OPENCLAW_HOME; -const originalOpenClawStateDir = process.env.OPENCLAW_STATE_DIR; +const testEnvSnapshot = captureEnv(["OPENCLAW_HOME", "OPENCLAW_STATE_DIR"]); beforeAll(async () => { ({ @@ -64,16 +64,7 @@ beforeEach(() => { afterEach(() => { vi.restoreAllMocks(); - if (originalOpenClawHome === undefined) { - delete process.env.OPENCLAW_HOME; - } else { - process.env.OPENCLAW_HOME = originalOpenClawHome; - } - if (originalOpenClawStateDir === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = originalOpenClawStateDir; - } + testEnvSnapshot.restore(); for (const dir of tempDirs.splice(0)) { fs.rmSync(dir, { recursive: true, force: true }); } @@ -82,8 +73,8 @@ afterEach(() => { function createHomeDir(): string { const dir = makeTempDir(); tempDirs.push(dir); - process.env.OPENCLAW_HOME = dir; - delete process.env.OPENCLAW_STATE_DIR; + setTestEnvValue("OPENCLAW_HOME", dir); + deleteTestEnvValue("OPENCLAW_STATE_DIR"); return dir; } @@ -144,7 +135,7 @@ describe("exec approvals store helpers", () => { it("uses OPENCLAW_STATE_DIR for default file and socket paths", () => { const dir = createHomeDir(); const stateDir = path.join(dir, "custom-state"); - process.env.OPENCLAW_STATE_DIR = stateDir; + setTestEnvValue("OPENCLAW_STATE_DIR", stateDir); expect(path.normalize(resolveExecApprovalsPath())).toBe( path.normalize(stateApprovalsFilePath(stateDir)), @@ -182,7 +173,7 @@ describe("exec approvals store helpers", () => { })}\n`, "utf8", ); - process.env.OPENCLAW_STATE_DIR = stateDir; + setTestEnvValue("OPENCLAW_STATE_DIR", stateDir); const resolved = resolveExecApprovals("main", { security: "full", @@ -657,7 +648,7 @@ describe("exec approvals store helpers", () => { const linkedHome = `${realHome}-link`; tempDirs.push(realHome, linkedHome); fs.symlinkSync(realHome, linkedHome, "dir"); - process.env.OPENCLAW_HOME = linkedHome; + setTestEnvValue("OPENCLAW_HOME", linkedHome); saveExecApprovals({ version: 1, defaults: { security: "full" }, agents: {} }); @@ -674,7 +665,7 @@ describe("exec approvals store helpers", () => { fs.mkdirSync(linkedStateTarget, { recursive: true }); fs.symlinkSync(realHome, linkedHome, "dir"); fs.symlinkSync(linkedStateTarget, path.join(realHome, ".openclaw"), "dir"); - process.env.OPENCLAW_HOME = linkedHome; + setTestEnvValue("OPENCLAW_HOME", linkedHome); expect(() => saveExecApprovals({ version: 1, defaults: { security: "full" }, agents: {} }),