Resolve 38 conflicts preserving both sides' work: - Server: DB-based registries (dev) + WorkspaceGitService/DaemonConfigStore (main) - App: script proxy/voice MCP (dev) + pin/hide tabs/bootstrap boundary (main) - Shared: WorkspaceScriptPayload (dev) + git/GitHub runtime schemas (main) - Deleted workspace-registry-bootstrap.ts (dev's DB approach supersedes)
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
resolveWorkspaceHeader,
|
|
shouldRenderMissingWorkspaceDescriptor,
|
|
} from "./workspace-header-source";
|
|
import { buildSidebarProjectsFromWorkspaces } from "@/hooks/use-sidebar-workspaces-list";
|
|
import type { WorkspaceDescriptor } from "@/stores/session-store";
|
|
|
|
describe("workspace source of truth consumption", () => {
|
|
it("uses the same descriptor name in header and sidebar row", () => {
|
|
const workspace: WorkspaceDescriptor = {
|
|
id: "/repo/main",
|
|
projectId: "remote:github.com/getpaseo/paseo",
|
|
projectDisplayName: "getpaseo/paseo",
|
|
projectRootPath: "/repo/main",
|
|
workspaceDirectory: "/repo/main",
|
|
projectKind: "git",
|
|
workspaceKind: "checkout",
|
|
name: "feat/workspace-sot",
|
|
status: "running",
|
|
diffStat: null,
|
|
scripts: [],
|
|
};
|
|
|
|
const header = resolveWorkspaceHeader({ workspace });
|
|
const sidebarProjects = buildSidebarProjectsFromWorkspaces({
|
|
serverId: "srv",
|
|
workspaces: [workspace],
|
|
projectOrder: [],
|
|
workspaceOrderByScope: {},
|
|
});
|
|
|
|
expect(header.title).toBe("feat/workspace-sot");
|
|
expect(header.subtitle).toBe("getpaseo/paseo");
|
|
expect(sidebarProjects[0]?.workspaces[0]?.name).toBe(header.title);
|
|
expect(sidebarProjects[0]?.workspaces[0]?.statusBucket).toBe("running");
|
|
});
|
|
|
|
it("renders explicit missing state only after workspace hydration", () => {
|
|
expect(
|
|
shouldRenderMissingWorkspaceDescriptor({
|
|
workspace: null,
|
|
hasHydratedWorkspaces: true,
|
|
}),
|
|
).toBe(true);
|
|
|
|
expect(
|
|
shouldRenderMissingWorkspaceDescriptor({
|
|
workspace: null,
|
|
hasHydratedWorkspaces: false,
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
});
|