import { render } from "@testing-library/react"; import { describe, expect, it } from "vitest"; import ColumnGrid from "@/components/ColumnGrid"; // jsdom has no layout engine (offsetHeight/clientWidth are 0) and no ResizeObserver, // both of which ColumnGrid guards for — so these assert render structure, not positioning. interface Item { id: string; } const item = (id: string): Item => ({ id }); const getKey = (i: Item) => i.id; describe("", () => { it("renders one card per item", () => { const { container } = render(
{i.id}
} />, ); expect(container.querySelectorAll('[data-testid="card"]')).toHaveLength(3); }); it("renders the leading node as the first tile, before the items", () => { const { container, getByTestId } = render(
{i.id}
} leading={
} />, ); expect(getByTestId("composer")).toBeInTheDocument(); // The grid is the container's only child; its first wrapper holds the leading node. const grid = container.firstElementChild as HTMLElement; expect(grid.children[0].querySelector('[data-testid="composer"]')).not.toBeNull(); }); it("renders nothing for an empty list", () => { const { container } = render(
} />); expect(container.querySelectorAll('[data-testid="card"]')).toHaveLength(0); }); });