sdlc-hub/web/e2e/agile.spec.ts
2026-10-24 20:28:48 +04:00

82 lines
5.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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]);
});