From e978297c28f2219b1a200f2b1bf7f0801571c142 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 19:24:59 +0000 Subject: [PATCH] test(agents): dedupe workspace template temp roots and cover fallback resolution --- src/agents/workspace-templates.e2e.test.ts | 28 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/agents/workspace-templates.e2e.test.ts b/src/agents/workspace-templates.e2e.test.ts index 39012e48b99..1da24828792 100644 --- a/src/agents/workspace-templates.e2e.test.ts +++ b/src/agents/workspace-templates.e2e.test.ts @@ -2,19 +2,29 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { pathToFileURL } from "node:url"; -import { describe, expect, it } from "vitest"; +import { afterEach, describe, expect, it } from "vitest"; import { resetWorkspaceTemplateDirCache, resolveWorkspaceTemplateDir, } from "./workspace-templates.js"; +const tempDirs: string[] = []; + async function makeTempRoot(): Promise { - return await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-templates-")); + const root = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-templates-")); + tempDirs.push(root); + return root; } describe("resolveWorkspaceTemplateDir", () => { - it("resolves templates from package root when module url is dist-rooted", async () => { + afterEach(async () => { resetWorkspaceTemplateDirCache(); + await Promise.all( + tempDirs.splice(0).map((dir) => fs.rm(dir, { recursive: true, force: true })), + ); + }); + + it("resolves templates from package root when module url is dist-rooted", async () => { const root = await makeTempRoot(); await fs.writeFile(path.join(root, "package.json"), JSON.stringify({ name: "openclaw" })); @@ -29,4 +39,16 @@ describe("resolveWorkspaceTemplateDir", () => { const resolved = await resolveWorkspaceTemplateDir({ cwd: distDir, moduleUrl }); expect(resolved).toBe(templatesDir); }); + + it("falls back to package-root docs path when templates directory is missing", async () => { + const root = await makeTempRoot(); + await fs.writeFile(path.join(root, "package.json"), JSON.stringify({ name: "openclaw" })); + + const distDir = path.join(root, "dist"); + await fs.mkdir(distDir, { recursive: true }); + const moduleUrl = pathToFileURL(path.join(distDir, "model-selection.mjs")).toString(); + + const resolved = await resolveWorkspaceTemplateDir({ cwd: distDir, moduleUrl }); + expect(path.normalize(resolved)).toBe(path.resolve("docs", "reference", "templates")); + }); });