101 lines
3.7 KiB
TypeScript
101 lines
3.7 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
import {
|
|
openWorkConnectAttentionTitle,
|
|
resolveOpenWorkConnectStateSummary,
|
|
resolveOpenWorkConnectStatus,
|
|
} from "../src/react-app/domains/connections/openwork-connect-status";
|
|
import type { SessionCloudMcpMaintenanceState } from "../src/react-app/domains/connections/use-session-mcp-maintenance";
|
|
|
|
function maintenance(
|
|
status: SessionCloudMcpMaintenanceState["status"],
|
|
): SessionCloudMcpMaintenanceState {
|
|
return {
|
|
status,
|
|
issue: status === "failed"
|
|
? {
|
|
code: "cloud_mcp_unavailable",
|
|
stage: "engine_delivery",
|
|
retryable: false,
|
|
recommendedAction: "Run diagnostics",
|
|
message: "Connected service tools could not be verified.",
|
|
}
|
|
: null,
|
|
attempt: status === "retrying" ? 2 : 1,
|
|
maxAttempts: 3,
|
|
};
|
|
}
|
|
|
|
describe("OpenWork Connect status", () => {
|
|
test("distinguishes missing, disabled, and unreadable Connect state", () => {
|
|
expect(resolveOpenWorkConnectStateSummary("missing", false)).toEqual({
|
|
status: "not_configured",
|
|
statusLabel: "Not configured",
|
|
tone: "neutral",
|
|
stageLabel: "Connect setup is not finished",
|
|
recommendedAction: "Sign in to OpenWork Cloud to finish setup.",
|
|
});
|
|
expect(resolveOpenWorkConnectStateSummary("available", false)).toEqual({
|
|
status: "disabled",
|
|
statusLabel: "Disabled",
|
|
tone: "neutral",
|
|
stageLabel: "Disabled by organization policy",
|
|
recommendedAction: "Ask an organization admin to enable Connect.",
|
|
});
|
|
for (const status of ["invalid", "unreadable"] satisfies Array<"invalid" | "unreadable">) {
|
|
expect(resolveOpenWorkConnectStateSummary(status, false)).toEqual({
|
|
status: "unavailable",
|
|
statusLabel: "Needs attention",
|
|
tone: "error",
|
|
stageLabel: "Connect settings are unavailable",
|
|
recommendedAction: "Restart OpenWork. If this continues, run diagnostics.",
|
|
});
|
|
}
|
|
});
|
|
|
|
test("labels the diagnosed message as one possible issue for native tooltips", () => {
|
|
expect(openWorkConnectAttentionTitle("Connected service tools could not be verified."))
|
|
.toBe("One possible issue: Connected service tools could not be verified.");
|
|
});
|
|
|
|
test("is hidden while signed out", () => {
|
|
expect(resolveOpenWorkConnectStatus(false, maintenance("ready"))).toBeNull();
|
|
});
|
|
|
|
test("shows the verified Cloud connection while workspace maintenance is idle", () => {
|
|
expect(resolveOpenWorkConnectStatus(true, undefined)).toEqual({
|
|
state: "ready",
|
|
label: "Ready",
|
|
description: "Signed in to OpenWork Cloud. Connected service tools will be checked when a workspace is active.",
|
|
});
|
|
expect(resolveOpenWorkConnectStatus(true, maintenance("idle"))).toMatchObject({
|
|
state: "ready",
|
|
label: "Ready",
|
|
});
|
|
});
|
|
|
|
test("maps the active lifecycle to checking, ready, and needs attention", () => {
|
|
expect(resolveOpenWorkConnectStatus(true, maintenance("checking"))).toMatchObject({
|
|
state: "checking",
|
|
label: "Checking",
|
|
});
|
|
expect(resolveOpenWorkConnectStatus(true, maintenance("retrying"))).toMatchObject({
|
|
state: "checking",
|
|
description: "Restoring connected service tools (2/3).",
|
|
});
|
|
expect(resolveOpenWorkConnectStatus(true, maintenance("ready"))).toMatchObject({
|
|
state: "ready",
|
|
label: "Ready",
|
|
});
|
|
expect(resolveOpenWorkConnectStatus(true, maintenance("failed"))).toEqual({
|
|
state: "needs_attention",
|
|
label: "Needs attention",
|
|
description: "Connected service tools could not be verified.",
|
|
});
|
|
expect(resolveOpenWorkConnectStatus(true, maintenance("skipped"))).toMatchObject({
|
|
state: "needs_attention",
|
|
label: "Needs attention",
|
|
});
|
|
});
|
|
});
|