Ctrl K
ComunidadGuías…

packages/app/component-tests/dialog-popups.spec.ts

Rama dev · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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()
})