import { ThreadId, type ThreadPullRequestLink } from "@t3tools/contracts";
import { renderToStaticMarkup } from "react-dom/server";
import { describe, expect, it } from "vite-plus/test";
import { ThreadWorktreeIndicator, linkedPullRequestSnapshotStatus } from "./ThreadStatusIndicators";
describe("ThreadWorktreeIndicator", () => {
it("renders the worktree folder and branch in an accessible label", () => {
const markup = renderToStaticMarkup(
,
);
expect(markup).toContain('role="img"');
expect(markup).toContain(
'aria-label="Worktree: sidebar-indicator (feature/sidebar-indicator)"',
);
expect(markup).toContain('data-testid="thread-worktree-thread-1"');
});
it.each([null, "", " "])("renders nothing for an absent worktree path", (worktreePath) => {
const markup = renderToStaticMarkup(
,
);
expect(markup).toBe("");
});
});
describe("linked pull request snapshots", () => {
const link: ThreadPullRequestLink = {
host: "gitlab.example.com",
repository: "acme/web",
number: 42,
url: "https://gitlab.example.com/acme/web/-/merge_requests/42",
source: "manual",
linkedAt: "2026-01-01T00:00:00Z",
stack: null,
snapshot: null,
};
it("keeps unsynced links unknown", () => {
expect(linkedPullRequestSnapshotStatus(link)).toBeNull();
});
it("uses the snapshot state and branches with the linked identity", () => {
const result = linkedPullRequestSnapshotStatus({
...link,
snapshot: {
state: "merged",
title: "Change",
headBranch: "feature",
baseBranch: "main",
isDraft: false,
updatedAt: "2026-01-02T00:00:00Z",
syncedAt: "2026-01-03T00:00:00Z",
},
});
expect(result).toEqual({
pr: {
number: 42,
url: link.url,
title: "Change",
state: "merged",
isDraft: false,
headRef: "feature",
baseRef: "main",
updatedAt: "2026-01-02T00:00:00Z",
},
sourceControlProvider: { kind: "gitlab", name: "gitlab", baseUrl: "" },
});
});
});