import { render, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { useState } from "react"; import { describe, expect, it } from "vitest"; import { Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport } from "./toast"; function StatefulToast() { const [open, setOpen] = useState(true); return ( Saved Launch details were updated. Undo ); } describe("Toast", () => { it("renders viewport, title, description, action, and variant hooks", () => { render( Delete failed Try again in a moment. Retry ); expect(screen.getByText("Delete failed").closest('[data-slot="label"]')).toBeInTheDocument(); expect(screen.getByText("Try again in a moment.").closest('[data-slot="description"]')).toBeInTheDocument(); expect(screen.getByRole("button", { name: "Retry" })).toHaveAttribute("data-slot", "action"); expect(document.querySelector('[data-slot="root"]')).toHaveAttribute("data-variant", "destructive"); expect(document.querySelector('[data-slot="viewport"]')).toBeInTheDocument(); }); it("closes through the close control", async () => { const user = userEvent.setup(); render(); expect(screen.getByText("Saved")).toBeInTheDocument(); const closeButton = document.querySelector('[data-slot="close"]'); expect(closeButton).toBeInstanceOf(HTMLButtonElement); await user.click(closeButton as HTMLButtonElement); await waitFor(() => { expect(screen.queryByText("Saved")).not.toBeInTheDocument(); }); }); });