import { cleanup, fireEvent, render, screen } from "@testing-library/react"; import { afterEach, describe, expect, it, vi } from "vitest"; import { IntegrationStartTaskMenu } from "./integration-start-task-menu"; import type { IntegrationPresetIconName } from "./integration-preset-icons"; afterEach(cleanup); function TestIcon({ className }: { className?: string }) { return icon; } describe("IntegrationStartTaskMenu", () => { it.each([ ["eye", "tabler-icon-eye"], ["message", "tabler-icon-message-dots"], ["tool", "tabler-icon-tool"], ])("maps the semantic %s icon to the native Tabler glyph", async (iconName, className) => { render( , ); fireEvent.pointerDown(screen.getByRole("button", { name: "Task" }), { button: 0, ctrlKey: false, }); const item = await screen.findByTestId("semantic-preset"); expect(item.querySelector(`.${className}`)).not.toBeNull(); }); it("uses touch-sized controls and returns the selected preset", async () => { const onSelect = vi.fn(); render( , ); const trigger = screen.getByTestId("change-task-trigger"); expect(trigger.className).toContain("h-11"); fireEvent.pointerDown(trigger, { button: 0, ctrlKey: false }); const item = await screen.findByTestId("change-task-preset"); expect(item.className).toContain("min-h-11"); fireEvent.click(item); expect(onSelect).toHaveBeenCalledWith(expect.objectContaining({ id: "review" })); }); it("renders nothing without presets", () => { const { container } = render(); expect(container.childElementCount).toBe(0); }); });