mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-14 18:01:06 +00:00
131 lines
4.1 KiB
TypeScript
131 lines
4.1 KiB
TypeScript
import { render, screen } from "@testing-library/svelte";
|
|
import { user } from "../setup-tests";
|
|
import StructuredList from "./StructuredList.test.svelte";
|
|
import StructuredListCustom from "./StructuredListCustom.test.svelte";
|
|
|
|
describe("StructuredList", () => {
|
|
it("should render with default props", () => {
|
|
render(StructuredList);
|
|
|
|
const list = screen.getByRole("table");
|
|
expect(list).toBeInTheDocument();
|
|
expect(list).toHaveClass("bx--structured-list");
|
|
|
|
// Check header cells
|
|
const headerCells = screen.getAllByRole("columnheader");
|
|
expect(headerCells).toHaveLength(3);
|
|
expect(headerCells[0]).toHaveTextContent("Column A");
|
|
expect(headerCells[1]).toHaveTextContent("Column B");
|
|
expect(headerCells[2]).toHaveTextContent("Column C");
|
|
|
|
// Check body cells
|
|
const cells = screen.getAllByRole("cell");
|
|
expect(cells).toHaveLength(9); // 3 rows x 3 columns
|
|
expect(cells[0]).toHaveTextContent("Row 1");
|
|
expect(cells[1]).toHaveTextContent("Row 1");
|
|
expect(cells[2]).toHaveTextContent("Content 1");
|
|
});
|
|
|
|
it("should handle condensed variant", () => {
|
|
render(StructuredList, { props: { condensed: true } });
|
|
|
|
expect(screen.getByRole("table")).toHaveClass(
|
|
"bx--structured-list--condensed",
|
|
);
|
|
});
|
|
|
|
it("should handle flush variant", () => {
|
|
render(StructuredList, { props: { flush: true } });
|
|
|
|
expect(screen.getByRole("table")).toHaveClass("bx--structured-list--flush");
|
|
});
|
|
|
|
it("should handle selection variant", () => {
|
|
render(StructuredList, { props: { selection: true } });
|
|
|
|
const list = screen.getByRole("table");
|
|
expect(list).toHaveClass("bx--structured-list--selection");
|
|
|
|
const inputs = screen.getAllByRole("radio");
|
|
expect(inputs).toHaveLength(3);
|
|
|
|
const checkmarks = screen.getAllByTitle("select an option");
|
|
expect(checkmarks).toHaveLength(3);
|
|
});
|
|
|
|
it("should handle selected state", async () => {
|
|
render(StructuredList, {
|
|
props: { selection: true, selected: "row-1-value" },
|
|
});
|
|
|
|
const selectedInput = screen.getByRole("radio", { checked: true });
|
|
expect(selectedInput.closest("label")).toHaveTextContent("Row 1");
|
|
|
|
await user.click(screen.getAllByRole("radio")[1]);
|
|
expect(
|
|
screen.getByRole("radio", { checked: true }).closest("label"),
|
|
).toHaveTextContent("Row 2");
|
|
});
|
|
|
|
it("should handle selection change", async () => {
|
|
render(StructuredList, { props: { selection: true } });
|
|
|
|
const secondInput = screen.getAllByRole("radio")[1];
|
|
await user.click(secondInput);
|
|
|
|
expect(screen.getByTestId("value").textContent).toBe("row-2-value");
|
|
});
|
|
|
|
it("should handle custom content", () => {
|
|
render(StructuredListCustom);
|
|
|
|
expect(screen.getByTestId("custom-header")).toHaveTextContent(
|
|
"Custom Header",
|
|
);
|
|
expect(screen.getByTestId("custom-content")).toHaveTextContent(
|
|
"Custom Content",
|
|
);
|
|
});
|
|
|
|
it("should handle mouse events", async () => {
|
|
const consoleLog = vi.spyOn(console, "log");
|
|
render(StructuredList);
|
|
|
|
const list = screen.getByRole("table");
|
|
|
|
await user.click(list);
|
|
expect(consoleLog).toHaveBeenCalledWith("click");
|
|
await user.hover(list);
|
|
expect(consoleLog).toHaveBeenCalledWith("mouseover");
|
|
await user.unhover(list);
|
|
expect(consoleLog).toHaveBeenCalledWith("mouseleave");
|
|
});
|
|
|
|
it("should handle noWrap cells", () => {
|
|
render(StructuredList);
|
|
|
|
const noWrapCells = screen
|
|
.getAllByRole("cell")
|
|
.filter(
|
|
(cell) =>
|
|
cell.textContent?.startsWith("Row") && cell.textContent?.length === 5,
|
|
);
|
|
|
|
noWrapCells.forEach((cell) => {
|
|
expect(cell).toHaveClass("bx--structured-list-td");
|
|
});
|
|
});
|
|
|
|
it("should emit change event on selection", async () => {
|
|
const consoleLog = vi.spyOn(console, "log");
|
|
render(StructuredList, { props: { selection: true } });
|
|
|
|
expect(consoleLog).not.toHaveBeenCalled();
|
|
|
|
await user.click(screen.getAllByRole("radio")[1]);
|
|
expect(consoleLog).toHaveBeenCalledWith("change", "row-2-value");
|
|
|
|
await user.click(screen.getAllByRole("radio")[0]);
|
|
expect(consoleLog).toHaveBeenCalledWith("change", "row-1-value");
|
|
});
|
|
});
|