Mats Bosson 6382a59eaf Combobox, DropdownMenu, ContextMenu, Toast
Combobox: text input + floating listbox with consumer-driven filtering,
  allowCustomValue, and aria-autocomplete support.
DropdownMenu: activation-mode menu with menuitem, menuitemcheckbox,
  menuitemradio roles, keyboard navigation, and typeahead.
ContextMenu: right-click triggered menu with virtual anchor positioning
  at pointer coordinates.
Toast: imperative API (toast(), toast.success/error/dismiss/clear) with
  reactive signal-based store and Toast.Region declarative renderer.
2026-03-29 19:23:33 +07:00

66 lines
1.8 KiB
TypeScript

import { render, screen, waitFor } from "@solidjs/testing-library";
import { afterEach, describe, expect, it } from "vitest";
import { Toast, toast } from "../../../src/components/toast/index";
afterEach(() => {
toast.clear();
});
describe("Toast", () => {
it("region has role=region", () => {
render(() => <Toast.Region />);
expect(screen.getByRole("region")).toBeTruthy();
});
it("region has aria-label", () => {
render(() => <Toast.Region />);
expect(screen.getByRole("region").getAttribute("aria-label")).toBeTruthy();
});
it("toast() adds a toast to the region", () => {
render(() => <Toast.Region />);
toast("Hello world");
expect(screen.getByText("Hello world")).toBeTruthy();
});
it("toast.success() creates a success toast", () => {
render(() => <Toast.Region />);
toast.success("Saved!");
expect(screen.getByText("Saved!")).toBeTruthy();
});
it("toast.error() creates an error toast", () => {
render(() => <Toast.Region />);
toast.error("Failed");
expect(screen.getByText("Failed")).toBeTruthy();
});
it("toast.dismiss() removes a toast", async () => {
render(() => <Toast.Region />);
const id = toast("Dismissable");
expect(screen.getByText("Dismissable")).toBeTruthy();
toast.dismiss(id);
await waitFor(() => expect(screen.queryByText("Dismissable")).toBeNull());
});
it("toast.clear() removes all toasts", async () => {
render(() => <Toast.Region />);
toast("One");
toast("Two");
expect(screen.getByText("One")).toBeTruthy();
expect(screen.getByText("Two")).toBeTruthy();
toast.clear();
await waitFor(() => {
expect(screen.queryByText("One")).toBeNull();
expect(screen.queryByText("Two")).toBeNull();
});
});
it("toast returns an ID", () => {
render(() => <Toast.Region />);
const id = toast("Test");
expect(typeof id).toBe("string");
expect(id.length).toBeGreaterThan(0);
});
});