82 lines
5.3 KiB
TypeScript
82 lines
5.3 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
||
import { login } from "./hub.ts";
|
||
|
||
// экраны доски: «Бэклог», «Спринт», «Kanban» (spec web-app «Спринты и бэклог»); данные — сид тестового хаба (R-27)
|
||
const side = (page: import("@playwright/test").Page) => page.getByRole("complementary", { name: "Панель приложения" });
|
||
|
||
test("«Бэклог» AWPCA: секции, «Прошлые спринты (1)», щелчок открывает карточку", async ({ page }) => {
|
||
await login(page, "/app/jira/backlog?project=AWPCA");
|
||
await expect(page.getByRole("heading", { name: "AWPCA_Спринт 2" })).toBeVisible();
|
||
await expect(page.getByRole("heading", { name: "AWPCA_Спринт 3" })).toBeVisible();
|
||
await expect(page.getByRole("heading", { name: "Бэклог", exact: true, level: 2 })).toBeVisible();
|
||
const past = page.getByText("Прошлые спринты (1)");
|
||
await expect(past).toBeVisible();
|
||
await past.click();
|
||
await page.getByText("AWPCA_Спринт 1").first().click();
|
||
const row = page.locator(".agile-row").filter({ hasText: "AURORA-9001" }).last();
|
||
await expect(row).toBeVisible();
|
||
await row.click();
|
||
await expect(page).toHaveURL(/\/app\/jira\/issues\/AURORA-9001/);
|
||
await expect(page.getByRole("dialog")).toBeVisible();
|
||
await page.keyboard.press("Escape");
|
||
await expect(page).toHaveURL(/\/app\/jira\/backlog/);
|
||
await expect(page.getByRole("dialog")).toHaveCount(0);
|
||
});
|
||
|
||
test("«Спринт» AWPCA: колонки доски, «осталось 7 дн.», карточка окном", async ({ page }) => {
|
||
await login(page, "/app/jira/sprint?project=AWPCA");
|
||
await expect(page.getByRole("heading", { name: "AWPCA_Спринт 2" })).toBeVisible();
|
||
await expect(page.getByText("осталось 7 дн.")).toBeVisible();
|
||
for (const name of ["К выполнению", "В работе", "Готово"]) {
|
||
await expect(page.locator(".agile-col__name", { hasText: name })).toBeVisible();
|
||
}
|
||
await page.locator(".agile-card").filter({ hasText: "AURORA-9001" }).click();
|
||
await expect(page).toHaveURL(/\/app\/jira\/issues\/AURORA-9001/);
|
||
await expect(page.getByRole("dialog")).toBeVisible();
|
||
await page.keyboard.press("Escape");
|
||
await expect(page).toHaveURL(/\/app\/jira\/sprint/);
|
||
});
|
||
|
||
test("«Kanban»: «Бэклог (1)», колонки «В работе» и «Готово», подпись «за 14 дней»", async ({ page }) => {
|
||
await login(page, "/app/jira/kanban?project=KANBAN_E2E");
|
||
await expect(page.getByText("Бэклог (1)")).toBeVisible();
|
||
await expect(page.locator(".agile-col__name", { hasText: "В работе" })).toBeVisible();
|
||
await expect(page.locator(".agile-col__name", { hasText: "Готово" })).toBeVisible();
|
||
await expect(page.locator(".agile-col__name", { hasText: "Бэклог" })).toHaveCount(0);
|
||
await expect(page.getByText("за 14 дней")).toBeVisible();
|
||
await expect(page.locator(".agile-card").filter({ hasText: "AURORA-9102" })).toBeVisible();
|
||
await expect(page.locator(".agile-card").filter({ hasText: "AURORA-9103" })).toBeVisible();
|
||
});
|
||
|
||
test("без scrum-доски: /app/jira/backlog?project=KANBAN_E2E — «У проекта нет scrum-доски», ссылка «Связи»", async ({ page }) => {
|
||
await login(page, "/app/jira/backlog?project=KANBAN_E2E");
|
||
await expect(page.getByText("У проекта нет scrum-доски")).toBeVisible();
|
||
await page.getByRole("link", { name: "Связи", exact: true }).last().click();
|
||
await expect(page).toHaveURL(/\/app\/jira\/links\?project=KANBAN_E2E/);
|
||
});
|
||
|
||
test("меню по проекту: у AWPCA «Бэклог» и «Спринт», у KANBAN_E2E — «Kanban»", async ({ page }) => {
|
||
await login(page, "/app/jira/links?project=AWPCA");
|
||
await expect(side(page).getByRole("link", { name: "Бэклог" })).toBeVisible();
|
||
await expect(side(page).getByRole("link", { name: "Спринт" })).toBeVisible();
|
||
await expect(side(page).getByRole("link", { name: "Kanban" })).toHaveCount(0);
|
||
await page.goto("/app/jira/links?project=KANBAN_E2E");
|
||
await expect(side(page).getByRole("link", { name: "Kanban" })).toBeVisible();
|
||
await expect(side(page).getByRole("link", { name: "Бэклог" })).toHaveCount(0);
|
||
await expect(side(page).getByRole("link", { name: "Спринт" })).toHaveCount(0);
|
||
});
|
||
|
||
test("900 px: колонки «Спринта» прокручиваются внутри доски, страница без горизонтальной прокрутки", async ({ page }) => {
|
||
await page.setViewportSize({ width: 900, height: 900 });
|
||
await login(page, "/app/jira/sprint?project=AWPCA");
|
||
await expect(page.locator(".agile-col").first()).toBeVisible();
|
||
const m = await page.evaluate(() => {
|
||
const d = document.documentElement, c = document.querySelector<HTMLElement>(".agile-columns")!;
|
||
return { doc: [d.scrollWidth, d.clientWidth], cols: [c.scrollWidth, c.clientWidth],
|
||
gutter: c.getBoundingClientRect().left - document.querySelector(".agile")!.getBoundingClientRect().left };
|
||
});
|
||
expect(m.gutter, "колонки не получают второй отступ внутри страницы (T10.1)").toBe(0);
|
||
expect(m.doc[0]).toBeLessThanOrEqual(m.doc[1]);
|
||
expect(m.cols[0]).toBeGreaterThan(m.cols[1]);
|
||
});
|