fix(ui): подтверждать переключение проб через API

This commit is contained in:
Denozordec committed 2026-09-21 21:03:14 +07:00
1 parent 2f5b617e8c
commit 4f235058be
4 files changed
+63 -21

No files matched your search

+35
View File
@@ -268,3 +268,38 @@ for (const speed of [false, true]) {
await expect(dialog).toBeVisible()
})
}
for (const speed of [false, true]) {
test(`переключение ${speed ? "Speed" : "Ping"}: ожидание API, отказ, повтор без потери состояния`, async ({ page }) => {
await setup(page, "/uptime?probe=p1", 0, false, "mm:uptime:write")
await page.getByRole("button", { name: "Пауза", exact: true }).click()
if (speed) await page.getByRole("button", { name: /Скорость/ }).click()
let calls = 0
let fail = true
let release!: () => void
const pending = new Promise<void>(resolve => { release = resolve })
await page.route(speed ? "**/api/uptime/speed-probes" : "**/api/uptime/probes", async route => {
if (route.request().method() !== "PUT") return route.fallback()
calls++
expect(route.request().postDataJSON().probes[0].enabled).toBe(false)
if (fail) await pending
await route.fulfill({ status: fail ? 403 : 200, json: fail ? { error: "Forbidden" } : { ok: true } })
})
const toggle = page.getByRole("switch")
await expect(toggle).toBeChecked()
await toggle.click()
await expect(toggle).toBeDisabled()
await expect(toggle).toBeChecked()
await expect.poll(() => calls).toBe(1)
release()
await expect(page.getByRole("alert").filter({ hasText: "Недостаточно прав" })).toBeVisible()
await expect(toggle).toBeChecked()
await expect(toggle).toBeEnabled()
fail = false
await toggle.click()
await expect(toggle).not.toBeChecked()
await expect(toggle).toBeEnabled()
await expect(page.getByRole("alert").filter({ hasText: "Недостаточно прав" })).toHaveCount(0)
expect(calls).toBe(2)
})
}