From 27f8323624c2942a80a1ffd57268888b3d057d7f Mon Sep 17 00:00:00 2001 From: Denozordec Date: Wed, 23 Sep 2026 14:50:16 +0700 Subject: [PATCH] =?UTF-8?q?test(ui):=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B8=D1=82=D1=8C=20=D0=BE=D0=BF=D1=80=D0=BE=D1=81=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D0=B8=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B1=D0=BB=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ux-ui-progress.md | 6 ++++++ docs/ux-ui-stage-7.md | 2 +- tests/e2e/dashboard-data.spec.ts | 36 ++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 56ba4f53..81bb56c5 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -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. Существующие проверки создания и ошибок сохранения также прошли. diff --git a/docs/ux-ui-stage-7.md b/docs/ux-ui-stage-7.md index 7d87f8a1..f597801b 100644 --- a/docs/ux-ui-stage-7.md +++ b/docs/ux-ui-stage-7.md @@ -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) diff --git a/tests/e2e/dashboard-data.spec.ts b/tests/e2e/dashboard-data.spec.ts index 9aed57ba..b1cff613 100644 --- a/tests/e2e/dashboard-data.spec.ts +++ b/tests/e2e/dashboard-data.spec.ts @@ -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']) +})