test(ui): проверить опрос сервера из очереди проблем

This commit is contained in:
Denozordec committed 2026-09-23 14:50:16 +07:00
1 parent ca9474ac83
commit 27f8323624
3 files changed
+43 -1

No files matched your search

+6
View File
@@ -29,6 +29,12 @@
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Не начат |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
## Приёмка 7.5Г — сквозной сценарий сервера (2026-09-23)
- Добавлен E2E «проблема на дашборде → выбранный сервер → опрос с 403 → успешный повтор → назад → вперёд». Проверены точный ID и одна строка, сохранение выбранного сервера при отказе, два явных POST только выбранному устройству и отсутствие операций записи от переходов истории.
- Новый тест прошёл, ESLint файла чистый. Код приложения не менялся, production build не повторялся: последняя успешная сборка ca9474a. HTTP-моки не доказывают реальное изменение состояния RouterOS; после возврата очередь отражает тот же фикстурный offline-статус.
- Следующий шаг 7.5: смена backend/mode при незавершённой операции мониторинга, затем свести границы приёмки этапа. Сквозной сценарий проверок мониторинга с действием из дашборда остаётся отдельно. На старте 18% пятичасовой квоты, после проверки 11%; выполнен небольшой блок по просьбе продолжить ниже резерва. Локальный коммит без push.
## Приёмка 7.5В — формы серверов и таблица Resources (2026-09-23)
- Форма сервера на телефоне занимает полную ширину; fieldset получил min-w-0, выбор типа узла и кнопки подвала допускают перенос. На 320 px прежде выходили за экран поля, страны и последний шаг. Проверены четыре шага редактирования, выбор Home Router, добавленный WAN, раскрытые дополнительные поля и Escape на 320/390/1440 px. Существующие проверки создания и ошибок сохранения также прошли.
+1 -1
View File
@@ -61,7 +61,7 @@ URL — источник сохранённого состояния. Back/Forwa
3. **7.4 — формы, детали и полный контекст мониторинга.** Восстановление вкладки/фильтров из URL, понятные единицы и подписи, возврат к списку после действия. Не дублировать сохранённые исправления этапа 1; проверить загрузку, отмену, 400/403/500, timeout и повторное нажатие.
4. **7.5 — приёмка этапа.** Сценарий «проблема → сервер/проверка → действие → возврат» с сохранением контекста; профильные E2E, права в HTTP-моках, TypeScript, lint и build. Реальные JWT/RouterOS отдельно в тестовом окружении.
Следующий исполняемый шаг: 7.5 — сквозные переходы дашборд → объект → действие → возврат, смена backend/mode при незавершённой операции и фиксация ограничений. Формы серверов проверены на 320/390/1440 px, Resources после прокрутки — на 320/390 px; исправлены переполнение формы и обрезка фильтров/таблицы. Формы Ping/Speed и вкладки проверены на 320/390/1440 px; устранены переполнение форм, перекрытие параметров Speed и сдвиг страницы при выборе вкладки. URL-контекст вкладки, Ping и Resources выполнен. Учесть границы HTTP-моков, экспорт серверов и ограничения сетевых операций из журнала; этап 7 целиком пока не завершён.
Следующий исполняемый шаг: 7.5 — смена backend/mode при незавершённой операции мониторинга, сквозной сценарий проверки из дашборда и фиксация ограничений. Сквозной сценарий сервера с отказом 403, повтором и Back/Forward проверен; навигация не отправляет запросы записи. Формы серверов проверены на 320/390/1440 px, Resources после прокрутки — на 320/390 px; исправлены переполнение формы и обрезка фильтров/таблицы. Формы Ping/Speed и вкладки проверены на 320/390/1440 px; устранены переполнение форм, перекрытие параметров Speed и сдвиг страницы при выборе вкладки. URL-контекст вкладки, Ping и Resources выполнен. Учесть границы HTTP-моков, экспорт серверов и ограничения сетевых операций из журнала; этап 7 целиком пока не завершён.
## Решение по синхронизации URL (7.1)
+36
View File
@@ -167,3 +167,39 @@ test("Internet path: поздний дополнительный запрос н
await expect(source.locator("time").first()).toHaveAttribute("datetime", timestamp!)
await expect(source.locator("time").last()).toHaveAttribute("datetime", "2026-09-20T00:00:00Z")
})
test('Сквозная приёмка: проблема → опрос сервера с отказом и повтором → возврат', async ({ page }) => {
const writes: string[] = []
page.on('request', request => {
if (!['GET', 'HEAD', 'OPTIONS'].includes(request.method())) writes.push(new URL(request.url()).pathname)
})
await setup(page, false, 2)
let fail = true
await page.route('**/api/servers/2/poll', route => route.fulfill({
status: fail ? 403 : 200,
json: fail ? { error: 'Опрос запрещён политикой сервера' } : {},
}))
const queue = page.getByRole('region', { name: 'Требует внимания', exact: true })
await queue.getByRole('link', { name: /^Узел 2/ }).click()
await expect(page).toHaveURL(/\/servers\?server=2$/)
const context = page.getByRole('status', { name: 'Сервер по ссылке' })
await expect(context).toContainText('Узел 2')
await expect(page.locator('tr[data-row-id]')).toHaveCount(1)
expect(writes).toEqual([])
const poll = page.getByRole('button', { name: 'Проверить сервер', exact: true })
await poll.click()
await expect(page.getByText('Опрос: успешно 0 из 1', { exact: true })).toBeVisible()
await expect(context).toContainText('Узел 2')
fail = false
await poll.click()
await expect(page.getByText('Опрос: успешно 1 из 1', { exact: true })).toBeVisible()
expect(writes).toEqual(['/api/servers/2/poll', '/api/servers/2/poll'])
await page.goBack()
await expect(page).toHaveURL(/\/dashboard$/)
await expect(queue.getByRole('link', { name: /^Узел 2/ })).toBeVisible()
await page.goForward()
await expect(context).toContainText('Узел 2')
await expect(page.locator('tr[data-row-id]')).toHaveCount(1)
await expect(poll).toBeEnabled()
expect(writes).toEqual(['/api/servers/2/poll', '/api/servers/2/poll'])
})