import { composeStories } from "@storybook/react" import { screen, within } from "@testing-library/react" import { userEvent } from "@testing-library/user-event" import React from "react" import { beforeEach, describe, test, vi, expect } from "vitest" import { VirtualizedTable } from ".." import { render } from "../../../tests/render" import * as stories from "./VirtualizedTable.stories" const { Sticky, WithSortableHeaders, Interactive } = composeStories(stories) describe("", () => { beforeEach(() => { window.scrollTo = vi.fn().mockImplementation(() => undefined) }) test("is accessible", async () => { render() expect(screen.getByRole("columnheader", { name: "Row #" })).toBeVisible() expect(screen.getByRole("columnheader", { name: "Primary" })).toBeVisible() expect( screen.getByRole("columnheader", { name: "Secondary" }), ).toBeVisible() expect(screen.getByRole("columnheader", { name: "Tertiary" })).toBeVisible() expect( screen.getByRole("columnheader", { name: "Quaternary" }), ).toBeVisible() expect( within(screen.getAllByRole("row")[1]).getAllByRole("cell"), ).toHaveLength(5) }) test("", async () => { render() await userEvent.click(screen.getByText("Row #")) const rows = screen.getAllByRole("row").slice(1) for (let i = 1; i < rows.length; i++) { const row = rows[i] expect( +(within(row).getAllByRole("cell")[0].textContent || 0), ).toBeLessThanOrEqual( +(within(rows[i - 1]).getAllByRole("cell")[0].textContent || 0), ) } }) test("", async () => { const onRowClick = vi.fn() render() const rows = screen.getAllByRole("row") await userEvent.click(rows[2].firstChild as HTMLElement) expect(onRowClick).toHaveBeenCalledTimes(1) }) test("Context propagation", () => { render( item?.id} items={[{ id: "123" }]} renderRow={({ context }) => <>{JSON.stringify(context)}} />, ) expect(screen.getByText('{"key":"value"}')).toBeInTheDocument() }) })