diff --git a/src/infra/home-dir.test.ts b/src/infra/home-dir.test.ts index 3096dd1b0b4..e0f19f865b6 100644 --- a/src/infra/home-dir.test.ts +++ b/src/infra/home-dir.test.ts @@ -1,6 +1,11 @@ import path from "node:path"; import { describe, expect, it } from "vitest"; -import { expandHomePrefix, resolveEffectiveHomeDir, resolveRequiredHomeDir } from "./home-dir.js"; +import { + expandHomePrefix, + resolveEffectiveHomeDir, + resolveHomeRelativePath, + resolveRequiredHomeDir, +} from "./home-dir.js"; describe("resolveEffectiveHomeDir", () => { it.each([ @@ -123,3 +128,33 @@ describe("expandHomePrefix", () => { expect(expandHomePrefix(input, opts)).toBe(expected); }); }); + +describe("resolveHomeRelativePath", () => { + it("returns blank input unchanged", () => { + expect(resolveHomeRelativePath(" ")).toBe(""); + }); + + it("resolves trimmed relative and absolute paths", () => { + expect(resolveHomeRelativePath(" ./tmp/file.txt ")).toBe(path.resolve("./tmp/file.txt")); + expect(resolveHomeRelativePath(" /tmp/file.txt ")).toBe(path.resolve("/tmp/file.txt")); + }); + + it("expands tilde paths using the resolved home directory", () => { + expect( + resolveHomeRelativePath("~/docs", { + env: { OPENCLAW_HOME: "/srv/openclaw-home" } as NodeJS.ProcessEnv, + }), + ).toBe(path.resolve("/srv/openclaw-home/docs")); + }); + + it("falls back to cwd when tilde paths have no home source", () => { + expect( + resolveHomeRelativePath("~", { + env: {} as NodeJS.ProcessEnv, + homedir: () => { + throw new Error("no home"); + }, + }), + ).toBe(path.resolve(process.cwd())); + }); +});