fix(ui): подтверждать удаление WireGuard и блокировать повторы
This commit is contained in:
1 parent
165f40acd7
commit
f980619046
5 files changed
+131
-13
No files matched your search
@@ -127,3 +127,51 @@ for (const status of [403, 500]) {
|
||||
expect(control.posts).toEqual([])
|
||||
})
|
||||
}
|
||||
|
||||
for (const kind of ["iface", "peer"] as const) {
|
||||
test("WireGuard: подтверждение удаления и повтор после ошибки " + kind, async ({ page }) => {
|
||||
await setup(page, "/wireguard?server=1&interface=*%2F2")
|
||||
let attempts = 0
|
||||
let release: (() => void) | undefined
|
||||
const gate = new Promise<void>(resolve => { release = resolve })
|
||||
await page.route("**/api/wireguard/" + (kind === "iface" ? "interfaces" : "peers") + "/**", async route => {
|
||||
expect(route.request().method()).toBe("DELETE")
|
||||
expect(decodeURIComponent(new URL(route.request().url()).pathname)).toBe(
|
||||
kind === "iface" ? "/api/wireguard/interfaces/1/*/2" : "/api/wireguard/peers/1/*P",
|
||||
)
|
||||
attempts++
|
||||
if (attempts === 1) {
|
||||
await gate
|
||||
await route.fulfill({ status: 403, json: { error: "Нет доступа к удалению" } })
|
||||
} else if (attempts === 2) {
|
||||
await route.fulfill({ json: { ok: false } })
|
||||
} else {
|
||||
await route.fulfill({ json: { ok: true } })
|
||||
}
|
||||
})
|
||||
await expect(page.locator("tr[data-row-id]")).toHaveCount(1)
|
||||
if (kind === "iface") {
|
||||
await page.getByRole("button", { name: "Действия: wg-same" }).click()
|
||||
await page.getByRole("menuitem", { name: /Удалить/ }).click()
|
||||
} else {
|
||||
await page.getByRole("tab", { name: /Пиры/ }).click()
|
||||
await page.getByRole("button", { name: "Удалить пира", exact: true }).click()
|
||||
}
|
||||
const dialog = page.getByRole("alertdialog")
|
||||
await expect(dialog).toContainText("Источник")
|
||||
await dialog.getByRole("button", { name: "Удалить", exact: true }).click()
|
||||
await expect(dialog.getByRole("button", { name: "Удаление…" })).toBeDisabled()
|
||||
await expect(dialog.getByRole("button", { name: "Отмена" })).toBeDisabled()
|
||||
await page.keyboard.press("Escape")
|
||||
await expect(dialog).toBeVisible()
|
||||
await expect(dialog.getByRole("status")).toContainText("Ожидание подтверждения")
|
||||
expect(attempts).toBe(1)
|
||||
release!()
|
||||
await expect(dialog.getByRole("alert")).toContainText("Нет доступа")
|
||||
await dialog.getByRole("button", { name: "Удалить", exact: true }).click()
|
||||
await expect(dialog.getByRole("alert")).toContainText("Сервер не подтвердил удаление")
|
||||
await dialog.getByRole("button", { name: "Удалить", exact: true }).click()
|
||||
await expect(dialog).toHaveCount(0)
|
||||
expect(attempts).toBe(3)
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user