test: simplify home dir coverage

This commit is contained in:
Peter Steinberger
2026-03-13 18:25:54 +00:00
parent fbc06f1926
commit 1d300c416d

View File

@@ -3,37 +3,64 @@ import { describe, expect, it } from "vitest";
import { expandHomePrefix, resolveEffectiveHomeDir, resolveRequiredHomeDir } from "./home-dir.js"; import { expandHomePrefix, resolveEffectiveHomeDir, resolveRequiredHomeDir } from "./home-dir.js";
describe("resolveEffectiveHomeDir", () => { describe("resolveEffectiveHomeDir", () => {
it("prefers OPENCLAW_HOME over HOME and USERPROFILE", () => { it.each([
const env = { {
OPENCLAW_HOME: "/srv/openclaw-home", name: "prefers OPENCLAW_HOME over HOME and USERPROFILE",
HOME: "/home/other", env: {
USERPROFILE: "C:/Users/other", OPENCLAW_HOME: " /srv/openclaw-home ",
} as NodeJS.ProcessEnv; HOME: "/home/other",
USERPROFILE: "C:/Users/other",
expect(resolveEffectiveHomeDir(env, () => "/fallback")).toBe( } as NodeJS.ProcessEnv,
path.resolve("/srv/openclaw-home"), homedir: () => "/fallback",
); expected: "/srv/openclaw-home",
},
{
name: "falls back to HOME",
env: { HOME: " /home/alice " } as NodeJS.ProcessEnv,
expected: "/home/alice",
},
{
name: "falls back to USERPROFILE when HOME is blank",
env: {
HOME: " ",
USERPROFILE: " C:/Users/alice ",
} as NodeJS.ProcessEnv,
expected: "C:/Users/alice",
},
{
name: "falls back to homedir when env values are blank",
env: {
OPENCLAW_HOME: " ",
HOME: " ",
USERPROFILE: "\t",
} as NodeJS.ProcessEnv,
homedir: () => " /fallback ",
expected: "/fallback",
},
])("$name", ({ env, homedir, expected }) => {
expect(resolveEffectiveHomeDir(env, homedir)).toBe(path.resolve(expected));
}); });
it("falls back to HOME then USERPROFILE then homedir", () => { it.each([
expect(resolveEffectiveHomeDir({ HOME: "/home/alice" } as NodeJS.ProcessEnv)).toBe( {
path.resolve("/home/alice"), name: "expands ~/ using HOME",
); env: {
expect(resolveEffectiveHomeDir({ USERPROFILE: "C:/Users/alice" } as NodeJS.ProcessEnv)).toBe( OPENCLAW_HOME: "~/svc",
path.resolve("C:/Users/alice"), HOME: "/home/alice",
); } as NodeJS.ProcessEnv,
expect(resolveEffectiveHomeDir({} as NodeJS.ProcessEnv, () => "/fallback")).toBe( expected: "/home/alice/svc",
path.resolve("/fallback"), },
); {
}); name: "expands ~\\\\ using USERPROFILE",
env: {
it("expands OPENCLAW_HOME when set to ~", () => { OPENCLAW_HOME: "~\\svc",
const env = { HOME: " ",
OPENCLAW_HOME: "~/svc", USERPROFILE: "C:/Users/alice",
HOME: "/home/alice", } as NodeJS.ProcessEnv,
} as NodeJS.ProcessEnv; expected: "C:/Users/alice\\svc",
},
expect(resolveEffectiveHomeDir(env)).toBe(path.resolve("/home/alice/svc")); ])("$name", ({ env, expected }) => {
expect(resolveEffectiveHomeDir(env)).toBe(path.resolve(expected));
}); });
}); });
@@ -64,14 +91,35 @@ describe("resolveRequiredHomeDir", () => {
}); });
describe("expandHomePrefix", () => { describe("expandHomePrefix", () => {
it("expands tilde using effective home", () => { it.each([
const value = expandHomePrefix("~/x", { {
env: { OPENCLAW_HOME: "/srv/openclaw-home" } as NodeJS.ProcessEnv, name: "expands ~/ using effective home",
}); input: "~/x",
expect(value).toBe(`${path.resolve("/srv/openclaw-home")}/x`); opts: {
}); env: { OPENCLAW_HOME: "/srv/openclaw-home" } as NodeJS.ProcessEnv,
},
it("keeps non-tilde values unchanged", () => { expected: `${path.resolve("/srv/openclaw-home")}/x`,
expect(expandHomePrefix("/tmp/x")).toBe("/tmp/x"); },
{
name: "expands exact ~ using explicit home",
input: "~",
opts: { home: " /srv/openclaw-home " },
expected: path.resolve("/srv/openclaw-home"),
},
{
name: "expands ~\\\\ using resolved env home",
input: "~\\x",
opts: {
env: { HOME: "/home/alice" } as NodeJS.ProcessEnv,
},
expected: `${path.resolve("/home/alice")}\\x`,
},
{
name: "keeps non-tilde values unchanged",
input: "/tmp/x",
expected: "/tmp/x",
},
])("$name", ({ input, opts, expected }) => {
expect(expandHomePrefix(input, opts)).toBe(expected);
}); });
}); });