mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-06-21 03:54:14 -05:00
62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
import { describe, expect, test } from "vitest";
|
|
import { render } from "vitest-browser-react";
|
|
import {
|
|
SendouSelect,
|
|
SendouSelectItem,
|
|
SendouSelectItemSection,
|
|
} from "./Select";
|
|
|
|
const SECTIONS = [
|
|
{
|
|
heading: "2023",
|
|
key: "2023",
|
|
items: [
|
|
{ id: 2, name: "Season 2" },
|
|
{ id: 1, name: "Season 1" },
|
|
{ id: 0, name: "Season 0" },
|
|
],
|
|
},
|
|
];
|
|
|
|
function GroupedSelect(props: { search?: { placeholder?: string } }) {
|
|
return (
|
|
<SendouSelect label="Season" items={SECTIONS} search={props.search}>
|
|
{({ heading, items, key }: (typeof SECTIONS)[number]) => (
|
|
<SendouSelectItemSection heading={heading} key={key}>
|
|
{items.map((item) => (
|
|
<SendouSelectItem key={item.id} id={item.id}>
|
|
{item.name}
|
|
</SendouSelectItem>
|
|
))}
|
|
</SendouSelectItemSection>
|
|
)}
|
|
</SendouSelect>
|
|
);
|
|
}
|
|
|
|
describe("SendouSelect", () => {
|
|
test("renders an item with a falsy (0) key when there is no search", async () => {
|
|
const screen = await render(<GroupedSelect />);
|
|
|
|
await screen.getByRole("button").click();
|
|
|
|
await expect
|
|
.element(screen.getByRole("option", { name: "Season 0" }))
|
|
.toBeVisible();
|
|
});
|
|
|
|
test("filters items when search is enabled", async () => {
|
|
const screen = await render(<GroupedSelect search={{}} />);
|
|
|
|
await screen.getByRole("button").click();
|
|
await screen.getByRole("searchbox").fill("Season 1");
|
|
|
|
await expect
|
|
.element(screen.getByRole("option", { name: "Season 1" }))
|
|
.toBeVisible();
|
|
await expect
|
|
.element(screen.getByRole("option", { name: "Season 2" }))
|
|
.not.toBeInTheDocument();
|
|
});
|
|
});
|