import { test, expect } from "@playwright/test" import { certificateRoutes, openIssue } from "./fixtures/certificate-issue" import { certificate, certificateState } from "./fixtures/certificates" for (const [name, width] of [["desktop", 1440], ["mobile", 390], ["narrow", 320]] as const) test("Сертификаты: клавиатура и адаптивность " + name, async ({ page }, info) => { await page.setViewportSize({ width, height: 900 }); await certificateRoutes(page) const long = { ...certificate, name: "certificate-with-a-very-long-name-for-narrow-screens", commonName: "very-long-subdomain-for-responsive-layout.example.test", sans: ["very-long-alternative-domain-for-responsive-layout.example.test"] } await page.route("**/api/certificates/state", r => r.fulfill({ json: certificateState([long]) })) await page.goto("/certificates"); await expect(page.getByText(long.name, { exact: true })).toBeVisible() const summary = page.getByLabel("Сводка сертификатов", { exact: true }); await expect(summary).toContainText("1") expect(await page.evaluate(() => document.documentElement.scrollWidth <= window.innerWidth + 1)).toBe(true) const detail = page.getByRole("button", { name: "Детали сертификата " + long.name, exact: true }); await detail.focus(); await page.keyboard.press("Enter") await expect(detail).toHaveAttribute("aria-expanded", "true"); await expect(page.getByText("Доверие", { exact: true })).toBeVisible() await page.screenshot({ path: info.outputPath("certificates-details-" + name + ".png"), fullPage: true }) await page.evaluate(() => { for (const element of document.querySelectorAll("*")) if (element.scrollTop > 0) element.scrollTop = 0 }) await page.screenshot({ path: info.outputPath("certificates-overview-" + name + ".png"), fullPage: true }) await page.keyboard.press("Enter"); await expect(detail).toHaveAttribute("aria-expanded", "false") const search = page.getByRole("textbox", { name: "Поиск по имени, CN, эмитенту…" }); await search.fill("нет-совпадений"); await expect(page.getByText("Нет совпадений", { exact: true })).toBeVisible(); await search.fill("") const dialog = await openIssue(page) await expect.poll(async () => { const box = await dialog.boundingBox(); return !!box && box.x >= 0 && box.x + box.width <= width + 1 && (width >= 640 || box.width >= width - 2) }).toBe(true) expect(await dialog.evaluate(element => element.scrollWidth <= element.clientWidth + 1)).toBe(true) await page.screenshot({ path: info.outputPath("certificates-issue-" + name + ".png"), fullPage: true }) await page.keyboard.press("Escape"); await expect(dialog).toHaveCount(0) await expect(page.getByRole("button", { name: "Выпустить сертификат", exact: true })).toBeFocused() })