test: dedupe skills fixture setup

This commit is contained in:
Peter Steinberger
2026-04-18 21:47:07 +01:00
parent f60c3bf6e0
commit 26f1f28ffe
3 changed files with 45 additions and 56 deletions

View File

@@ -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",

View File

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

View File

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