import { describe, expect, it } from "vitest"; import { parseSystemdShow, resolveSystemdUserUnitPath } from "./systemd.js"; describe("systemd runtime parsing", () => { it("parses active state details", () => { const output = [ "ActiveState=inactive", "SubState=dead", "MainPID=0", "ExecMainStatus=2", "ExecMainCode=exited", ].join("\n"); expect(parseSystemdShow(output)).toEqual({ activeState: "inactive", subState: "dead", execMainStatus: 2, execMainCode: "exited", }); }); }); describe("resolveSystemdUserUnitPath", () => { it("uses default service name when OPENCLAW_PROFILE is default", () => { const env = { HOME: "/home/test", OPENCLAW_PROFILE: "default" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/openclaw-gateway.service", ); }); it("uses default service name when OPENCLAW_PROFILE is unset", () => { const env = { HOME: "/home/test" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/openclaw-gateway.service", ); }); it("uses profile-specific service name when OPENCLAW_PROFILE is set to a custom value", () => { const env = { HOME: "/home/test", OPENCLAW_PROFILE: "jbphoenix" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/openclaw-gateway-jbphoenix.service", ); }); it("prefers OPENCLAW_SYSTEMD_UNIT over OPENCLAW_PROFILE", () => { const env = { HOME: "/home/test", OPENCLAW_PROFILE: "jbphoenix", OPENCLAW_SYSTEMD_UNIT: "custom-unit", }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/custom-unit.service", ); }); it("handles OPENCLAW_SYSTEMD_UNIT with .service suffix", () => { const env = { HOME: "/home/test", OPENCLAW_SYSTEMD_UNIT: "custom-unit.service", }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/custom-unit.service", ); }); it("trims whitespace from OPENCLAW_SYSTEMD_UNIT", () => { const env = { HOME: "/home/test", OPENCLAW_SYSTEMD_UNIT: " custom-unit ", }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/custom-unit.service", ); }); it("handles case-insensitive 'Default' profile", () => { const env = { HOME: "/home/test", OPENCLAW_PROFILE: "Default" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/openclaw-gateway.service", ); }); it("handles case-insensitive 'DEFAULT' profile", () => { const env = { HOME: "/home/test", OPENCLAW_PROFILE: "DEFAULT" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/openclaw-gateway.service", ); }); it("trims whitespace from OPENCLAW_PROFILE", () => { const env = { HOME: "/home/test", OPENCLAW_PROFILE: " myprofile " }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/openclaw-gateway-myprofile.service", ); }); });