import { describe, expect, it } from "vitest"; import { assigneeValueFromSelection, currentUserAssigneeOption, formatAssigneeUserLabel, parseAssigneeValue, suggestedCommentAssigneeValue, } from "./assignees"; describe("assignee selection helpers", () => { it("encodes and parses agent assignees", () => { const value = assigneeValueFromSelection({ assigneeAgentId: "agent-123" }); expect(value).toBe("agent:agent-123"); expect(parseAssigneeValue(value)).toEqual({ assigneeAgentId: "agent-123", assigneeUserId: null, }); }); it("encodes and parses current-user assignees", () => { const [option] = currentUserAssigneeOption("local-board"); expect(option).toEqual({ id: "user:local-board", label: "Me", searchText: "me board human local-board", }); expect(parseAssigneeValue(option.id)).toEqual({ assigneeAgentId: null, assigneeUserId: "local-board", }); }); it("treats an empty selection as no assignee", () => { expect(parseAssigneeValue("")).toEqual({ assigneeAgentId: null, assigneeUserId: null, }); }); it("keeps backward compatibility for raw agent ids in saved drafts", () => { expect(parseAssigneeValue("legacy-agent-id")).toEqual({ assigneeAgentId: "legacy-agent-id", assigneeUserId: null, }); }); it("formats current and board user labels consistently", () => { expect(formatAssigneeUserLabel("user-1", "user-1")).toBe("Me"); expect(formatAssigneeUserLabel("local-board", "someone-else")).toBe("Board"); expect(formatAssigneeUserLabel("user-abcdef", "someone-else")).toBe("user-"); }); it("suggests the last non-me commenter without changing the actual assignee encoding", () => { expect( suggestedCommentAssigneeValue( { assigneeUserId: "board-user" }, [ { authorUserId: "board-user" }, { authorAgentId: "agent-123" }, ], "board-user", ), ).toBe("agent:agent-123"); }); it("falls back to the actual assignee when there is no better commenter hint", () => { expect( suggestedCommentAssigneeValue( { assigneeUserId: "board-user" }, [{ authorUserId: "board-user" }], "board-user", ), ).toBe("user:board-user"); }); it("skips the current agent when choosing a suggested commenter assignee", () => { expect( suggestedCommentAssigneeValue( { assigneeUserId: "board-user" }, [ { authorUserId: "board-user" }, { authorAgentId: "agent-self" }, { authorAgentId: "agent-123" }, ], null, "agent-self", ), ).toBe("agent:agent-123"); }); });