packages/app/component-tests/dialog-popups.spec.ts
Rama dev · réplica de lectura del repositorio original.
import type { Page } from "@playwright/test"
import { expect, story } from "../../stories/playwright/story"
// Role queries skip aria-hidden content, so each popup is only found if assistive tech can reach it too. A modal dialog
// hides content added outside it a task and a frame after it mounts, so each check waits that long before looking.
const settled = (page: Page) =>
page.evaluate(
() => new Promise((resolve) => setTimeout(() => requestAnimationFrame(() => requestAnimationFrame(resolve)))),
)
story.beforeEach(async ({ mount, page }) => {
await mount("ui-dialog--with-popups")
await expect(page.getByRole("dialog", { name: "Popups" })).toBeVisible()
})
story("a select opened from a dialog lists its options", async ({ page }) => {
const trigger = page.getByRole("dialog").locator('[data-component="select-v2"]')
await trigger.click()
await expect(page.locator('[data-slot="select-v2-listbox"]')).toBeVisible()
await settled(page)
await expect(page.getByRole("option")).toHaveCount(3)
await page.getByRole("option", { name: "Banana" }).click()
await expect(trigger).toContainText("Banana")
})
story("a non-modal menu and its submenu opened from a dialog list their items", async ({ page }) => {
await page.getByRole("dialog").getByRole("button", { name: "Actions" }).click()
await expect(page.getByText("Rename", { exact: true })).toBeVisible()
await settled(page)
await expect(page.getByRole("menuitem", { name: "Rename" })).toBeVisible()
await page.getByRole("menuitem", { name: "Move to" }).hover()
await expect(page.getByText("Archive", { exact: true })).toBeVisible()
await settled(page)
await expect(page.getByRole("menuitem", { name: "Archive" })).toBeVisible()
})
story("a tooltip opened from a dialog is announced", async ({ page }) => {
await page.getByRole("dialog").getByRole("button", { name: "Copy" }).hover()
await expect(page.getByText("Copy the link")).toBeVisible()
await settled(page)
await expect(page.getByRole("tooltip", { name: "Copy the link" })).toBeVisible()
})
story("a toast shown from a dialog is announced", async ({ page }) => {
await page.getByRole("dialog").getByRole("button", { name: "Save" }).click()
await expect(page.getByText("Saved", { exact: true })).toBeVisible()
await settled(page)
await expect(page.getByRole("listitem").filter({ hasText: "Saved" })).toBeVisible()
})