import { expect, test } from "../support/browser/strict-browser-test.ts"; import { gotoTechLog, TECH_LOG_PUBLIC_FIXTURE_PATHS, } from "../support/browser/tech-log-fixtures.ts"; for (const path of TECH_LOG_PUBLIC_FIXTURE_PATHS) { test(`renders known Public fixture ${path}`, async ({ page }) => { await gotoTechLog(page, path); await expect(page.locator(".site-frame")).toBeVisible(); await expect(page.getByRole("heading", { level: 1 })).toBeVisible(); await expect(page.getByText("404", { exact: true })).toHaveCount(0); }); } test("search dialog traps focus, closes with Escape, and restores its trigger", async ({ page, }) => { await gotoTechLog(page, "/"); const trigger = page.getByRole("button", { name: "TechLog 검색 열기" }); await trigger.click(); const dialog = page.getByRole("dialog", { name: "TechLog 검색" }); await expect(dialog).toBeVisible(); await expect(dialog.getByRole("searchbox", { name: "검색어" })).toBeFocused(); await page.keyboard.press("Tab"); await page.keyboard.press("Shift+Tab"); await expect(dialog.getByRole("searchbox", { name: "검색어" })).toBeFocused(); await page.keyboard.press("Escape"); await expect(dialog).toBeHidden(); await expect(trigger).toBeFocused(); }); test("search and explore navigation preserve canonical URL state", async ({ page }) => { await gotoTechLog(page, "/explore"); await page.getByLabel("유형").selectOption("CASE"); await page.getByRole("button", { name: "적용" }).click(); await expect(page).toHaveURL(/\/explore\?type=CASE$/); await page.getByRole("button", { name: "TechLog 검색 열기" }).click(); await page.getByRole("searchbox", { name: "검색어" }).fill("JPA"); await page.getByRole("link", { name: /전체 검색 결과 보기/ }).click(); await expect(page).toHaveURL(/\/search\?q=JPA$/); await expect(page.getByRole("heading", { level: 1, name: "검색" })).toBeVisible(); });