import { expect, test } from "../fixtures"; import { closeMobileSidebar, showResearch } from "../workspace"; test("keeps the sidebar, composer and deck reachable at compact widths", async ({ page, a11y, }, testInfo) => { await page.goto("/deck"); for (const width of [320, 375, 414, 768]) { await page.setViewportSize({ width, height: 850 }); await showResearch(page); const chat = page.getByRole("complementary", { name: "Research chat" }); await expect(chat).toBeVisible(); const composer = chat.getByRole("textbox", { name: "Message", exact: true, }); await expect(composer).toBeVisible(); const bounds = await composer.boundingBox(); if (!bounds) throw new Error("Composer must have a visible bounding box"); expect(bounds.x).toBeGreaterThanOrEqual(0); expect(bounds.x + bounds.width).toBeLessThanOrEqual(width); expect(bounds.y + bounds.height).toBeLessThanOrEqual(850); expect(await page.evaluate(() => document.documentElement.scrollWidth)).toBe(width); await page.screenshot({ path: testInfo.outputPath(`workspace-${width}.png`), }); if (width === 320) expect((await a11y().analyze()).violations).toEqual([]); await closeMobileSidebar(page); } await page.getByRole("button", { name: "Toggle sidebar" }).click(); await expect(page.getByRole("complementary", { name: "Research chat" })).toBeHidden(); await page.getByRole("button", { name: "Research chat", exact: true }).click(); await expect(page.getByRole("complementary", { name: "Research chat" })).toBeVisible(); });