fix(ui): поднять очередь проблем и уточнить сводку дашборда
This commit is contained in:
1 parent
fe9df167ec
commit
4ec32765df
5 files changed
+245
-190
No files matched your search
@@ -1,11 +1,11 @@
|
||||
import { test, expect, type Page } from "@playwright/test"
|
||||
|
||||
async function setup(page: Page, initiallyFailed = false) {
|
||||
async function setup(page: Page, initiallyFailed = false, serverCount = 1) {
|
||||
const control = { failed: initiallyFailed, partial: false, prefixes: 321, hold: false, holdPath: "/api/bgp/sessions", fallback: false, failFallback: false, pending: 0, release: () => {} }
|
||||
let release!: () => void
|
||||
const gate = new Promise<void>(resolve => { release = resolve })
|
||||
control.release = release
|
||||
const servers = [{ id: 1, name: "Узел", host: "192.0.2.1", site: "TEST", country: "RU", asn: "64512", type: "exit-node", enabled: true, status: "online", latency: 10, os: "7", model: "CHR" }]
|
||||
const servers = Array.from({ length: serverCount }, (_, index) => ({ id: index + 1, name: serverCount === 1 ? "Узел" : `Узел ${index + 1}`, host: `192.0.2.${index + 1}`, site: "TEST", country: "RU", asn: "64512", type: "exit-node", enabled: true, status: serverCount === 1 ? "online" : "offline", latency: 10, os: "7", model: "CHR" }))
|
||||
const snapshot = { sampledAt: "2026-09-20T00:00:00Z", servers, greTunnels: [], filtersRulesets: [], speedProbes: [], routeLookupByServerId: {}, wanRuntimeByHomeId: {} }
|
||||
await page.route("**/health", route => route.fulfill({ json: { ok: true } }))
|
||||
await page.route("**/api/**", async route => {
|
||||
@@ -38,16 +38,40 @@ async function setup(page: Page, initiallyFailed = false) {
|
||||
}
|
||||
|
||||
const refresh = (page: Page) => page.getByRole("button", { name: "Обновить данные", exact: true })
|
||||
const bgp = (page: Page) => page.getByRole("link").filter({ hasText: "BGP Rx" })
|
||||
const bgp = (page: Page) => page.getByRole("link").filter({ hasText: "Префиксы BGP" })
|
||||
|
||||
test("Дашборд: очередь над измерениями, полный счётчик и раскрытие остальных проблем", async ({ page }) => {
|
||||
await setup(page, false, 7)
|
||||
await expect(refresh(page)).toBeEnabled()
|
||||
const queue = page.getByRole("region", { name: "Требует внимания", exact: true })
|
||||
await expect(queue.getByText("7", { exact: true })).toBeVisible()
|
||||
const serverLinks = queue.getByRole("link", { name: /^Узел \d/ })
|
||||
await expect(serverLinks).toHaveCount(5)
|
||||
const more = queue.locator("summary").filter({ hasText: "Ещё 2" })
|
||||
await more.focus()
|
||||
await more.press("Enter")
|
||||
await expect(serverLinks).toHaveCount(7)
|
||||
await more.press("Enter")
|
||||
await expect(serverLinks).toHaveCount(5)
|
||||
const queueBox = await queue.boundingBox()
|
||||
const measurementBox = await page.getByText("Задержка до серверов", { exact: true }).boundingBox()
|
||||
expect(queueBox!.y + queueBox!.height).toBeLessThan(measurementBox!.y)
|
||||
await expect(queue.getByText("Нет активных проверок", { exact: true })).toBeVisible()
|
||||
await page.screenshot({ path: "test-results/dashboard-priority-desktop.png", animations: "disabled" })
|
||||
await page.setViewportSize({ width: 390, height: 844 })
|
||||
await page.getByRole("navigation", { name: "Путь страницы" }).scrollIntoViewIfNeeded()
|
||||
await page.screenshot({ path: "test-results/dashboard-priority-mobile.png", animations: "disabled" })
|
||||
expect(await page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true)
|
||||
})
|
||||
|
||||
test("Дашборд: первоначальная ошибка не подменяется нулями и исправным состоянием", async ({ page }) => {
|
||||
const control = await setup(page, true)
|
||||
await expect(refresh(page)).toBeEnabled()
|
||||
await expect(page.getByText("Не обновлены источники: 9", { exact: true }).first()).toBeVisible()
|
||||
await expect(page.getByRole("link").filter({ hasText: "Флот" })).toContainText("—")
|
||||
await expect(page.getByRole("link").filter({ hasText: "Серверы онлайн" })).toContainText("—")
|
||||
await expect(bgp(page)).toContainText("—")
|
||||
await expect(page.getByText("Все online", { exact: true })).toHaveCount(0)
|
||||
await expect(page.getByText("Пробы up", { exact: true })).toHaveCount(0)
|
||||
await expect(page.getByText("Серверы без проблем", { exact: true })).toHaveCount(0)
|
||||
await expect(page.getByText("Проверки без ошибок", { exact: true })).toHaveCount(0)
|
||||
control.failed = false
|
||||
await refresh(page).click()
|
||||
await expect(bgp(page)).toContainText("321")
|
||||
|
||||
Reference in new issue
Block a user