import { render, screen, waitFor } from "@testing-library/react"; import { userEvent } from "@testing-library/user-event"; import { expect, vi } from "vitest"; import { Tab } from "./Tab.js"; import { TabList } from "./TabList.js"; import { TabPanel } from "./TabPanel.js"; import { Tabs } from "./Tabs.js"; import { TabsBody } from "./TabsBody.js"; const props = { reverse: false, items: [ { action: "edit", exact: true, icon: "edit", label: "Edit", children:
Edit
}, { action: "submissions", exact: false, icon: "data", label: "Data", children:
Data
}, { action: "preview", exact: true, icon: "test-tube", label: "Preview", children:
Preview
}, { action: "actions", exact: false, icon: "paper-plane", label: "Actions", children:
Actions
}, { action: "access", exact: true, icon: "lock", label: "Access", children:
Access
}, { action: "export", exact: true, icon: "download", label: "Export", children:
Export
}, { action: "delete", exact: true, icon: "trash", label: "Delete", roles: ["administrator", "owner"], children:
Trash
} ], onClick: vi.fn() }; function TestComponent({ selected, onClick, reverse, items }: { selected?: number; onClick?: (item: any) => void; reverse?: boolean; items: any[]; }) { return ( {items.map((item, index) => { return ( onClick?.(item)} key={index} icon={item.icon} value={index} className={reverse ? "-reverse" : ""}> {item.label} ); })} {items.map((item, index) => { return ( {item.children} ); })} ); } describe("", () => { it("should display the tabs component and children", async () => { render(); // Vérifie que tous les onglets sont présents expect(screen.getByRole("tab", { name: "Edit" })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: "Data" })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: "Preview" })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: "Actions" })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: "Access" })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: "Export" })).toBeInTheDocument(); expect(screen.getByRole("tab", { name: "Delete" })).toBeInTheDocument(); await waitFor(() => expect(screen.getByRole("tabpanel")).toHaveTextContent("Edit")); // Clique sur l'onglet "Preview" et vérifie le contenu await userEvent.click(screen.getByRole("tab", { name: "Preview" })); expect(props.onClick).toHaveBeenCalledWith( expect.objectContaining({ action: "preview" }) ); await waitFor(() => expect(screen.getByRole("tabpanel")).toHaveTextContent("Preview")); // Clique sur l'onglet "Delete" et vérifie le contenu await userEvent.click(screen.getByRole("tab", { name: "Delete" })); expect(props.onClick).toHaveBeenCalledWith( expect.objectContaining({ action: "delete" }) ); await waitFor(() => expect(screen.getByRole("tabpanel")).toHaveTextContent("Trash")); }); });