Ctrl K
ComunidadGuías…

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

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

Archivo original ↗Preguntar a KiBot
import { expect, story } from "../../stories/playwright/story"

story.use({ viewport: { width: 1000, height: 400 } })

story("fork search anchors filtering and keyboard scrolling", async ({ mount, page }) => {
  await mount("app-dialog-fork-session--default")
  const dialog = page.getByRole("dialog", { name: "Fork from message", exact: true })
  const input = dialog.getByRole("searchbox", { name: "Search", exact: true })
  const container = page.locator('[data-component="dialog-v2"] [data-slot="dialog-container"]')

  const geometry = () =>
    container.evaluate((element) => {
      const field = element.querySelector('input[type="search"]')!.getBoundingClientRect()

      return {
        height: element.getBoundingClientRect().height,
        inputTop: field.top,
        inputBottom: field.bottom,
        instructionTop: element.querySelector('[data-slot="dialog-description"]')!.getBoundingClientRect().top,
      }
    })

  await expect(input).toBeFocused()
  await expect(dialog.getByRole("option")).toHaveCount(8)
  await expect(dialog).toHaveAccessibleDescription("Choose a message to fork from")
  await expect(dialog.getByText("Choose a message to fork from", { exact: true })).toBeVisible()
  await page.evaluate(() => document.fonts.ready.then(() => undefined))
  await input.hover()
  const initial = await geometry()
  expect(initial.instructionTop).toBeGreaterThanOrEqual(initial.inputBottom)

  await input.fill("keyboard navigation")
  await expect(dialog.getByRole("option")).toHaveCount(1)
  await expect.poll(async () => (await geometry()).height).toBeLessThan(initial.height - 100)
  await expect.poll(async () => (await geometry()).inputTop).toBeCloseTo(initial.inputTop, 0)

  await input.clear()
  await expect(dialog.getByRole("option")).toHaveCount(8)
  const scroll = dialog.locator("[data-scrollable]")

  await expect.poll(() => scroll.evaluate((element) => element.scrollHeight - element.clientHeight)).toBeGreaterThan(0)
  await input.press("ArrowUp")

  const oldest = dialog.getByRole("option", {
    name: /^Investigate how the command palette handles keyboard navigation\./,
  })

  await expect(oldest).toHaveAttribute("aria-selected", "true")
  await expect(oldest).toBeInViewport()
  await expect.poll(() => scroll.evaluate((element) => element.scrollTop)).toBeGreaterThan(0)
  await expect.poll(async () => (await geometry()).inputTop).toBeCloseTo(initial.inputTop, 0)
  await expect(input).toBeFocused()
  await input.press("Enter")
  await expect(dialog).toBeHidden()
  await expect(page.getByRole("status")).toHaveText("story-message-0")

  await page.getByRole("button", { name: "Open fork session dialog", exact: true }).click()
  await expect(input).toBeFocused()
  await input.press("Escape")
  await expect(dialog).toBeHidden()
})