mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 06:00:43 +00:00
test: dedupe skills fixture setup
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user