import { expect, test } from "@playwright/test"; import { login } from "./hub.ts"; // копия вики проекта AWPCA засеяна scripts/seed-hub.py: корень и две страницы (одна с вложением) test("вики: дерево, страница, поиск", async ({ page }) => { await login(page, "/app/wiki?project=AWPCA"); const tree = page.getByRole("tree", { name: "Страницы вики" }); await expect(tree.getByRole("treeitem")).toHaveCount(3); await tree.getByRole("treeitem", { name: "Регламент согласования" }).click(); await expect(page).toHaveURL(/page=DOC-9003/); const article = page.getByRole("article"); await expect(article.getByRole("heading", { name: "Регламент согласования" })).toBeVisible(); await expect(article.getByRole("button", { name: /схема\.txt/ })).toBeVisible(); // ссылка на другую страницу вики меняет адрес и выделенный узел await article.getByRole("link", { name: "К модели" }).click(); await expect(page).toHaveURL(/page=DOC-9002/); await expect(tree.getByRole("treeitem", { name: "Модель данных" })).toHaveAttribute("aria-selected", "true"); await expect(page.getByRole("article").locator("table")).toBeVisible(); await page.getByRole("searchbox", { name: "Поиск по вики" }).fill("согласов"); await expect(tree).toHaveCount(0); await expect(page.getByRole("list", { name: "Результаты поиска" }).getByRole("link")).not.toHaveCount(0); await page.getByRole("list", { name: "Результаты поиска" }).getByRole("link", { name: /Регламент согласования/ }).click(); await expect(page).toHaveURL(/page=DOC-9003/); }); test("вики: вложение скачивается через запрос к агенту", async ({ page }) => { await login(page, "/app/wiki?project=AWPCA&page=DOC-9003"); const req = page.waitForRequest((r) => r.method() === "POST" && /\/wiki\/attachments\/\d+\/fetch$/.test(r.url())); await page.getByRole("article").getByRole("button", { name: /схема\.txt/ }).click(); await req; // агента в тестовом хабе нет: скачивание остаётся «Загружается…», достаточно, что запрос ушёл await expect(page.getByRole("article").getByText("Загружается…")).toBeVisible(); }); // две правки DOC-9003 засеяны seed-hub.py (сегодня, автор Дмитрий Соснов): новая «+1 / −1», старая «+5 / −0» test("правка из ленты: окно с диффом, «Предыдущая правка», назад — лента", async ({ page }) => { await login(page, "/app/feed?project=AWPCA&period=7d&sources=wiki"); const feed = page.getByTestId("page-feed"); await feed.getByRole("link", { name: /\+1 \/ −1/ }).click(); const d = page.getByRole("dialog"); await expect(d.getByRole("heading", { name: "Регламент согласования" })).toBeVisible(); await expect(d.getByText("правка 2 из 2")).toBeVisible(); await expect(d.locator(".wiki-version-line--add").first()).toBeVisible(); await expect(d.locator(".wiki-version-line--del").first()).toBeVisible(); await expect(feed).toBeVisible(); // лента под окном await d.getByRole("button", { name: "Предыдущая правка" }).click(); await expect(d.getByText("правка 1 из 2")).toBeVisible(); await expect(d.getByRole("button", { name: "Предыдущая правка" })).toBeDisabled(); await page.goBack(); await expect(page.getByRole("dialog")).toHaveCount(0); await expect(page).toHaveURL(/\/app\/feed\?project=AWPCA&period=7d&sources=wiki/); }); test("окно правки на 390 px: горизонтальной прокрутки страницы нет", async ({ page }) => { await page.setViewportSize({ width: 390, height: 800 }); await login(page, "/app/feed?project=AWPCA&period=7d&sources=wiki"); await page.getByTestId("page-feed").getByRole("link", { name: /\+5 \/ −0/ }).click(); await expect(page.getByRole("dialog").locator(".wiki-version-line--add").first()).toBeVisible(); const fits = await page.evaluate(() => document.documentElement.scrollWidth <= document.documentElement.clientWidth); expect(fits).toBe(true); });