Ctrl K
ComunidadGuías…

packages/app/component-tests/websearch.spec.ts

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

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

story("enables Any only after confirmation and supports resetting the preview", async ({ mount }) => {
  const component = await mount("app-current-session-surface--web-search-request")
  const card = component.getByRole("region", { name: "Third-party web search" })
  await expect(card.getByRole("button", { name: "Enable", exact: true })).toBeEnabled()
  await expect(card.getByRole("button", { name: "Search provider Any", exact: true })).toBeVisible()
  await card.getByRole("button", { name: "Enable", exact: true }).click()
  await expect(component.getByRole("status")).toHaveText("Web search selection (local only): random")
  await expect(card).toHaveCount(0)
  await component.getByRole("button", { name: "Reset", exact: true }).click()
  await expect(card.getByRole("button", { name: "Enable", exact: true })).toBeEnabled()
})

story("declining search is an explicit disabled selection", async ({ mount }) => {
  const component = await mount("app-current-session-surface--web-search-request")
  const card = component.getByRole("region", { name: "Third-party web search" })
  await card.getByRole("button", { name: "Don’t use search", exact: true }).click()
  await expect(component.getByRole("status")).toHaveText("Web search selection (local only): false")
  await expect(card).toHaveCount(0)
})

story("sizes provider options to their content", async ({ mount, page }) => {
  const component = await mount("app-current-session-surface--web-search-request")
  await component.getByRole("button", { name: "Search provider Any", exact: true }).click()
  const menu = page.getByRole("listbox", { name: "Search provider", exact: true })
  await expect(menu).toBeVisible()

  const metrics = await menu.evaluate((listbox) => {
    const items = Array.from(listbox.querySelectorAll('[data-component="menu-v2-item"]'))

    const longest = items
      .flatMap((item) => {
        const label = item.querySelector('[data-slot="menu-v2-item-content"]')?.getBoundingClientRect()
        const check = item.querySelector('[data-slot="menu-v2-item-indicator"]')?.getBoundingClientRect()

        return label && check ? [{ label, check }] : []
      })
      .toSorted((a, b) => b.label.width - a.label.width)[0]

    return {
      width: listbox.getBoundingClientRect().width,
      gap: longest ? longest.check.left - longest.label.right : 0,
    }
  })

  expect(metrics.width).toBeLessThan(160)
  expect(metrics.gap).toBe(24)
})

for (const width of [360, 1200]) {
  for (const direction of ["ltr", "rtl"]) {
    for (const theme of ["light", "dark"]) {
      story(`selects and confirms a provider at ${width}px in ${direction} ${theme}`, async ({ mount, page }) => {
        await page.setViewportSize({ width, height: 900 })

        const component = await mount("app-current-session-surface--web-search-request", {
          globals: { theme, direction },
        })

        const card = component.getByRole("region", { name: "Third-party web search" })
        const select = card.getByRole("button", { name: /^Search provider/ })
        await expect(select).toBeEnabled()
        await expect(card).toHaveCSS("direction", direction)
        expect(await card.evaluate((node) => node.scrollWidth <= node.clientWidth)).toBe(true)
        await select.focus()
        await select.press("Enter")
        const list = page.getByRole("listbox", { name: "Search provider", exact: true })
        await expect(list).toHaveCSS("direction", direction)
        await list.getByRole("option", { name: "Parallel", exact: true }).click()
        await expect(select).toHaveText("Parallel")
        await expect(card).toBeVisible()
        await expect(component.getByRole("status")).toHaveText("Ready")
        await expect(select).toBeFocused()
        await select.press("Tab")
        await expect(card.getByRole("button", { name: "Don’t use search", exact: true })).toBeFocused()
        await page.keyboard.press("Tab")
        const enable = card.getByRole("button", { name: "Enable", exact: true })
        await expect(enable).toBeFocused()
        await enable.press("Enter")
        await expect(component.getByRole("status")).toHaveText("Web search selection (local only): parallel")
        await expect(card).toHaveCount(0)
      })
    }
  }
}