fix(wireguard): сохранять меню действий при перерисовке
This commit is contained in:
1 parent
4c4ba02b44
commit
6a46fb1e40
13 files changed
+466
-85
No files matched your search
@@ -0,0 +1,35 @@
|
||||
import { test, expect } from '@playwright/test'
|
||||
test('WireGuard: меню переживает refresh и использует новое состояние интерфейса', async ({ page }) => {
|
||||
let refreshing = false, release: (() => void) | undefined, patches = 0
|
||||
const gate = new Promise<void>(resolve => { release = resolve })
|
||||
const iface = { id: '1:*A', rosId: '*A', name: 'wg-menu', serverId: '1', serverName: 'CHR', listenPort: 51879, mtu: 1420, comment: '', enabled: true, status: 'up', peers: [] }
|
||||
await page.route('**/health', route => route.fulfill({ json: { ok: true } }))
|
||||
await page.route('**/api/**', async route => {
|
||||
const path = new URL(route.request().url()).pathname
|
||||
if (route.request().method() === 'PATCH') {
|
||||
expect(path).toBe('/api/wireguard/interfaces/1/*A')
|
||||
expect(route.request().postDataJSON()).toEqual({ disabled: false })
|
||||
patches++
|
||||
return route.fulfill({ json: { ok: true } })
|
||||
}
|
||||
if (path === '/api/wireguard') {
|
||||
if (refreshing) await gate
|
||||
return route.fulfill({ json: { interfaces: [{ ...iface, enabled: !refreshing, status: refreshing ? 'down' : 'up' }] } })
|
||||
}
|
||||
return route.fulfill({ json: path === '/api/auth/config' ? { required: false } : path === '/api/servers' ? [{ id: 1, name: 'CHR', host: '192.0.2.1', enabled: true, type: 'home-router', country: 'RU', status: 'online' }] : {} })
|
||||
})
|
||||
await page.goto('/wireguard')
|
||||
const refresh = page.getByRole('button', { name: 'Обновить', exact: true })
|
||||
await expect(refresh).toBeEnabled()
|
||||
await page.getByRole('button', { name: 'Действия: wg-menu' }).click()
|
||||
await expect(page.getByRole('menuitem', { name: 'Отключить', exact: true })).toBeVisible()
|
||||
refreshing = true
|
||||
await refresh.evaluate(e => (e as HTMLButtonElement).click())
|
||||
await expect(refresh).toBeDisabled()
|
||||
await expect(page.getByRole('menuitem', { name: 'Добавить пира', exact: true })).toBeVisible()
|
||||
release!()
|
||||
await expect(refresh).toBeEnabled()
|
||||
await expect(page.getByRole('menuitem', { name: 'Включить', exact: true })).toBeVisible()
|
||||
await page.getByRole('menuitem', { name: 'Включить', exact: true }).click()
|
||||
await expect.poll(() => patches).toBe(1)
|
||||
})
|
||||
Reference in new issue
Block a user