From 91c11945504edebbae2c6d842b75a225df19ba82 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Sun, 4 Oct 2026 03:55:30 +0700 Subject: [PATCH] =?UTF-8?q?fix(test):=20=D0=B0=D0=BA=D1=82=D1=83=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BE=D0=B1=D1=89=D0=B5?= =?UTF-8?q?=D0=B9=20UX=20=D1=80=D0=B5=D0=B3=D1=80=D0=B5=D1=81=D1=81=D0=B8?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ux-ui-performance.md | 16 +- docs/ux-ui-plan.md | 2 +- docs/ux-ui-progress.md | 10 +- docs/ux-ui-stage-12.md | 8 + .../main-regression-2026-10-04.json | 1191 +++++++++++++++++ .../screens/large-server-rail-dark-320.png | Bin 0 -> 55399 bytes .../screens/large-server-rail-light-320.png | Bin 0 -> 56899 bytes tests/e2e/admin-tables.spec.ts | 16 +- tests/e2e/filters-layout.spec.ts | 10 + 9 files changed, 1238 insertions(+), 15 deletions(-) create mode 100644 docs/ux-ui/acceptance/main-regression-2026-10-04.json create mode 100644 docs/ux-ui/screens/large-server-rail-dark-320.png create mode 100644 docs/ux-ui/screens/large-server-rail-light-320.png diff --git a/docs/ux-ui-performance.md b/docs/ux-ui-performance.md index 7b8edd77..f59b5c7f 100644 --- a/docs/ux-ui-performance.md +++ b/docs/ux-ui-performance.md @@ -22,7 +22,7 @@ | [backups-data-grid.tsx](../components/data-grids/backups-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [certificates-data-grid.tsx](../components/data-grids/certificates-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [communities-data-grid.tsx](../components/data-grids/communities-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | -| [data-collection-scheduler-data-grid.tsx](../components/data-grids/data-collection-scheduler-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | +| [data-collection-scheduler-data-grid.tsx](../components/data-grids/data-collection-scheduler-data-grid.tsx) | UI строится из11 SCHEDULER_JOB_KEYS; fixture1000 не соответствует источнику | | [filters-data-grid.tsx](../components/data-grids/filters-data-grid.tsx) | Порядок/drag и операции до ограничения DOM | | [firewall-rules-data-grid.tsx](../components/data-grids/firewall-rules-data-grid.tsx) | Порядок/drag и операции до ограничения DOM | | [firewall-scenario-rules-data-grid.tsx](../components/data-grids/firewall-scenario-rules-data-grid.tsx) | Порядок/drag и операции до ограничения DOM | @@ -32,22 +32,20 @@ | [ospf-neighbors-data-grid.tsx](../components/data-grids/ospf-neighbors-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [ospf-routes-data-grid.tsx](../components/data-grids/ospf-routes-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [probes-schedule-data-grid.tsx](../components/data-grids/probes-schedule-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | -| [probes-speed-probes-data-grid.tsx](../components/data-grids/probes-speed-probes-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [recursive-routes-data-grid.tsx](../components/data-grids/recursive-routes-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [route-optimizer-comm-recs-data-grid.tsx](../components/data-grids/route-optimizer-comm-recs-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [route-optimizer-full-routes-data-grid.tsx](../components/data-grids/route-optimizer-full-routes-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [route-optimizer-ospf-preview-data-grid.tsx](../components/data-grids/route-optimizer-ospf-preview-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [route-optimizer-wan-matrix-data-grid.tsx](../components/data-grids/route-optimizer-wan-matrix-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [subusers-data-grid.tsx](../components/data-grids/subusers-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | -| [traffic-flows-data-grid.tsx](../components/data-grids/traffic-flows-data-grid.tsx) | API page/limit, manualSorting и общий счётчик | -| [uptime-resources-data-grid.tsx](../components/data-grids/uptime-resources-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | -| [uptime-speed-history-data-grid.tsx](../components/data-grids/uptime-speed-history-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | +| [traffic-flows-data-grid.tsx](../components/data-grids/traffic-flows-data-grid.tsx) | FlowAnalyticsPanel получает conversationsList с backend cap50; API page/limit здесь нет | +| [uptime-speed-history-data-grid.tsx](../components/data-grids/uptime-speed-history-data-grid.tsx) | Реальный GET runs ограничен200; локальные новые run тоже ограничены20, проверить200 вместо выдуманного1000 | | [users-data-grid.tsx](../components/data-grids/users-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [vxlan-data-grid.tsx](../components/data-grids/vxlan-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [wireguard-data-grid.tsx](../components/data-grids/wireguard-data-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | | [wireguard-peers-grid.tsx](../components/data-grids/wireguard-peers-grid.tsx) | Потребитель API, контекст/детали и fixture1000 | -Осталось25 специализированных grids; ни один из оставшегося перечня не принят этим документом на больших данных. CompactDataGrid дополнительно проверен на повторном получении100 active probes: страница сохраняется; сокращение100→1 ограничивает индекс. Следующая группа12.3.6 — uptime-resources/probes-speed/probes-schedule, затем сетевые/admin grids по профилям. Общий журнал: [ux-ui-progress.md](ux-ui-progress.md). +Осталось25 специализированных grids; ни один из оставшегося перечня не принят этим документом на больших данных. CompactDataGrid дополнительно проверен на повторном получении100 active probes: страница сохраняется; сокращение100→1 ограничивает индекс. Speed probes и uptime resources приняты в блоках12.3.7–12.3.9 и исключены из оставшегося перечня. Следующие большие профили: probes-schedule, затем сетевые/admin grids с учётом границ API. Общий журнал: [ux-ui-progress.md](ux-ui-progress.md). 12.3.6:1000 speed probes baseline —1000 rendered rows/23590 DOM nodes/3741ms dev ready; профиль collector-probes4 cases и ESLint прошли. Далее12.3.7 ограничение DOM speed grid; этот baseline не означает принятую производительность. @@ -58,3 +56,9 @@ 12.3.9:1000 предупреждений CPU90% — warning nodes2009→21, страница4739→2751 при закрытом списке.5→55→105→5→55 карточек по явному раскрытию; полный счётчик сохранён.9 browser и tagged axe прошли. Полное постепенное раскрытие допускает весь список, это не виртуализация. 12.3.11: ServerTileRail1001 устройств —50 options на странице (All отдельный aggregate), mobile Sheet тоже50. Speed probes + каталог:11265→1778 DOM nodes,739 nodes speed секции/50 строк. Поиск/URL/граница площадок/клавиатура/refresh/320px/axe обе темы проверены;47 browser и production build прошли. Полные DTO остаются в памяти. + +## Уточнение ограниченных источников перед общей регрессией + +Статический аудит исходников на c4110fa: schedulerGridRows строится из SCHEDULER_JOB_KEYS (11), поэтому отсутствие client pagination не означает1000 строк. TrafficFlowsDataGrid получает analytics.conversationsList, а buildFlowAnalyticsUncached задаёт top=min(50,max(10,settings.topN)) и slice(0,top); page/limit в этом пути нет. Старый /traffic/flows listFlowTalkers — другой источник с settings.topN, его нельзя смешивать с текущей таблицей analytics. Uptime speed history GET /uptime/speed-test/runs использует DB limit200; frontend локальный run список ограничен20. Эти ограничения установлены чтением кода, не нагрузочным испытанием PG. Остальные строки карты требуют проверки по своим потребителям;25 manualPagination:true файлов не означают25 одинаковых дефектов. + +Statistics pivot в backend/src/services/statistics-aggregate.ts ограничен PIVOT_ROW_CAP=50 и PIVOT_COL_CAP=15; при превышении добавляются агрегаты __other__. Проверять фактическую границу51×16, прокрутку и переходы к срезам, а не произвольную матрицу1000×1000. Это статический аудит источника; browser evidence широкой pivot ещё требуется. diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md index dbd6f1a1..d9e981b3 100644 --- a/docs/ux-ui-plan.md +++ b/docs/ux-ui-plan.md @@ -4,7 +4,7 @@ ## Актуальная точка продолжения — 2026-10-04 -Этап 11Б завершён в границах локальной приёмки (11Б.7); внешний выпуск не проверен. 12.1 принят локально: доступность оболочки/клавиатура/health в описанных сценариях. 12.2.1 принят локально: strict BGP catalog/partial/nullable counters. 12.2.2 принят локально: strict traffic DTO и агрегация без выдуманных точек. 12.2.3 принят локально: observations для server traffic от backend до dashboard. 12.2.4 принят локально: strict servers/probes и unknown server status. 12.2.5 принят локально: реальные ping samples/unknown/ось RTT/Recharts. 12.2.6 принят локально: strict GRE/WireGuard/VXLAN и device failures. 12.2.7 принят локально: strict Internet path snapshot/fallback. 12.2.8 принят локально: подтверждение полного backend сбора. 12.2.9 принят локально: метрики участков и наблюдаемый WAN без эвристической подмены. 12.3.1 принят локально:1000 серверов/штатная пагинация. 12.3.2 принят локально: пагинация CompactDataGrid/1000 строк статистики. 12.3.3 принят локально: порционный DOM очереди проблем. 12.3.4 принят локально: большой BGP каталог/страница при обновлении. Production build и123 профильных browser приняты локально на3978976. 12.2.10 принят локально: обязательные RouterOS поля. 12.3.5 принят локально: страница CompactDataGrid сохраняется при опросе,89 browser и повторный production build прошли. 12.3.6 сохранён: baseline1000 speed probes (ограничение DOM пока не выполнено). 12.3.7 принят локально:50 строк speed-проб/сохранение страницы/глобальная сортировка/1000→1; каталог1001 устройства остаётся в DOM. 12.3.8 принят локально:50 строк ресурсов, URL/поиск/сохранение страницы/1000→1; исправлена pagination оболочки с children, production build и8 больших browser прошли. 12.3.9 принят локально:порционное раскрытие1000 предупреждений ресурсов/клавиатура/axe; исходная ошибка ESLint speedDraft подтверждена. 12.3.10 принят локально:недоступные интерфейсы очищаются в обработчиках,54 browser/полный ESLint/production build прошли. 12.3.11 принят локально:ServerTileRail50 устройств/URL/поиск/клавиатура/две площадки/mobile Sheet/axe обе темы;47 browser и production build прошли. 12.3.12 принят локально:BGP ручная страница при выбранной URL сессии/refresh/reload,16 browser/build прошли. Следующий блок12.4.1:main browser regression1091 тест/163 файла, затем context и оставшиеся grids;12.4/12.5 ещё не завершены. См. docs/ux-ui-stage-12.md. Внешние ограничения 11Б сохраняются. +Этап 11Б завершён в границах локальной приёмки (11Б.7); внешний выпуск не проверен. 12.1 принят локально: доступность оболочки/клавиатура/health в описанных сценариях. 12.2.1 принят локально: strict BGP catalog/partial/nullable counters. 12.2.2 принят локально: strict traffic DTO и агрегация без выдуманных точек. 12.2.3 принят локально: observations для server traffic от backend до dashboard. 12.2.4 принят локально: strict servers/probes и unknown server status. 12.2.5 принят локально: реальные ping samples/unknown/ось RTT/Recharts. 12.2.6 принят локально: strict GRE/WireGuard/VXLAN и device failures. 12.2.7 принят локально: strict Internet path snapshot/fallback. 12.2.8 принят локально: подтверждение полного backend сбора. 12.2.9 принят локально: метрики участков и наблюдаемый WAN без эвристической подмены. 12.3.1 принят локально:1000 серверов/штатная пагинация. 12.3.2 принят локально: пагинация CompactDataGrid/1000 строк статистики. 12.3.3 принят локально: порционный DOM очереди проблем. 12.3.4 принят локально: большой BGP каталог/страница при обновлении. Production build и123 профильных browser приняты локально на3978976. 12.2.10 принят локально: обязательные RouterOS поля. 12.3.5 принят локально: страница CompactDataGrid сохраняется при опросе,89 browser и повторный production build прошли. 12.3.6 сохранён: baseline1000 speed probes (ограничение DOM пока не выполнено). 12.3.7 принят локально:50 строк speed-проб/сохранение страницы/глобальная сортировка/1000→1; каталог1001 устройства остаётся в DOM. 12.3.8 принят локально:50 строк ресурсов, URL/поиск/сохранение страницы/1000→1; исправлена pagination оболочки с children, production build и8 больших browser прошли. 12.3.9 принят локально:порционное раскрытие1000 предупреждений ресурсов/клавиатура/axe; исходная ошибка ESLint speedDraft подтверждена. 12.3.10 принят локально:недоступные интерфейсы очищаются в обработчиках,54 browser/полный ESLint/production build прошли. 12.3.11 принят локально:ServerTileRail50 устройств/URL/поиск/клавиатура/две площадки/mobile Sheet/axe обе темы;47 browser и production build прошли. 12.3.12 принят локально:BGP ручная страница при выбранной URL сессии/refresh/reload,16 browser/build прошли. 12.4.1 записан:main1091 сценарий/1088 passed/3 устаревших fixtures; оба исправленных файла6 passed. Следующий блок12.4.2:23 context файла и backend-switch, затем оставшиеся grids/pivot;12.4/12.5 ещё не завершены. См. docs/ux-ui-stage-12.md. Внешние ограничения 11Б сохраняются. Реальные pg_dump/pg_restore, PG rollback и остановка UDP worker требуют внешней приёмки. Датированные продолжения ниже — история; точный следующий шаг также указан в начале [журнала](ux-ui-progress.md). diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md index 1c8ecccd..41585579 100644 --- a/docs/ux-ui-progress.md +++ b/docs/ux-ui-progress.md @@ -29,13 +29,21 @@ | 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 | | 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 | | 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 | -| 12 | Итоговая доступность, адаптивность, производительность и регрессия | В работе;12.1/12.2.1–12.2.10 и12.3.1–12.3.5 и12.3.7–12.3.12 приняты в описанных локальных границах | +| 12 | Итоговая доступность, адаптивность, производительность и регрессия | В работе;12.1/12.2.1–12.2.10 и12.3.1–12.3.5 и12.3.7–12.3.12 приняты в описанных локальных границах;12.4.1 main регрессия и профильный повтор записаны | +## 12.4.1 — общая регрессия и актуальные fixtures (2026-10-04) + +Main Playwright/Edge на c4110fa:1091 сценарий в163 файлах,1088 passed/3 failed/0 skipped/0 flaky,24.9 минуты,workers1/retries0. Все три падения воспроизведены как устаревшие fixtures: admin-tables обслуживал legacy /api/certificates вместо /api/certificates/state; Filters ожидал демо Community, не предоставляя подтверждённый Evolution catalog. Fixtures обновлены по strict schemas; keyboard/SAN/sort/write assertions сохранены. Повтор обоих файлов:6 passed. Полный прогон после fixtures не повторялся: production код не менялся; это1088 успешных сценариев общей регрессии плюс исправленные3 в профильном повторе, а не новый единый1091/1091 прогон. + +Typecheck и ESLint двух изменённых файлов прошли. Production/contracts build34 страницы ранее прошёл на том же production HEAD c4110fa. Исходный отчёт сохранён в [main-regression-2026-10-04.json](ux-ui/acceptance/main-regression-2026-10-04.json), новые просмотренные снимки rail320px — в docs/ux-ui/screens/large-server-rail-dark-320.png и large-server-rail-light-320.png. Перегенерированные исторические screenshots восстановлены; чужие изменения не включены. Карта производительности уточнена по фактическим backend caps (scheduler11/flows50/speed history200/pivot51×16 с Other); большие browser профили оставшихся25 grids и pivot ещё требуются. + +Следующий блок12.4.2: единый последовательный context прогон23 исключённых файлов с backend URL local, затем backend-switch. После context — оставшиеся границы производительности12.3 и матрица builds/checklist.12.5 реальная PG/RouterOS/интеграционная приёмка отдельно. Локальный коммит, без push. + ## 12.3.12 — ручная страница BGP при выборе сессии из URL (2026-10-04) Воспроизведён возврат со страницы19 на20 после ручного Previous при selectedSessionId из URL. Эффект BGP больше не зависит от меняющегося объекта useTable: используются стабильный setPageIndex и вычисленный индекс выбранной сессии. Глобальная сортировка и первичное восстановление выбранной сессии сохранены; ручная страница19 сохраняется при refresh, reload восстанавливает linked session на20. diff --git a/docs/ux-ui-stage-12.md b/docs/ux-ui-stage-12.md index d9021619..669ee540 100644 --- a/docs/ux-ui-stage-12.md +++ b/docs/ux-ui-stage-12.md @@ -223,3 +223,11 @@ ServerTileRail сохраняет существующую композицию 16 browser BGP/data/links/1000 sessions прошли после исправления; Typecheck/ESLint и frontend production/contracts build(34 страницы) прошли. Метрики BGP50 строк/1932 nodes остаются. Реальный BGP/RouterOS не проверен. Следующий шаг12.4.1: общий main browser прогон (1091 тест в163 файлах) с JSON отчётом; ограничить ранние падения20, затем разобрать причины и профильные повторы. Это проверка после изменения общей основы;12.3 ещё имеет25 specialized grids и широкую pivot для проверки. После main — context конфигурации и итоговая матрица;12.5 внешняя приёмка отдельно. Без push. + +## 12.4.1 — общая регрессия и актуальные fixtures (2026-10-04) + +Main Playwright/Edge на c4110fa:1091 сценарий в163 файлах,1088 passed/3 failed/0 skipped/0 flaky,24.9 минуты,workers1/retries0. Все три падения воспроизведены как устаревшие fixtures: admin-tables обслуживал legacy /api/certificates вместо /api/certificates/state; Filters ожидал демо Community, не предоставляя подтверждённый Evolution catalog. Fixtures обновлены по strict schemas; keyboard/SAN/sort/write assertions сохранены. Повтор обоих файлов:6 passed. Полный прогон после fixtures не повторялся: production код не менялся; это1088 успешных сценариев общей регрессии плюс исправленные3 в профильном повторе, а не новый единый1091/1091 прогон. + +Typecheck и ESLint двух изменённых файлов прошли. Production/contracts build34 страницы ранее прошёл на том же production HEAD c4110fa. Исходный отчёт сохранён в [main-regression-2026-10-04.json](ux-ui/acceptance/main-regression-2026-10-04.json), новые просмотренные снимки rail320px — в docs/ux-ui/screens/large-server-rail-dark-320.png и large-server-rail-light-320.png. Перегенерированные исторические screenshots восстановлены; чужие изменения не включены. Карта производительности уточнена по фактическим backend caps (scheduler11/flows50/speed history200/pivot51×16 с Other); большие browser профили оставшихся25 grids и pivot ещё требуются. + +Следующий блок12.4.2: единый последовательный context прогон23 исключённых файлов с backend URL local, затем backend-switch. После context — оставшиеся границы производительности12.3 и матрица builds/checklist.12.5 реальная PG/RouterOS/интеграционная приёмка отдельно. Локальный коммит, без push. diff --git a/docs/ux-ui/acceptance/main-regression-2026-10-04.json b/docs/ux-ui/acceptance/main-regression-2026-10-04.json new file mode 100644 index 00000000..b603542c --- /dev/null +++ b/docs/ux-ui/acceptance/main-regression-2026-10-04.json @@ -0,0 +1,1191 @@ +{ + "head": "c4110fa", + "config": "playwright.config.ts", + "browser": "msedge", + "workers": 1, + "retries": 0, + "maxFailures": 20, + "source": "test-results/ux-ui-regression-main.json", + "stats": { + "startTime": "2026-10-03T20:27:47.379Z", + "duration": 1495573.921, + "expected": 1088, + "skipped": 0, + "unexpected": 3, + "flaky": 0 + }, + "errors": [], + "files": [ + { + "file": "accessibility-shell.spec.ts", + "passed": 20, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "admin-tables.spec.ts", + "passed": 3, + "failed": 1, + "skipped": 0, + "failures": [ + { + "line": 49, + "title": "Сертификаты: 12 строк, сортировка и SAN в деталях", + "status": "unexpected" + } + ] + }, + { + "file": "alerts-history.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-layout.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-outbox.spec.ts", + "passed": 7, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-pickers.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-prefix.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-preview.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-reader.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-rules.spec.ts", + "passed": 9, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-targets.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "alerts-telegram.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-data.spec.ts", + "passed": 12, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-dialog-layout.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-job.spec.ts", + "passed": 9, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-layout.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-operations.spec.ts", + "passed": 12, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-settings.spec.ts", + "passed": 9, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-states-layout.spec.ts", + "passed": 9, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-storage.spec.ts", + "passed": 7, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "backups-url.spec.ts", + "passed": 5, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "bgp-data.spec.ts", + "passed": 13, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "bgp-layout.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "bgp-links-freshness.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "certificates-acme.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "certificates-data.spec.ts", + "passed": 12, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "certificates-issue.spec.ts", + "passed": 7, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "certificates-layout.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "certificates-renew.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "certificates-url.spec.ts", + "passed": 6, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "collector-probes-tables.spec.ts", + "passed": 7, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "config-history.spec.ts", + "passed": 11, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "containers-data.spec.ts", + "passed": 14, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "containers-layout.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "containers-operations.spec.ts", + "passed": 12, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "containers-url.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "dashboard-data.spec.ts", + "passed": 61, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "dashboard-permissions.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "data-collection-geoip.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "data-collection-history.spec.ts", + "passed": 5, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "data-collection-operations.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "data-collection-race.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "data-collection-responsive.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "data-collection-settings.spec.ts", + "passed": 16, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "data-collection-snapshot.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "data-collection-status.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "evobgp-catalog-error.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "evobgp-consumers.spec.ts", + "passed": 18, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "evobgp-counts.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "evobgp-form.spec.ts", + "passed": 7, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "evobgp-provider.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "evobgp-responsive.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "evobgp-test-receipt.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-copy-target.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-copy.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-data.spec.ts", + "passed": 5, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-delete.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-freshness.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-gateways.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-history-lock.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-layout.spec.ts", + "passed": 0, + "failed": 2, + "skipped": 0, + "failures": [ + { + "line": 5, + "title": "Filters: клавиатурный ввод и layout desktop", + "status": "unexpected" + }, + { + "line": 5, + "title": "Filters: клавиатурный ввод и layout mobile", + "status": "unexpected" + } + ] + }, + { + "file": "filters-move.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-read-race.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "filters-save.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-address-toggle.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-data.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-delete.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-freshness.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-history-lock.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-move.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-partial.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-save.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-tables.spec.ts", + "passed": 5, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "firewall-toggle.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "geoip-responsive.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "geoip-settings.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-data.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-delete.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-form.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-freshness.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-links.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-pools.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-psk.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-readiness.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-toggle.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "gre-vxlan-layout.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-cert.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-data.spec.ts", + "passed": 9, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-delete.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-freshness.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-gre-tables.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-init.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-layout.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-operation-lock.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-peer.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-readiness.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ipsec-user.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "large-bgp.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "large-servers.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "large-statistics.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "large-uptime-resources.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "migrated-tables.spec.ts", + "passed": 6, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "navigation.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "netflow-responsive.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "netflow-settings.spec.ts", + "passed": 17, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "network-filters-table.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "network-map-data.spec.ts", + "passed": 12, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "network-map-detail.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "network-map-flow.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "network-map-layout.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "network-map-url.spec.ts", + "passed": 7, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-data.spec.ts", + "passed": 7, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-freshness.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-identity.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-interface-values.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-layout.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-links.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-operations.spec.ts", + "passed": 6, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-states.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "ospf-values.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "page-header.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "probes-data.spec.ts", + "passed": 31, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "probes-layout.spec.ts", + "passed": 5, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "probes-schedule.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "probes-source.spec.ts", + "passed": 7, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "recursive-routes-data.spec.ts", + "passed": 15, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "recursive-routes-layout.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "recursive-routes-links.spec.ts", + "passed": 11, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "recursive-routes-table.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "recursive-routes-values.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "releases-layout.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "route-optimizer-data.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "route-optimizer-layout.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "route-optimizer-observed.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "route-optimizer-ospf-apply.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "route-optimizer-ospf-preview.spec.ts", + "passed": 14, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "route-optimizer-tables.spec.ts", + "passed": 5, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "route-optimizer-trust.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "routing-tables.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "servers.spec.ts", + "passed": 35, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "settings-general.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "sidebar-counts.spec.ts", + "passed": 5, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "statistics-data.spec.ts", + "passed": 15, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "system-database-form.spec.ts", + "passed": 8, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "system-database-receipt.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "terminal-data.spec.ts", + "passed": 17, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "terminal-layout.spec.ts", + "passed": 3, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "traffic-details.spec.ts", + "passed": 10, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "traffic-flow.spec.ts", + "passed": 27, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "traffic-list.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "traffic-live.spec.ts", + "passed": 5, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "traffic-mobile.spec.ts", + "passed": 6, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "uptime-links.spec.ts", + "passed": 54, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "users-catalog.spec.ts", + "passed": 17, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "users-data.spec.ts", + "passed": 12, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "users-layout.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "users-operations.spec.ts", + "passed": 15, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "vpn-inventory.spec.ts", + "passed": 4, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "vxlan-freshness.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "vxlan-links.spec.ts", + "passed": 15, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "vxlan-table.spec.ts", + "passed": 1, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "wireguard-links.spec.ts", + "passed": 25, + "failed": 0, + "skipped": 0, + "failures": [] + }, + { + "file": "wireguard-tables.spec.ts", + "passed": 2, + "failed": 0, + "skipped": 0, + "failures": [] + } + ], + "followup": { + "files": [ + "admin-tables.spec.ts", + "filters-layout.spec.ts" + ], + "passed": 6, + "failed": 0, + "skipped": 0, + "flaky": 0, + "durationMs": 15784.764, + "productionChanged": false, + "fullSuiteRepeated": false + } +} diff --git a/docs/ux-ui/screens/large-server-rail-dark-320.png b/docs/ux-ui/screens/large-server-rail-dark-320.png new file mode 100644 index 0000000000000000000000000000000000000000..d81fda03cd2c5e77ee91f306591651df16333bb9 GIT binary patch literal 55399 zcmeFZWpEtbyB}!D!V$v=Ew-4MEXiVKW(JFy$zo;(OR|`mEM^!nGg{2dQs%uk|67~N zrjkvzlKrq%^Py{Mrstf~XZrck)8Pto;z$5Iz^6~2kR&BUlsifhpf99U2LT$Ss6&Z~LmP;xifafFAQ^fgpKoGG zX*lazz64Z3(h!FsP#t@E3+B?N=GKLck`xC}&7_nsVI5}gPrPojCd$lG*d)3Zk(}MI zgrtw$d`oP)`89d4Xxc;`_-+Rl|sYtwGx@R-y{?UiiQ3cm<`CVIUn z&YAo;=zz&*2ud!JERoBOx z^^Edlg`c0WgajPhTBnbZgTvL)tU34`@COrbqjgYtgD=~C;$g}ijO|=b7aP?QXHyn) z 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�jtx!+ZHgx^7k*qm&oW(|BYzAC{wNglePk)j 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 z%0A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 literal 0 HcmV?d00001 diff --git a/docs/ux-ui/screens/large-server-rail-light-320.png b/docs/ux-ui/screens/large-server-rail-light-320.png new file mode 100644 index 0000000000000000000000000000000000000000..e597a961050a9f9a32c93d5dbf30bd2b74b5eae1 GIT binary patch literal 56899 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 literal 0 HcmV?d00001 diff --git a/tests/e2e/admin-tables.spec.ts b/tests/e2e/admin-tables.spec.ts index d4b53415..e8514eb5 100644 --- a/tests/e2e/admin-tables.spec.ts +++ b/tests/e2e/admin-tables.spec.ts @@ -1,6 +1,7 @@ import { test, expect, type Page } from "@playwright/test" import { appUserReadSchema } from "../../packages/contracts/src/users" -import { certificatesListResponseSchema } from "../../packages/contracts/src/certificates" +import { certificatesStateSchema } from "../../packages/contracts/src/certificates" +import { certificateState, server } from "./fixtures/certificates" import type { BackupItem } from "../../shared/api/backups" const ids = Array.from({ length: 12 }, (_, i) => i + 1) @@ -9,11 +10,12 @@ const users = ids.map(i => appUserReadSchema.parse({ role: "viewer", active: true, avatar: "U", lastSeen: null, sections: [], servers: [], bindings: [], createdAt: "2026-09-14T00:00:00Z", updatedAt: "2026-09-14T00:00:00Z", })) -const certificates = certificatesListResponseSchema.parse({ failures: [], certificates: ids.map(i => ({ - id: String(i), name: `cert-${i}`, serverId: "1", commonName: `host${i}.example.test`, - sans: [`alt${i}.example.test`], issuedBy: "Test CA", validFrom: "2026-09-01", validUntil: "2027-09-01", +const certificates = certificatesStateSchema.parse(certificateState(ids.map(i => ({ + id: `1:*${i}`, rosId: `*${i}`, name: `cert-${i}`, serverId: "1", commonName: `host${i}.example.test`, + sans: [`alt${i}.example.test`], issuedBy: "Test CA", validFrom: "2026-09-01T00:00:00Z", validUntil: "2027-09-01T00:00:00Z", + rawValidFrom: "2026-09-01", rawValidUntil: "2027-09-01", daysLeft: 300 + i, keySize: 2048, usage: ["server"], trusted: true, status: "valid", -})) }) +})))) const backups: BackupItem[] = ids.map(i => ({ id: String(i), serverId: 1, serverName: "Тестовый роутер", filename: `backup-${i}.backup`, sizeBytes: i === 12 ? 1048576 : i * 1024, createdAt: "2026-09-14T00:00:00Z", kind: i > 6 ? "auto" : "manual", storage: "local" })) @@ -22,12 +24,12 @@ async function setup(page: Page, url: string) { await page.route("**/api/**", route => { const path = new URL(route.request().url()).pathname return route.fulfill({ json: path === "/api/users" ? { users } - : path === "/api/certificates" ? certificates : path === "/api/backups" ? backups + : path === "/api/certificates/state" ? certificates : path === "/api/backups" ? backups : path === "/api/certificates/acme-settings" ? { directoryUrl: "https://acme.example.test/directory", defaultZoneId: "", tokenConfigured: false } : path === "/api/certificates/renew-settings" ? { enabled: false, intervalSec: 3600, renewBeforeDays: 30 } : path === "/api/backups/schedule" ? { enabled: false, frequency: "daily", hour: 3, minute: 0, weekDay: 0, monthDay: 1, keepCount: 7, format: "backup", serverIds: [] } : path === "/api/backups/storage" ? { provider: "local", s3Endpoint: "", s3Region: "", s3Bucket: "", s3Prefix: "", s3AccessKeyId: "", secretConfigured: false, s3ForcePathStyle: false, keepLocalCopy: true } - : path === "/api/auth/config" ? { required: false } : path === "/api/servers" ? [] : {} }) + : path === "/api/auth/config" ? { required: false } : path === "/api/servers" ? [server] : {} }) }) await page.goto(url) } diff --git a/tests/e2e/filters-layout.spec.ts b/tests/e2e/filters-layout.spec.ts index c78750ca..1b5a4457 100644 --- a/tests/e2e/filters-layout.spec.ts +++ b/tests/e2e/filters-layout.spec.ts @@ -1,5 +1,12 @@ import { test, expect } from "@playwright/test" import { mkdirSync } from "node:fs" +import { evoSettings, evoCatalog } from "./fixtures/evobgp" +import { parseEvoBgpCatalog } from "../../lib/evobgp-catalog" + +const catalog = parseEvoBgpCatalog({ ...evoCatalog, communities: [{ + id: "blackhole", value: "65535:666", name: "RFC Blackhole", description: "RTBH", + type: "standard", filterIds: [], serverCount: 2, prefixCount: null, action: "deny", enabled: true, +}] }) for (const device of ["desktop", "mobile"] as const) { test(`Filters: клавиатурный ввод и layout ${device}`, async ({ page }) => { @@ -27,6 +34,8 @@ for (const device of ["desktop", "mobile"] as const) { return route.fulfill({ json: path === "/api/filters/rules" ? { rulesets: id ? rulesets.filter(rs => rs.serverId === id) : rulesets, greTunnels: [], live: true } : path === "/api/servers" ? [1, 2].map(i => ({ id: i, name: i === 1 ? "Основной роутер" : "Резервный роутер", host: "192.0.2." + i, type: "exit-node", enabled: true, country: "RU", site: "CORE", asn: "65001", status: "online", latency: 3 })) : path === "/api/filters/gre-tunnels" ? { tunnels: [tunnel(id ?? "1")] } + : path === "/api/evobgp/settings" ? evoSettings + : path === "/api/evobgp/catalog" ? catalog : path === "/api/recursive-routes" ? { routes: [], stale: false } : path === "/api/auth/config" ? { required: false } : {} }) }) @@ -53,6 +62,7 @@ for (const device of ["desktop", "mobile"] as const) { await expect(dialog.getByRole("alert")).toContainText("BGP Community обязательно") const community = dialog.getByRole("combobox", { name: /BGP Community/ }) await community.fill("65535") + await expect(page.getByRole("option", { name: /65535:666/ })).toBeVisible() await page.keyboard.press("ArrowDown") await page.keyboard.press("Enter") await expect(community).toHaveValue("65535:666")