Незакоммиченная работа: UI заявок/планирования и правки сервисов
- pcp-tgu-ops-ui: вкладка «Заявки», редактор планирования, утилиты uuid и e2e-verify скрипты, обновление зависимостей - pcp-ballistics-service, pcp-mission-planing-service: текущие правки
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
// Проверка keep-alive: состояние вкладок не сбрасывается при переключении.
|
||||
import { chromium } from "playwright";
|
||||
|
||||
const BASE = "http://localhost:5174/";
|
||||
const results = [];
|
||||
const pass = (n, d = "") => { results.push(["PASS", n, d]); console.log("PASS ::", n, d); };
|
||||
const fail = (n, d = "") => { results.push(["FAIL", n, d]); console.log("FAIL ::", n, d); };
|
||||
|
||||
const b = await chromium.launch({ headless: true });
|
||||
const ctx = await b.newContext({ viewport: { width: 1600, height: 900 } });
|
||||
const p = await ctx.newPage();
|
||||
const consoleErrors = [];
|
||||
p.on("console", (m) => { if (m.type() === "error") consoleErrors.push(m.text()); });
|
||||
p.on("pageerror", (e) => consoleErrors.push("PAGEERROR: " + e.message));
|
||||
|
||||
const tab = (name) => p.getByRole("tab", { name, exact: true });
|
||||
// только видимая (активная) вкладка — карта присутствует и в Заявках (рисование полигона)
|
||||
const mapToggle = (label) => p.locator(".tgu-map-toolbar__toggles button:visible", { hasText: label });
|
||||
const isActive = async (loc) => ((await loc.getAttribute("class")) || "").includes("is-active");
|
||||
|
||||
try {
|
||||
await p.goto(BASE, { waitUntil: "networkidle", timeout: 30000 });
|
||||
await p.waitForTimeout(600);
|
||||
|
||||
// --- Карта: меняем UI-состояние (выключаем слой «Станции») ---
|
||||
await tab("Карта").click();
|
||||
await p.waitForTimeout(500);
|
||||
const stationsToggle = mapToggle("Станции");
|
||||
(await isActive(stationsToggle)) ? pass("map:stations-on-initially") : fail("map:stations-on-initially");
|
||||
await stationsToggle.click();
|
||||
await p.waitForTimeout(150);
|
||||
(await isActive(stationsToggle)) === false
|
||||
? pass("map:stations-toggled-off")
|
||||
: fail("map:stations-toggled-off");
|
||||
|
||||
// --- Заявки: открываем форму создания (внутреннее состояние panelMode) ---
|
||||
await tab("Заявки").click();
|
||||
await p.waitForTimeout(400);
|
||||
await p.getByRole("button", { name: "+ Создать заявку", exact: true }).click();
|
||||
await p.waitForTimeout(250);
|
||||
(await p.locator(".tgu-requests-form").count()) > 0
|
||||
? pass("requests:create-form-open")
|
||||
: fail("requests:create-form-open");
|
||||
|
||||
// --- уходим на Планы и возвращаемся ---
|
||||
await tab("Планы").click();
|
||||
await p.waitForTimeout(300);
|
||||
|
||||
// Карта: слой «Станции» по-прежнему выключен?
|
||||
await tab("Карта").click();
|
||||
await p.waitForTimeout(400);
|
||||
(await isActive(mapToggle("Станции"))) === false
|
||||
? pass("map:state-preserved", "слой «Станции» остался выключен")
|
||||
: fail("map:state-preserved", "состояние слоёв сбросилось");
|
||||
|
||||
// Заявки: форма создания всё ещё открыта?
|
||||
await tab("Заявки").click();
|
||||
await p.waitForTimeout(400);
|
||||
(await p.locator(".tgu-requests-form").count()) > 0
|
||||
? pass("requests:state-preserved", "форма создания осталась открытой")
|
||||
: fail("requests:state-preserved", "форма закрылась (состояние сброшено)");
|
||||
|
||||
// Скрытые вкладки не должны размонтироваться: в DOM присутствуют сразу несколько <main>
|
||||
await tab("Планы").click();
|
||||
await p.waitForTimeout(200);
|
||||
const mains = await p.locator(".tgu-app-shell main").count();
|
||||
mains >= 3
|
||||
? pass("keep-alive:tabs-mounted", `<main> в DOM: ${mains}`)
|
||||
: fail("keep-alive:tabs-mounted", `ожидалось >=3, найдено ${mains}`);
|
||||
|
||||
} catch (e) {
|
||||
fail("EXCEPTION", e.message);
|
||||
} finally {
|
||||
if (consoleErrors.length) console.log("CONSOLE_ERRORS", JSON.stringify(consoleErrors, null, 2));
|
||||
const failed = results.filter((r) => r[0] === "FAIL").length;
|
||||
console.log(`\n=== ${results.length - failed}/${results.length} PASS, ${failed} FAIL ===`);
|
||||
await b.close();
|
||||
process.exit(failed ? 1 : 0);
|
||||
}
|
||||
Reference in New Issue
Block a user