mirror of
https://fastgit.cc/github.com/openclaw/openclaw
synced 2026-04-30 14:02:56 +08:00
fix(agents): isolate skills tests from personal home (#65456)
This commit is contained in:
@@ -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();
|
||||
});
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user