From 26f1f28ffe54e8409e6feb7fe2ec879ebdb7aacf Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 18 Apr 2026 21:47:07 +0100 Subject: [PATCH] test: dedupe skills fixture setup --- ...skills.buildworkspaceskillsnapshot.test.ts | 22 ++----- src/agents/skills.e2e-test-helpers.ts | 18 ++++++ .../skills.loadworkspaceskillentries.test.ts | 61 +++++++------------ 3 files changed, 45 insertions(+), 56 deletions(-) diff --git a/src/agents/skills.buildworkspaceskillsnapshot.test.ts b/src/agents/skills.buildworkspaceskillsnapshot.test.ts index 293cad66834..e1174952e6b 100644 --- a/src/agents/skills.buildworkspaceskillsnapshot.test.ts +++ b/src/agents/skills.buildworkspaceskillsnapshot.test.ts @@ -4,7 +4,7 @@ import { afterAll, beforeAll, describe, expect, it, vi } 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 { writeSkill, writeWorkspaceSkills } from "./skills.e2e-test-helpers.js"; import { restoreMockSkillsHomeEnv, setMockSkillsHomeEnv, @@ -199,21 +199,11 @@ describe("buildWorkspaceSkillSnapshot", () => { it("uses agents.list[].skills as a full replacement for inherited defaults", async () => { const workspaceDir = await fixtureSuite.createCaseDir("workspace"); - await writeSkill({ - dir: path.join(workspaceDir, "skills", "github"), - name: "github", - description: "GitHub", - }); - await writeSkill({ - dir: path.join(workspaceDir, "skills", "weather"), - name: "weather", - description: "Weather", - }); - await writeSkill({ - dir: path.join(workspaceDir, "skills", "docs-search"), - name: "docs-search", - description: "Docs", - }); + await writeWorkspaceSkills(workspaceDir, [ + { name: "github", description: "GitHub" }, + { name: "weather", description: "Weather" }, + { name: "docs-search", description: "Docs" }, + ]); const snapshot = buildSnapshot(workspaceDir, { agentId: "writer", diff --git a/src/agents/skills.e2e-test-helpers.ts b/src/agents/skills.e2e-test-helpers.ts index 033b4bda584..13748c2891a 100644 --- a/src/agents/skills.e2e-test-helpers.ts +++ b/src/agents/skills.e2e-test-helpers.ts @@ -28,3 +28,21 @@ ${body ?? `# ${name}\n`} "utf-8", ); } + +export async function writeWorkspaceSkills( + workspaceDir: string, + skills: ReadonlyArray<{ + name: string; + description: string; + metadata?: string; + body?: string; + frontmatterExtra?: string; + }>, +) { + for (const skill of skills) { + await writeSkill({ + dir: path.join(workspaceDir, "skills", skill.name), + ...skill, + }); + } +} diff --git a/src/agents/skills.loadworkspaceskillentries.test.ts b/src/agents/skills.loadworkspaceskillentries.test.ts index 15dba7191e1..a946b77c25c 100644 --- a/src/agents/skills.loadworkspaceskillentries.test.ts +++ b/src/agents/skills.loadworkspaceskillentries.test.ts @@ -5,7 +5,7 @@ import { afterAll, afterEach, beforeAll, 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 { writeSkill, writeWorkspaceSkills } from "./skills.e2e-test-helpers.js"; import { restoreMockSkillsHomeEnv, setMockSkillsHomeEnv, @@ -30,6 +30,18 @@ function withWorkspaceHome(workspaceDir: string, cb: () => T): T { return withPathResolutionEnv(workspaceDir, { PATH: "" }, () => cb()); } +function captureWarningLogger() { + setLoggerOverride({ level: "silent", consoleLevel: "warn" }); + const warn = vi.fn(); + loggingState.rawConsole = { + log: vi.fn(), + info: vi.fn(), + warn, + error: vi.fn(), + }; + return warn; +} + beforeAll(async () => { tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-skills-workspace-")); fakeHome = path.join(tempRoot, "home"); @@ -141,21 +153,11 @@ describe("loadWorkspaceSkillEntries", () => { it("applies agent skill filters and replacement semantics", async () => { const workspaceDir = await createTempWorkspaceDir(); - await writeSkill({ - dir: path.join(workspaceDir, "skills", "github"), - name: "github", - description: "GitHub", - }); - await writeSkill({ - dir: path.join(workspaceDir, "skills", "weather"), - name: "weather", - description: "Weather", - }); - await writeSkill({ - dir: path.join(workspaceDir, "skills", "docs-search"), - name: "docs-search", - description: "Docs", - }); + await writeWorkspaceSkills(workspaceDir, [ + { name: "github", description: "GitHub" }, + { name: "weather", description: "Weather" }, + { name: "docs-search", description: "Docs" }, + ]); const defaultEntries = loadWorkspaceSkillEntries(workspaceDir, { config: { @@ -238,14 +240,7 @@ describe("loadWorkspaceSkillEntries", () => { await fs.mkdir(path.join(workspaceDir, "skills"), { recursive: true }); const requestedPath = path.join(workspaceDir, "skills", "escaped-skill"); await fs.symlink(escapedSkillDir, requestedPath, "dir"); - setLoggerOverride({ level: "silent", consoleLevel: "warn" }); - const warn = vi.fn(); - loggingState.rawConsole = { - log: vi.fn(), - info: vi.fn(), - warn, - error: vi.fn(), - }; + const warn = captureWarningLogger(); const entries = loadWorkspaceSkillEntries(workspaceDir, { managedSkillsDir: path.join(workspaceDir, ".managed"), @@ -279,14 +274,7 @@ describe("loadWorkspaceSkillEntries", () => { await fs.mkdir(bundledDir, { recursive: true }); const requestedPath = path.join(bundledDir, "escaped-bundled-skill"); await fs.symlink(escapedSkillDir, requestedPath, "dir"); - setLoggerOverride({ level: "silent", consoleLevel: "warn" }); - const warn = vi.fn(); - loggingState.rawConsole = { - log: vi.fn(), - info: vi.fn(), - warn, - error: vi.fn(), - }; + const warn = captureWarningLogger(); const entries = loadWorkspaceSkillEntries(workspaceDir, { managedSkillsDir: path.join(workspaceDir, ".managed"), @@ -320,14 +308,7 @@ describe("loadWorkspaceSkillEntries", () => { await fs.mkdir(bundledDir, { recursive: true }); const requestedPath = path.join(bundledDir, "escaped-bundled-skill"); await fs.symlink(escapedSkillDir, requestedPath, "dir"); - setLoggerOverride({ level: "silent", consoleLevel: "warn" }); - const warn = vi.fn(); - loggingState.rawConsole = { - log: vi.fn(), - info: vi.fn(), - warn, - error: vi.fn(), - }; + const warn = captureWarningLogger(); loadWorkspaceSkillEntries(workspaceDir, { managedSkillsDir: path.join(workspaceDir, ".managed"),