import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { findExtraGatewayServices } from "./inspect.js"; const { execSchtasksMock } = vi.hoisted(() => ({ execSchtasksMock: vi.fn(), })); vi.mock("./schtasks-exec.js", () => ({ execSchtasks: (...args: unknown[]) => execSchtasksMock(...args), })); describe("findExtraGatewayServices (win32)", () => { const originalPlatform = process.platform; beforeEach(() => { Object.defineProperty(process, "platform", { configurable: true, value: "win32", }); execSchtasksMock.mockReset(); }); afterEach(() => { Object.defineProperty(process, "platform", { configurable: true, value: originalPlatform, }); }); it("skips schtasks queries unless deep mode is enabled", async () => { const result = await findExtraGatewayServices({}); expect(result).toEqual([]); expect(execSchtasksMock).not.toHaveBeenCalled(); }); it("returns empty results when schtasks query fails", async () => { execSchtasksMock.mockResolvedValueOnce({ code: 1, stdout: "", stderr: "error", }); const result = await findExtraGatewayServices({}, { deep: true }); expect(result).toEqual([]); }); it("collects only non-openclaw marker tasks from schtasks output", async () => { execSchtasksMock.mockResolvedValueOnce({ code: 0, stdout: [ "TaskName: OpenClaw Gateway", "Task To Run: C:\\Program Files\\OpenClaw\\openclaw.exe gateway run", "", "TaskName: Clawdbot Legacy", "Task To Run: C:\\clawdbot\\clawdbot.exe run", "", "TaskName: Other Task", "Task To Run: C:\\tools\\helper.exe", "", "TaskName: MoltBot Legacy", "Task To Run: C:\\moltbot\\moltbot.exe run", "", ].join("\n"), stderr: "", }); const result = await findExtraGatewayServices({}, { deep: true }); expect(result).toEqual([ { platform: "win32", label: "Clawdbot Legacy", detail: "task: Clawdbot Legacy, run: C:\\clawdbot\\clawdbot.exe run", scope: "system", marker: "clawdbot", legacy: true, }, { platform: "win32", label: "MoltBot Legacy", detail: "task: MoltBot Legacy, run: C:\\moltbot\\moltbot.exe run", scope: "system", marker: "moltbot", legacy: true, }, ]); }); });