diff --git a/src/agents/skills.buildworkspaceskillsnapshot.test.ts b/src/agents/skills.buildworkspaceskillsnapshot.test.ts index 91d8af27272..76b163836fd 100644 --- a/src/agents/skills.buildworkspaceskillsnapshot.test.ts +++ b/src/agents/skills.buildworkspaceskillsnapshot.test.ts @@ -3,15 +3,25 @@ import path from "node:path"; import { afterAll, beforeAll, describe, expect, it } from "vitest"; import { withPathResolutionEnv } from "../test-utils/env.js"; import { createFixtureSuite } from "../test-utils/fixture-suite.js"; +import { createTempHomeEnv, type TempHomeEnv } from "../test-utils/temp-home.js"; import { writeSkill } from "./skills.e2e-test-helpers.js"; import { buildWorkspaceSkillSnapshot, buildWorkspaceSkillsPrompt } from "./skills.js"; +import { + restoreMockSkillsHomeEnv, + setMockSkillsHomeEnv, + type SkillsHomeEnvSnapshot, +} from "./skills/home-env.test-support.js"; const fixtureSuite = createFixtureSuite("openclaw-skills-snapshot-suite-"); let truncationWorkspaceTemplateDir = ""; let nestedRepoTemplateDir = ""; +let tempHome: TempHomeEnv | null = null; +let skillsHomeEnv: SkillsHomeEnvSnapshot | null = null; beforeAll(async () => { await fixtureSuite.setup(); + tempHome = await createTempHomeEnv("openclaw-skills-snapshot-home-"); + skillsHomeEnv = setMockSkillsHomeEnv(tempHome.home); truncationWorkspaceTemplateDir = await fixtureSuite.createCaseDir( "template-truncation-workspace", ); @@ -36,6 +46,14 @@ beforeAll(async () => { }); afterAll(async () => { + if (skillsHomeEnv) { + await restoreMockSkillsHomeEnv(skillsHomeEnv); + skillsHomeEnv = null; + } + if (tempHome) { + await tempHome.restore(); + tempHome = null; + } await fixtureSuite.cleanup(); }); diff --git a/src/agents/skills.loadworkspaceskillentries.test.ts b/src/agents/skills.loadworkspaceskillentries.test.ts index ed4d37aa5a6..e3452fb46c2 100644 --- a/src/agents/skills.loadworkspaceskillentries.test.ts +++ b/src/agents/skills.loadworkspaceskillentries.test.ts @@ -1,16 +1,23 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import { afterEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { resetLogger, setLoggerOverride } from "../logging/logger.js"; import { loggingState } from "../logging/state.js"; import { withPathResolutionEnv } from "../test-utils/env.js"; import { writeSkill } from "./skills.e2e-test-helpers.js"; import { loadWorkspaceSkillEntries } from "./skills.js"; +import { + restoreMockSkillsHomeEnv, + setMockSkillsHomeEnv, + type SkillsHomeEnvSnapshot, +} from "./skills/home-env.test-support.js"; import { readSkillFrontmatterSafe } from "./skills/local-loader.js"; import { writePluginWithSkill } from "./test-helpers/skill-plugin-fixtures.js"; const tempDirs: string[] = []; +let fakeHome = ""; +let envSnapshot: SkillsHomeEnvSnapshot; async function createTempWorkspaceDir() { const workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-")); @@ -22,13 +29,23 @@ function withWorkspaceHome(workspaceDir: string, cb: () => T): T { return withPathResolutionEnv(workspaceDir, { PATH: "" }, () => cb()); } +beforeEach(async () => { + fakeHome = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-home-")); + tempDirs.push(fakeHome); + envSnapshot = setMockSkillsHomeEnv(fakeHome); +}); + afterEach(async () => { setLoggerOverride(null); loggingState.rawConsole = null; resetLogger(); - await Promise.all( - tempDirs.splice(0, tempDirs.length).map((dir) => fs.rm(dir, { recursive: true, force: true })), - ); + await restoreMockSkillsHomeEnv(envSnapshot, async () => { + await Promise.all( + tempDirs + .splice(0, tempDirs.length) + .map((dir) => fs.rm(dir, { recursive: true, force: true })), + ); + }); }); async function setupWorkspaceWithProsePlugin() { diff --git a/src/agents/skills.test.ts b/src/agents/skills.test.ts index d18e185bbed..cb40afb59c4 100644 --- a/src/agents/skills.test.ts +++ b/src/agents/skills.test.ts @@ -19,9 +19,15 @@ import { loadWorkspaceSkillEntries, } from "./skills.js"; import { getActiveSkillEnvKeys } from "./skills/env-overrides.js"; +import { + restoreMockSkillsHomeEnv, + setMockSkillsHomeEnv, + type SkillsHomeEnvSnapshot, +} from "./skills/home-env.test-support.js"; const fixtureSuite = createFixtureSuite("openclaw-skills-suite-"); let tempHome: TempHomeEnv | null = null; +let skillsHomeEnv: SkillsHomeEnvSnapshot | null = null; const resolveTestSkillDirs = (workspaceDir: string) => ({ managedSkillsDir: path.join(workspaceDir, ".managed"), @@ -72,12 +78,17 @@ async function writeEnvSkill(workspaceDir: string) { beforeAll(async () => { await fixtureSuite.setup(); tempHome = await createTempHomeEnv("openclaw-skills-home-"); + skillsHomeEnv = setMockSkillsHomeEnv(tempHome.home); await fs.mkdir(path.join(tempHome.home, ".openclaw", "agents", "main", "sessions"), { recursive: true, }); }); afterAll(async () => { + if (skillsHomeEnv) { + await restoreMockSkillsHomeEnv(skillsHomeEnv); + skillsHomeEnv = null; + } if (tempHome) { await tempHome.restore(); tempHome = null;