import { beforeEach, describe, expect, it, vi } from "vitest"; import { screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import type { MouseEventHandler, ReactNode } from "react"; import type { IssueProperty } from "@multica/core/types"; import { renderWithI18n } from "../../test/i18n"; import { TableColumnPicker } from "./table-view"; const { toggleTableColumn } = vi.hoisted(() => ({ toggleTableColumn: vi.fn(), })); vi.mock("@multica/core/issues/stores/view-store-context", () => ({ useViewStore: (selector: (state: unknown) => unknown) => selector({ tableColumns: [{ key: "title" }], toggleTableColumn, }), })); vi.mock("@multica/ui/components/ui/dropdown-menu", () => ({ DropdownMenu: ({ children }: { children: ReactNode }) => children, DropdownMenuContent: ({ children }: { children: ReactNode }) => (
{children}
), DropdownMenuGroup: ({ children }: { children: ReactNode }) => (
{children}
), DropdownMenuItem: ({ children, disabled, onClick, }: { children: ReactNode; disabled?: boolean; onClick?: MouseEventHandler; }) => ( ), DropdownMenuLabel: ({ children }: { children: ReactNode }) => (
{children}
), DropdownMenuRadioGroup: ({ children }: { children: ReactNode }) => children, DropdownMenuRadioItem: ({ children }: { children: ReactNode }) => (
{children}
), DropdownMenuSeparator: () =>
, DropdownMenuTrigger: ({ render }: { render: ReactNode }) => render, })); const environmentProperty: IssueProperty = { id: "property-environment", workspace_id: "workspace-1", name: "Environment", type: "select", config: { options: [] }, position: 0, archived: false, created_at: "2026-07-15T00:00:00Z", updated_at: "2026-07-15T00:00:00Z", }; function renderPicker() { renderWithI18n( Add column} />, ); } describe("TableColumnPicker", () => { beforeEach(() => { toggleTableColumn.mockClear(); }); it("toggles a system column when its menu item is clicked", async () => { const user = userEvent.setup(); renderPicker(); await user.click(screen.getByRole("button", { name: "Add column" })); await user.click(screen.getByRole("menuitem", { name: "Project" })); expect(toggleTableColumn).toHaveBeenCalledWith("project"); }); it("toggles a custom-property column when its menu item is clicked", async () => { const user = userEvent.setup(); renderPicker(); await user.click(screen.getByRole("button", { name: "Add column" })); await user.click(screen.getByRole("menuitem", { name: "Environment" })); expect(toggleTableColumn).toHaveBeenCalledWith("property:property-environment"); }); });