Spaces:
Paused
Paused
| 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"); | |
| }); | |
| }); | |