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"));
});
});