64 lines
4.4 KiB
TypeScript
64 lines
4.4 KiB
TypeScript
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);
|
||
});
|