35 lines
2.2 KiB
TypeScript
35 lines
2.2 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
|
|
for (const variant of ['closed', 'invalid', 'http-error'] as const) {
|
|
test(`Трафик: SSE ${variant} не выдаёт старое измерение за live`, async ({ page }) => {
|
|
const server = { id: '1', name: 'Тестовый сервер', site: 'TEST', country: 'RU', status: 'online', rxNow: 2, txNow: 3, rxPeak: 5, txPeak: 6, rxTotal: 100, txTotal: 200, sessions: 1, rxSeries: [1, 2], txSeries: [2, 3] }
|
|
await page.route('**/health', route => route.fulfill({ json: { ok: true } }))
|
|
await page.route('**/api/**', route => {
|
|
const path = new URL(route.request().url()).pathname
|
|
if (path.endsWith('/live')) {
|
|
if (variant === 'http-error') return route.fulfill({ status: 503, json: { error: 'Поток недоступен' } })
|
|
const sample = { rxMbps: 17, txMbps: 19, at: '2026-09-23T12:00:00Z' }
|
|
const body = 'event: sample\ndata: ' + JSON.stringify(sample) + '\n\n' + (variant === 'invalid' ? 'event: sample\ndata: {"rxMbps":null,"txMbps":-1}\n\n' : '')
|
|
return route.fulfill({ contentType: 'text/event-stream', body })
|
|
}
|
|
const json = path === '/api/auth/config' ? { required: false }
|
|
: path === '/api/traffic/servers' ? { servers: [server] }
|
|
: path === '/api/traffic/servers/1' ? { server }
|
|
: path.endsWith('/interfaces') || path === '/api/traffic/bound-interfaces' ? { interfaces: [] }
|
|
: path === '/api/traffic/users' ? { users: [] }
|
|
: path === '/api/servers' ? [] : {}
|
|
return route.fulfill({ json })
|
|
})
|
|
await page.goto('/traffic')
|
|
const summary = page.getByLabel('Скорость выбранного сервера')
|
|
await expect(summary).toBeVisible()
|
|
const hint = variant === 'http-error' ? 'История · live недоступен' : 'Последнее live-измерение · поток недоступен'
|
|
await expect(summary.getByText(hint, { exact: true }).filter({ visible: true })).toHaveCount(2)
|
|
await expect(summary.getByText('live', { exact: true })).toHaveCount(0)
|
|
if (variant !== 'http-error') {
|
|
await expect(summary).toContainText('17.0')
|
|
await expect(summary).toContainText('19.0')
|
|
}
|
|
})
|
|
}
|