import { describe, test, expect, vi } from "vitest"; import { fireEvent, render, screen } from "@testing-library/react"; import { ChipGroupField } from "."; import { Chip } from "@components/Chips/Chip"; import { Label } from "../Atoms/Label"; describe("ChipGroupField", () => { const chips = [ { id: "1", rendered: "Chip 1" }, { id: "2", rendered: "Chip 2" }, { id: "3", rendered: "Chip 3" }, ]; test("matches snapshot", () => { const result = render( Item 1 Item 2 Item 3 ); expect(result.asFragment()).toMatchSnapshot(); }); test("renders label", () => { render( Item 1 Item 2 Item 3 ); expect(screen.getByLabelText("My Chip Group")).not.toBeNull(); }); test("renders chips", () => { render( {({ rendered }) => {rendered}} ); chips.forEach((chip) => { expect(screen.getByText(chip.rendered)).not.toBeNull(); }); }); test("onRemove", () => { const onRemove = vi.fn(); render( {({ rendered }) => {rendered}} ); const buttons = screen.getAllByRole("button"); expect(buttons.length).toEqual(3); const button = buttons[0]; fireEvent.click(button); expect(onRemove).toHaveBeenCalledOnce(); expect(onRemove).toHaveBeenCalledWith(new Set(["1"])); }); test("selection", () => { const onSelectionChange = vi.fn(); render( {({ rendered }) => {rendered}} ); const rows = screen.getAllByRole("row"); rows.forEach((row, index) => { fireEvent.focus(row); fireEvent.keyDown(row, { key: "Enter", code: "Enter", charCode: 13 }); expect(onSelectionChange).toHaveBeenCalledTimes(index + 1); }); }); test("disabledKeys", () => { render( {({ rendered }) => {rendered}} ); const rows = screen.getAllByRole("row"); rows.forEach((row, index) => { if (index > 3) { expect(row.dataset["aria-disabled"]).toEqual("true"); } else { expect(row.dataset["aria-disabled"]).toBeUndefined(); } }); }); });