61 lines
2.1 KiB
TypeScript
61 lines
2.1 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import type { GatewayService } from "../daemon/service.js";
|
|
import { readServiceStatusSummary } from "./status.service-summary.js";
|
|
|
|
function createService(overrides: Partial<GatewayService>): GatewayService {
|
|
return {
|
|
label: "systemd",
|
|
loadedText: "enabled",
|
|
notLoadedText: "disabled",
|
|
install: vi.fn(async () => {}),
|
|
uninstall: vi.fn(async () => {}),
|
|
stop: vi.fn(async () => {}),
|
|
restart: vi.fn(async () => ({ outcome: "completed" as const })),
|
|
isLoaded: vi.fn(async () => false),
|
|
readCommand: vi.fn(async () => null),
|
|
readRuntime: vi.fn(async () => ({ status: "stopped" as const })),
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
describe("readServiceStatusSummary", () => {
|
|
it("marks OpenClaw-managed services as installed", async () => {
|
|
const summary = await readServiceStatusSummary(
|
|
createService({
|
|
isLoaded: vi.fn(async () => true),
|
|
readCommand: vi.fn(async () => ({ programArguments: ["openclaw", "gateway", "run"] })),
|
|
readRuntime: vi.fn(async () => ({ status: "running" })),
|
|
}),
|
|
"Daemon",
|
|
);
|
|
|
|
expect(summary.installed).toBe(true);
|
|
expect(summary.managedByOpenClaw).toBe(true);
|
|
expect(summary.externallyManaged).toBe(false);
|
|
expect(summary.loadedText).toBe("enabled");
|
|
});
|
|
|
|
it("marks running unmanaged services as externally managed", async () => {
|
|
const summary = await readServiceStatusSummary(
|
|
createService({
|
|
readRuntime: vi.fn(async () => ({ status: "running" })),
|
|
}),
|
|
"Daemon",
|
|
);
|
|
|
|
expect(summary.installed).toBe(true);
|
|
expect(summary.managedByOpenClaw).toBe(false);
|
|
expect(summary.externallyManaged).toBe(true);
|
|
expect(summary.loadedText).toBe("running (externally managed)");
|
|
});
|
|
|
|
it("keeps missing services as not installed when nothing is running", async () => {
|
|
const summary = await readServiceStatusSummary(createService({}), "Daemon");
|
|
|
|
expect(summary.installed).toBe(false);
|
|
expect(summary.managedByOpenClaw).toBe(false);
|
|
expect(summary.externallyManaged).toBe(false);
|
|
expect(summary.loadedText).toBe("disabled");
|
|
});
|
|
});
|