refactor(test): dedupe plugin env overrides via env helpers

This commit is contained in:
Peter Steinberger 2026-02-21 13:03:29 +00:00
parent f48698a50b
commit 7a27e2648a
2 changed files with 12 additions and 28 deletions

View File

@ -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<T>(stateDir: string, fn: () => Promise<T>) {
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(() => {

View File

@ -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", () => {