Files
openwork/apps/app/tests/account-status-runtime.test.ts

77 lines
2.9 KiB
TypeScript

import { readFileSync } from "node:fs";
import { fileURLToPath } from "node:url";
import { describe, expect, test } from "bun:test";
import { resolveRuntimeStatus } from "@/react-app/domains/session/sidebar/account-status-menu";
const read = (relative: string) =>
readFileSync(fileURLToPath(new URL(relative, import.meta.url)), "utf8");
describe("account status row renders app-scoped facts only", () => {
test("a connected client is ready even while session-level work is in flight", () => {
// The old per-session `loading` input no longer exists: one session's
// pending messages or model verdict must not paint the app as booting.
const status = resolveRuntimeStatus({
clientConnected: true,
openworkServerStatus: "connected",
initializing: false,
});
expect(status.variant).toBe("connected");
});
test("first boot still shows preparing while the server is disconnected", () => {
const status = resolveRuntimeStatus({
clientConnected: false,
openworkServerStatus: "disconnected",
initializing: true,
});
expect(status.variant).toBe("loading");
});
test("reload busy and reload failure stay visible", () => {
expect(resolveRuntimeStatus({
clientConnected: true,
openworkServerStatus: "connected",
initializing: false,
reloadBusy: true,
}).variant).toBe("loading");
expect(resolveRuntimeStatus({
clientConnected: true,
openworkServerStatus: "connected",
initializing: false,
reloadError: "boom",
}).variant).toBe("disconnected");
});
test("a disconnected server after boot reports disconnected, not preparing", () => {
const status = resolveRuntimeStatus({
clientConnected: false,
openworkServerStatus: "disconnected",
initializing: false,
});
expect(status.variant).toBe("disconnected");
});
});
describe("optimistic model selection wiring", () => {
const sessionRoute = read("../src/react-app/shell/session-route.tsx");
test("a pending model verdict never gates task creation or usable-model state", () => {
// Only a CONFIRMED absence (selectedModelUnavailable, post confirmation
// gate) may block; the coarse pending flag is gone.
expect(sessionRoute).not.toContain("selectedModelAvailabilityPending");
expect(sessionRoute).toContain("!selectedModelUnavailable");
});
test("the status bar no longer carries a per-session loading flag", () => {
expect(sessionRoute).not.toContain("loading: showPreparingStatus");
expect(sessionRoute).not.toContain("showPreparingStatus");
const accountMenu = read("../src/react-app/domains/session/sidebar/account-status-menu.tsx");
expect(accountMenu).not.toContain("input.loading");
});
test("send-time re-check of the exact model still blocks a confirmed-missing model", () => {
expect(sessionRoute).toContain('resolveModelAvailability(sendModel ?? null).status === "unavailable"');
});
});