mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 08:48:37 +00:00
test: simplify home dir coverage
This commit is contained in:
@@ -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);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user