Ctrl K
ComunidadGuías…

packages/app/component-tests/line-comment.spec.ts

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

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

story("keeps the comment options button pressed while its menu is open", async ({ mount, page }) => {
  const component = await mount("ui-line-comment--display")
  const trigger = component.locator('[data-slot="line-comment-v2-overflow"]')
  const rest = await trigger.evaluate((element) => getComputedStyle(element).backgroundColor)

  await trigger.click()

  await expect(page.getByRole("menu")).toBeVisible()
  await expect(trigger).toHaveAttribute("data-expanded", "")
  await expect(trigger).not.toHaveCSS("background-color", rest)
})

story("autosizes compact comments without native field-sizing", async ({ mount, page }) => {
  // Mock only availability; disable native sizing so real layout exercises the JS fallback.
  await page.addInitScript(() => {
    const supports = CSS.supports.bind(CSS)

    CSS.supports = (property: string, value?: string) => {
      if (property === "field-sizing") return false

      return value === undefined ? supports(property) : supports(property, value)
    }
  })

  const component = await mount("ui-line-comment--editor", { args: { variant: "compact" } })
  const textarea = component.getByRole("textbox")

  await page.addStyleTag({
    content: '[data-layout="compact"] [data-slot="line-comment-v2-textarea"] { field-sizing: fixed !important; }',
  })
  await page.evaluate(() => document.fonts.ready.then(() => undefined))
  await expect(textarea).toHaveCSS("height", "20px")

  await textarea.fill("First\nSecond\nThird")
  await expect(textarea).toHaveCSS("height", "60px")

  await textarea.clear()
  await expect(textarea).toHaveCSS("height", "20px")

  await textarea.fill(Array.from({ length: 20 }, () => "Line").join("\n"))
  await expect(textarea).toHaveCSS("height", "160px")
  await expect.poll(() => textarea.evaluate((element) => element.scrollHeight > element.clientHeight)).toBe(true)
})

story("Enter on a list whose refined search still runs waits instead of picking a stale row", async ({ mount }) => {
  const component = await mount("ui-line-comment--editor-with-mentions")
  const textarea = component.getByRole("textbox")
  const items = component.locator('[data-slot="line-comment-v2-mention-item"]')
  // From the keyboard, so the pointer does not rest over the list that opens and highlight a row.
  const finish = () => component.getByRole("button", { name: "Finish search", exact: true }).press("Enter")

  await textarea.fill("Check @src")
  await finish()
  await expect(items).toHaveText(["src/app.ts", "src/api.ts", "src/server.ts"])

  await textarea.pressSequentially("/a")
  await textarea.press("Enter")
  await expect(textarea).toHaveValue("Check @src/a")

  await finish()
  await expect(items).toHaveText(["src/app.ts", "src/api.ts"])
  await textarea.press("Enter")
  await expect(textarea).toHaveValue("Check @src/app.ts ")
  await expect(items).toHaveCount(0)
})

story("Enter sends at once while a search runs with no list on screen", async ({ mount }) => {
  const component = await mount("ui-line-comment--editor-with-mentions")
  const textarea = component.getByRole("textbox")

  await textarea.fill("Mail a@b.com")
  await textarea.press("Enter")
  await expect(component.getByRole("status", { name: "Editor result" })).toHaveText("Submitted: Mail a@b.com")
})

story("Escape after a bare @ cancels the comment", async ({ mount }) => {
  const component = await mount("ui-line-comment--editor-with-mentions")
  const textarea = component.getByRole("textbox")

  await textarea.fill("see @")
  await textarea.press("Escape")
  await expect(component.getByRole("status", { name: "Editor result" })).toHaveText("Cancelled")
})

story(
  "Escape in a popover's comment field cancels the comment, and on its buttons closes the popover",
  async ({ mount, page }) => {
    const component = await mount("ui-line-comment--editor-in-popover")
    const popover = component.locator('[data-component="popover-content"]')
    const textarea = popover.getByRole("textbox")

    await component.getByRole("button", { name: "Open editor", exact: true }).click()
    await textarea.fill("Keep this")
    await textarea.press("Escape")
    await expect(component.getByRole("status", { name: "Editor result" })).toHaveText("Cancelled")
    await expect(popover).toBeVisible()

    await popover.getByRole("button", { name: "Cancel", exact: true }).focus()
    await page.keyboard.press("Escape")
    await expect(popover).toHaveCount(0)
  },
)

story("completes compact optional comments with or without text", async ({ mount }) => {
  const component = await mount("ui-line-comment--editor", { args: { variant: "compact", allowEmpty: true } })
  const action = component.getByRole("button", { name: "Comment", exact: true })
  const result = component.getByRole("status", { name: "Editor result" })

  await expect(action).toBeEnabled()
  await action.click()
  await expect(result).toHaveText("Submitted:")

  await component.getByRole("textbox").fill("Keep this passage")
  await action.click()
  await expect(result).toHaveText("Submitted: Keep this passage")
})