fix(agents): isolate skills tests from personal home (#65456)

This commit is contained in:
Nimrod Gutman
2026-04-12 19:44:50 +03:00
committed by GitHub
parent b23f56fa8c
commit 26dbc3da15
3 changed files with 50 additions and 4 deletions

View File

@@ -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();
});

View File

@@ -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<T>(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() {

View File

@@ -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;