mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-16 11:41:08 +00:00
169 lines
5.1 KiB
TypeScript
169 lines
5.1 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { buildStatusJsonPayload, resolveStatusUpdateChannelInfo } from "./status-json-payload.ts";
|
|
|
|
const mocks = vi.hoisted(() => ({
|
|
normalizeUpdateChannel: vi.fn((value?: string | null) => value ?? null),
|
|
resolveUpdateChannelDisplay: vi.fn(() => ({
|
|
channel: "stable",
|
|
source: "config",
|
|
label: "stable",
|
|
})),
|
|
}));
|
|
|
|
vi.mock("../infra/update-channels.js", () => ({
|
|
normalizeUpdateChannel: mocks.normalizeUpdateChannel,
|
|
resolveUpdateChannelDisplay: mocks.resolveUpdateChannelDisplay,
|
|
}));
|
|
|
|
describe("status-json-payload", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it("resolves update channel info through the shared channel display path", () => {
|
|
expect(
|
|
resolveStatusUpdateChannelInfo({
|
|
updateConfigChannel: "beta",
|
|
update: {
|
|
installKind: "package",
|
|
git: {
|
|
tag: "v1.2.3",
|
|
branch: "main",
|
|
},
|
|
},
|
|
}),
|
|
).toEqual({
|
|
channel: "stable",
|
|
source: "config",
|
|
label: "stable",
|
|
});
|
|
expect(mocks.normalizeUpdateChannel).toHaveBeenCalledWith("beta");
|
|
expect(mocks.resolveUpdateChannelDisplay).toHaveBeenCalledWith({
|
|
configChannel: "beta",
|
|
installKind: "package",
|
|
gitTag: "v1.2.3",
|
|
gitBranch: "main",
|
|
});
|
|
});
|
|
|
|
it("builds the shared status json payload with optional sections", () => {
|
|
expect(
|
|
buildStatusJsonPayload({
|
|
summary: { ok: true },
|
|
surface: {
|
|
cfg: { update: { channel: "stable" }, gateway: {} },
|
|
update: {
|
|
root: "/tmp/openclaw",
|
|
installKind: "package",
|
|
packageManager: "npm",
|
|
registry: { latestVersion: "1.2.3" },
|
|
} as never,
|
|
tailscaleMode: "serve",
|
|
gatewayMode: "remote",
|
|
remoteUrlMissing: false,
|
|
gatewayConnection: { url: "wss://gateway.example.com", urlSource: "config" },
|
|
gatewayReachable: true,
|
|
gatewayProbe: { connectLatencyMs: 42, error: null },
|
|
gatewayProbeAuth: { token: "tok" },
|
|
gatewaySelf: { host: "gateway" },
|
|
gatewayProbeAuthWarning: "warn",
|
|
gatewayService: { label: "LaunchAgent", installed: true, loadedText: "loaded" },
|
|
nodeService: { label: "node", installed: true, loadedText: "loaded" },
|
|
},
|
|
osSummary: { platform: "linux" },
|
|
memory: null,
|
|
memoryPlugin: { enabled: true },
|
|
agents: [{ id: "main" }],
|
|
secretDiagnostics: ["diag"],
|
|
securityAudit: { summary: { critical: 1 } },
|
|
health: { ok: true },
|
|
usage: { providers: [] },
|
|
lastHeartbeat: { status: "ok" },
|
|
pluginCompatibility: [
|
|
{
|
|
pluginId: "legacy",
|
|
code: "legacy-before-agent-start",
|
|
severity: "warn",
|
|
message: "warn",
|
|
},
|
|
],
|
|
}),
|
|
).toEqual({
|
|
ok: true,
|
|
os: { platform: "linux" },
|
|
update: {
|
|
root: "/tmp/openclaw",
|
|
installKind: "package",
|
|
packageManager: "npm",
|
|
registry: { latestVersion: "1.2.3" },
|
|
},
|
|
updateChannel: "stable",
|
|
updateChannelSource: "config",
|
|
memory: null,
|
|
memoryPlugin: { enabled: true },
|
|
gateway: {
|
|
mode: "remote",
|
|
url: "wss://gateway.example.com",
|
|
urlSource: "config",
|
|
misconfigured: false,
|
|
reachable: true,
|
|
connectLatencyMs: 42,
|
|
self: { host: "gateway" },
|
|
error: null,
|
|
authWarning: "warn",
|
|
},
|
|
gatewayService: { label: "LaunchAgent" },
|
|
nodeService: { label: "node" },
|
|
agents: [{ id: "main" }],
|
|
secretDiagnostics: ["diag"],
|
|
securityAudit: { summary: { critical: 1 } },
|
|
health: { ok: true },
|
|
usage: { providers: [] },
|
|
lastHeartbeat: { status: "ok" },
|
|
pluginCompatibility: {
|
|
count: 1,
|
|
warnings: [
|
|
{
|
|
pluginId: "legacy",
|
|
code: "legacy-before-agent-start",
|
|
severity: "warn",
|
|
message: "warn",
|
|
},
|
|
],
|
|
},
|
|
});
|
|
});
|
|
|
|
it("omits optional sections when they are absent", () => {
|
|
expect(
|
|
buildStatusJsonPayload({
|
|
summary: { ok: true },
|
|
surface: {
|
|
cfg: { gateway: {} },
|
|
update: {
|
|
root: "/tmp/openclaw",
|
|
installKind: "package",
|
|
packageManager: "npm",
|
|
} as never,
|
|
tailscaleMode: "off",
|
|
gatewayMode: "local",
|
|
remoteUrlMissing: false,
|
|
gatewayConnection: { url: "ws://127.0.0.1:18789" },
|
|
gatewayReachable: false,
|
|
gatewayProbe: null,
|
|
gatewayProbeAuth: null,
|
|
gatewaySelf: null,
|
|
gatewayProbeAuthWarning: null,
|
|
gatewayService: { label: "LaunchAgent", installed: false, loadedText: "not installed" },
|
|
nodeService: { label: "node", installed: false, loadedText: "not installed" },
|
|
},
|
|
osSummary: { platform: "linux" },
|
|
memory: null,
|
|
memoryPlugin: null,
|
|
agents: [],
|
|
secretDiagnostics: [],
|
|
}),
|
|
).not.toHaveProperty("securityAudit");
|
|
});
|
|
});
|