62 lines
2.7 KiB
TypeScript
62 lines
2.7 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
import type { WorkspaceInfo } from "../src/app/lib/desktop";
|
|
import { resolveWorkspaceEndpoint } from "../src/app/lib/workspace-endpoint";
|
|
import { resolveWorkbenchPaneEndpoint } from "../src/react-app/domains/session/chat/pane-runtime";
|
|
|
|
type PaneWorkspace = Pick<WorkspaceInfo, "id" | "path" | "workspaceType">;
|
|
|
|
describe("split pane runtime", () => {
|
|
test("retains the selected pane workspace endpoint without borrowing another workspace", () => {
|
|
const workspaceA: PaneWorkspace = { id: "workspace-a", path: "/workspace/a", workspaceType: "local" };
|
|
const workspaceB: PaneWorkspace = { id: "workspace-b", path: "/workspace/b", workspaceType: "local" };
|
|
const localServer = { baseUrl: "http://127.0.0.1:8787", token: "pane-token" };
|
|
const endpointA = resolveWorkspaceEndpoint(workspaceA, localServer);
|
|
const endpointB = resolveWorkspaceEndpoint(workspaceB, localServer);
|
|
|
|
const pane = resolveWorkbenchPaneEndpoint({
|
|
workspaceId: workspaceB.id,
|
|
workspaceTitle: "Workspace B",
|
|
workspace: workspaceB,
|
|
endpoint: endpointB,
|
|
});
|
|
|
|
expect(pane.status).toBe("ready");
|
|
if (pane.status !== "ready") return;
|
|
expect(pane.workspaceId).toBe(workspaceB.id);
|
|
expect(pane.workspaceRoot).toBe(workspaceB.path);
|
|
expect(pane.endpoint.workspaceId).toBe(workspaceB.id);
|
|
expect(pane.endpoint.opencodeBaseUrl).toContain(`/workspace/${workspaceB.id}/opencode`);
|
|
expect(pane.endpoint.opencodeBaseUrl).not.toContain(`/workspace/${workspaceA.id}/opencode`);
|
|
expect(pane.endpoint.token).toBe(localServer.token);
|
|
expect(pane.endpoint).not.toBe(endpointA);
|
|
});
|
|
|
|
test("keeps an unavailable error local to its pane", () => {
|
|
const workspaceA: PaneWorkspace = { id: "workspace-a", path: "/workspace/a", workspaceType: "local" };
|
|
const workspaceB: PaneWorkspace = { id: "workspace-b", path: "/workspace/b", workspaceType: "local" };
|
|
const localServer = { baseUrl: "http://127.0.0.1:8787", token: "pane-token" };
|
|
const primary = resolveWorkbenchPaneEndpoint({
|
|
workspaceId: workspaceA.id,
|
|
workspaceTitle: "Workspace A",
|
|
workspace: workspaceA,
|
|
endpoint: resolveWorkspaceEndpoint(workspaceA, localServer),
|
|
});
|
|
const secondary = resolveWorkbenchPaneEndpoint({
|
|
workspaceId: workspaceB.id,
|
|
workspaceTitle: "Workspace B",
|
|
workspace: workspaceB,
|
|
endpoint: resolveWorkspaceEndpoint(workspaceB, localServer),
|
|
connectionError: "Workspace B is offline.",
|
|
});
|
|
|
|
expect(primary.status).toBe("ready");
|
|
expect(secondary).toEqual({
|
|
status: "unavailable",
|
|
workspaceId: workspaceB.id,
|
|
workspaceTitle: "Workspace B",
|
|
message: "Workspace B is offline.",
|
|
});
|
|
});
|
|
});
|