Files
openclaw/src/commands/daemon-install-runtime-warning.test.ts
2026-02-18 23:09:09 +00:00

72 lines
2.0 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
const mocks = vi.hoisted(() => ({
resolveSystemNodeInfo: vi.fn(),
renderSystemNodeWarning: vi.fn(),
}));
vi.mock("../daemon/runtime-paths.js", () => ({
resolveSystemNodeInfo: mocks.resolveSystemNodeInfo,
renderSystemNodeWarning: mocks.renderSystemNodeWarning,
}));
import { emitNodeRuntimeWarning } from "./daemon-install-runtime-warning.js";
afterEach(() => {
vi.resetAllMocks();
});
describe("emitNodeRuntimeWarning", () => {
it("skips lookup when runtime is not node", async () => {
const warn = vi.fn();
await emitNodeRuntimeWarning({
env: {},
runtime: "bun",
warn,
title: "Gateway runtime",
});
expect(mocks.resolveSystemNodeInfo).not.toHaveBeenCalled();
expect(mocks.renderSystemNodeWarning).not.toHaveBeenCalled();
expect(warn).not.toHaveBeenCalled();
});
it("emits warning when system node check returns one", async () => {
const warn = vi.fn();
mocks.resolveSystemNodeInfo.mockResolvedValue({ path: "/usr/bin/node", version: "18.0.0" });
mocks.renderSystemNodeWarning.mockReturnValue("Node too old");
await emitNodeRuntimeWarning({
env: { PATH: "/usr/bin" },
runtime: "node",
nodeProgram: "/opt/node",
warn,
title: "Node daemon runtime",
});
expect(mocks.resolveSystemNodeInfo).toHaveBeenCalledWith({
env: { PATH: "/usr/bin" },
});
expect(mocks.renderSystemNodeWarning).toHaveBeenCalledWith(
{ path: "/usr/bin/node", version: "18.0.0" },
"/opt/node",
);
expect(warn).toHaveBeenCalledWith("Node too old", "Node daemon runtime");
});
it("does not emit when warning helper returns null", async () => {
const warn = vi.fn();
mocks.resolveSystemNodeInfo.mockResolvedValue(null);
mocks.renderSystemNodeWarning.mockReturnValue(null);
await emitNodeRuntimeWarning({
env: {},
runtime: "node",
nodeProgram: "node",
warn,
title: "Gateway runtime",
});
expect(warn).not.toHaveBeenCalled();
});
});