From 7a27e2648a75a66b6580a11f704b86668b521cb4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:03:29 +0000 Subject: [PATCH] refactor(test): dedupe plugin env overrides via env helpers --- src/plugins/discovery.test.ts | 27 +++++++++------------------ src/plugins/loader.test.ts | 13 +++---------- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/src/plugins/discovery.test.ts b/src/plugins/discovery.test.ts index 06cd7f36d0e..47dd479166e 100644 --- a/src/plugins/discovery.test.ts +++ b/src/plugins/discovery.test.ts @@ -3,6 +3,7 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterEach, describe, expect, it } from "vitest"; +import { withEnvAsync } from "../test-utils/env.js"; import { discoverOpenClawPlugins } from "./discovery.js"; const tempDirs: string[] = []; @@ -15,24 +16,14 @@ function makeTempDir() { } async function withStateDir(stateDir: string, fn: () => Promise) { - const prev = process.env.OPENCLAW_STATE_DIR; - const prevBundled = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; - process.env.OPENCLAW_STATE_DIR = stateDir; - process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; - try { - return await fn(); - } finally { - if (prev === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = prev; - } - if (prevBundled === undefined) { - delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; - } else { - process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = prevBundled; - } - } + return await withEnvAsync( + { + OPENCLAW_STATE_DIR: stateDir, + CLAWDBOT_STATE_DIR: undefined, + OPENCLAW_BUNDLED_PLUGINS_DIR: "/nonexistent/bundled/plugins", + }, + fn, + ); } afterEach(() => { diff --git a/src/plugins/loader.test.ts b/src/plugins/loader.test.ts index 0d2567a93a3..65cab1c0e06 100644 --- a/src/plugins/loader.test.ts +++ b/src/plugins/loader.test.ts @@ -3,6 +3,7 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, describe, expect, it } from "vitest"; +import { withEnv } from "../test-utils/env.js"; import { loadOpenClawPlugins } from "./loader.js"; type TempPlugin = { dir: string; file: string; id: string }; @@ -516,10 +517,8 @@ describe("loadOpenClawPlugins", () => { it("warns when loaded non-bundled plugin has no install/load-path provenance", () => { process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; - const prevStateDir = process.env.OPENCLAW_STATE_DIR; const stateDir = makeTempDir(); - process.env.OPENCLAW_STATE_DIR = stateDir; - try { + withEnv({ OPENCLAW_STATE_DIR: stateDir, CLAWDBOT_STATE_DIR: undefined }, () => { const globalDir = path.join(stateDir, "extensions", "rogue"); fs.mkdirSync(globalDir, { recursive: true }); writePlugin({ @@ -552,13 +551,7 @@ describe("loadOpenClawPlugins", () => { msg.includes("rogue") && msg.includes("loaded without install/load-path provenance"), ), ).toBe(true); - } finally { - if (prevStateDir === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = prevStateDir; - } - } + }); }); it("rejects plugin entry files that escape plugin root via symlink", () => {