import { fireEvent, render, screen, within } from "@testing-library/react"
import { describe, expect, it } from "vitest"
import { ComponentsPreviewPage } from "./components-preview-page"
describe("ComponentsPreviewPage", () => {
it("previews and updates the shared select", async () => {
render()
const select = screen.getByRole("combobox", { name: "信号分类" })
expect(select).toHaveTextContent("全部信号")
fireEvent.click(select)
const option = await screen.findByRole("option", { name: "超卖类" })
fireEvent.pointerDown(option, { pointerType: "mouse" })
fireEvent.click(option)
expect(select).toHaveTextContent("超卖类")
expect(screen.getByRole("status", { name: "当前选择" })).toHaveTextContent(
"当前选择:超卖类",
)
})
it("previews date picker selection and clearing", async () => {
render()
const selectedDatePicker = screen.getByRole("button", {
name: "已选择日期",
})
expect(selectedDatePicker).toHaveTextContent("2026-08-07")
fireEvent.click(selectedDatePicker)
const popover = document.querySelector(
'[data-slot="popover-content"]',
) as HTMLElement
expect(popover).toBeInTheDocument()
const calendar = within(popover).getByRole("grid", { name: /2026年8月/ })
const day = within(calendar).getByRole("button", { name: /2026年8月8日/ })
fireEvent.click(day)
expect(selectedDatePicker).toHaveTextContent("2026-08-08")
fireEvent.click(screen.getByRole("button", { name: "清空已选择日期" }))
expect(selectedDatePicker).toHaveTextContent("选择日期")
})
it("previews popover open and close behavior", async () => {
render()
const trigger = screen.getByRole("button", { name: "打开交互说明" })
expect(trigger).toHaveAttribute("aria-expanded", "false")
fireEvent.click(trigger)
const popup = await screen.findByText("弹层已打开")
expect(popup).toBeInTheDocument()
expect(trigger).toHaveAttribute("aria-expanded", "true")
fireEvent.click(screen.getByRole("button", { name: "关闭弹层" }))
expect(screen.queryByText("弹层已打开")).not.toBeInTheDocument()
expect(trigger).toHaveAttribute("aria-expanded", "false")
})
it("shows disabled and loading states", () => {
render()
expect(screen.getByRole("button", { name: "禁用状态" })).toBeDisabled()
expect(screen.getByRole("button", { name: "禁用日期" })).toBeDisabled()
expect(
screen.getByRole("button", { name: "清空已选择日期" }),
).not.toBeDisabled()
expect(document.querySelectorAll('[data-slot="skeleton"]')).toHaveLength(2)
})
})