fix(tests): завершить лабораторную приёмку и обновить фикстуру удаления

This commit is contained in:
Denozordec committed 2026-10-15 20:30:07 +07:00
1 parent 481688e72a
commit 6210f34740
9 files changed
+185 -32

No files matched your search

+7 -7
View File
@@ -1,6 +1,6 @@
# Кандидат итоговой приёмки UX/UI — 2026-10-15
# Итоговая лабораторная приёмка UX/UI — 2026-10-15
Статус: **основная UI-регрессия263 принята; отдельная context-регрессия264 запланирована**. Этот документ не разрешает выпуск, push или развёртывание в production. Этап12.5 пока открыт.
Статус: **основной UX/UI-план, включая этап12.5, завершён в границах предоставленного тестового стенда**. Перечисленные ниже внешние ограничения сохраняются. Production-выпуск и push не выполнялись.
## Проверенный контур
@@ -19,11 +19,11 @@
| Общая оболочка, доступность и адаптивность |260/261:120 уникальных default states30 экранов, обе темы/1440 и320px; профильные клавиатурные проверки и исправленный фокус при смене URL | Результаты разных фаз сохранены; это не полный ручной screen-reader аудит и не все состояния каждой формы |
| Достоверность данных и операций | Unknown/partial состояния и подтверждение операций проверены профильными наборами и реальными сценариями журнала; в259 проверены native ID/key/fingerprint, TLS и canonical dates | Успех HTTP сам по себе не принят за применение; произвольные внешние конфигурации не охвачены |
| Производительность | Большие списки — локальная12.3.83;260 — synthetic timings с отдельным ожиданием ответов API;262 —10min REST soak/252 запросов | Это измерения конкретного стенда, без заявления field CWV, maximum throughput или бесконечной устойчивости |
| Сборки и регрессия | Backend257:25 profiles; certificates258:9 scripts/build/lint; frontend261:production build, source528 matched; профильные E2E260/261 пройдены | UI263:1393 initial +3 targeted =1396 unique passed,0 skipped/flaky; context-набор ожидает отдельного264, исторический результат не выдан за новый |
| Сборки и регрессия | Backend257:25 profiles; certificates258:9 scripts/build/lint; frontend261:production build, source528 matched; профильные E2E260/261 пройдены | UI263:1393 initial +3 targeted =1396 unique passed; отдельный context264:219 initial +2 targeted =221 unique passed;0 skipped/flaky в обоих наборах. Это разные прогоны, без суммирования повторов |
| Реальные интеграции | Portal/Telegram195–201, Android227, S3/limited bridge restore/retention228–240, GeoIP mirror242, контейнеры248, ACME250/renewal259 | Успех этих сценариев не подтверждает все сторонние клиенты/провайдеры и многопроцессную установку |
| ReUI | Frame/base-nova/установленные компоненты; semantic Badge variants; vendor/theme/motion не изменены; checklist и scoped проверки зафиксированы260/261 | Вне проверенных состояний могут оставаться проблемы; автоматический axe не является полной сертификацией WCAG |
Краткие протоколы: [UI260](ux-ui/acceptance/ui260-summary.json), [UI261](ux-ui/acceptance/ui261-summary.json), [REST262](ux-ui/acceptance/rest262-summary.json), [UI263](ux-ui/acceptance/ui263-summary.json), [ACME259](ux-ui/acceptance/acme259-native-rotation.json).
Краткие протоколы: [UI260](ux-ui/acceptance/ui260-summary.json), [UI261](ux-ui/acceptance/ui261-summary.json), [REST262](ux-ui/acceptance/rest262-summary.json), [UI263](ux-ui/acceptance/ui263-summary.json), [context264](ux-ui/acceptance/context264-summary.json), [ACME259](ux-ui/acceptance/acme259-native-rotation.json).
## Что остаётся за пределами подтверждённого контура
@@ -40,10 +40,10 @@
## Состояние стенда и сохранность
После ACME259 восстановлены исходные SSL/native certificates/files/export и приватные SQL-настройки; собственные DNS/issue jobs и приватные ACME fixtures удалены. Контрольные проверки обоих CHR успешны; пароли не менялись. Последующие260–262 не изменяли конфигурацию устройств. ECMP261 проверялся как локальный черновик, затем возвращён off.
После ACME259 восстановлены исходные SSL/native certificates/files/export и приватные SQL-настройки; собственные DNS/issue jobs и приватные ACME fixtures удалены. Контрольные проверки обоих CHR успешны; пароли не менялись. Последующие260–264 не изменяли конфигурацию устройств. ECMP261 проверялся как локальный черновик, затем возвращён off.
Коммиты только локальные, без push. В полном UI-наборе263 фактический Next dev manifest направляет unmocked proxy на недоступный `127.0.0.1:9`; исходные371 screenshot-файл сохранены перед запуском и сверены:124 перезаписанных восстановлены, SHA-256 всех371 совпал; два исторических JSON также восстановлены.
## Следующий шаг
## Завершение и дальнейшая работа
Выполнить отдельный context-набор264, затем завершить акт для предоставленного лабораторного контура с сохранением перечисленных ограничений. Публикация и production-развёртывание в текущий объём не входят.
Критерии согласованного этапа12 — production build, тесты, ReUI checklist и перечень оставшихся ограничений — выполнены в указанном контуре. На предоставленном стенде обязательных незавершённых блоков основного плана нет. Для расширения покрытия следует выбрать конкретную группу из таблицы и обеспечить её условия; повторять принятые наборы без изменений не требуется. Публикация и production-развёртывание в текущий объём не входят.
+11 -1
View File
@@ -1,6 +1,6 @@
# UX/UI: протокол внешней приёмки 12.5
Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются.
Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись.
IPsec78: реальный PSK responder established, mode-config198.18.78.10 и online=true подтверждены API; точные собственные объекты удалены. Сертификатный/DN online, late failure и history restore остаются открытыми. [Отчёт](ux-ui/acceptance/ipsec-mode-config-2026-10-09.json), [журнал](ux-ui-progress.md).
@@ -18,6 +18,16 @@ OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/bro
BFD85: Up/Full/own route/Ping,4 live UI и loss/withdrawal/recovery приняты; exact own cleanup8 коллекций×2 passed. Withdrawal5,245ms не подтверждает sub-second BFD timing; этот вопрос открыт. Runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-bfd-loss-2026-10-09.json).
## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15)
Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json).
TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись.
Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production.
Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0.
## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15)
Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json).
+24 -14
View File
@@ -1,9 +1,19 @@
# План реализации UX/UI по пятичасовым окнам
Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются.
Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись.
Общий план проекта MikrotikManager. Основан на согласованном плане из задачи; точка продолжения обновлена 2026-10-15. Источник фактического прогресса, проверок и ограничений — [журнал реализации](ux-ui-progress.md). Этот документ задаёт объём и критерии завершения, журнал фиксирует результат.
## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15)
Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json).
TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись.
Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production.
Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0.
## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15)
Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json).
@@ -380,7 +390,7 @@ Production backend/frontend ux-backups237 собраны и развёрнуты
## Остаток приёмки по группам — 2026-10-15
Этапы0–11 завершены в локальных границах. Этап12.5 открыт. Ниже семь групп охвата; это не семь обязательных новых этапов и не обещание числа окон. Принятые сценарии не запускать заново без изменения кода или найденного риска. Для расширения стенда отдельно нужны перечисленные условия.
Этапы0–12 завершены в пределах документированной лабораторной приёмки2026-10-15. Ниже семь групп дополнительного охвата; это не обязательные новые этапы основного плана и не обещание числа окон. Принятые сценарии не запускать заново без изменения кода или найденного риска. Для расширения стенда отдельно нужны перечисленные условия.
| Группа | Подтверждено | Открытый объём / условие |
| --- | --- | --- |
@@ -389,8 +399,8 @@ Production backend/frontend ux-backups237 собраны и развёрнуты
| Масштаб и устойчивость | Контролируемые PG lock/dedupe/loss/recovery, отдельные multi-process сценарии194/200/201 | Несколько полноценных backend/worker со всеми writers, длительный rekey/traffic, физические потери WAN/DB и maximum throughput |
| Хранилища и внешние jobs | Реальные Portal/Telegram195–201, Selectel S3/limited bridge restore/retention228–240, GeoIP mirror242; контейнеры248; production ACME250 и реальное renewal/rotation259 с trusted TLS/cleanup | Large native export/migration buckets/multi-instance S3; CA revocation отдельно не принят. Gitea publishing CI не запускался: действует no push. Direct licensed MaxMind отсутствует в текущей реализации |
| Расширенные сетевые конфигурации | GRE/WG/VXLAN/IPsec/OSPF/BFD/BGP в записанных сценариях, включая private IPv6 | from-pool/EUI-64/multiple-address import/export, outer IPv6, произвольная PKI/OID/path-length, независимые внешние peers и длительные переходы. BFD-only gate не гарантирован |
| UX, доступность и производительность | UI226, ARIA мастеров251, новая проверка260 текущего runtime описана выше | Default UI260/261:120 unique states30 экранов приняты в автоматическом scope; актуальная полная UI-регрессия263 и ручная screen-reader приёмка отдельно. Synthetic timing не field CWV, scoped axe не полная WCAG сертификация |
| Границы выпуска | Датированный журнал, протоколы и локальные коммиты без push | Подготовить итоговый перечень принятых конфигураций/исключений для решения о выпуске; лабораторный успех не объявлять приёмкой всех конфигураций |
| UX, доступность и производительность | UI226, ARIA мастеров251, новая проверка260 текущего runtime описана выше | Default UI260/261:120 unique states30 экранов приняты в автоматическом scope; основная регрессия263:1396 и context264:221 приняты; ручная screen-reader приёмка отдельно. Synthetic timing не field CWV, scoped axe не полная WCAG сертификация |
| Границы выпуска | Датированный журнал, протоколы и локальные коммиты без push | [Итоговый акт](ux-ui-acceptance-candidate.md) готов; production-выпуск не выполнялся, лабораторный успех не означает приёмку всех конфигураций |
Portal offline JWT действует доexp после logout/role change; это записанная граница198, не мгновенная revocation. Controlled Telegram unknown/retry201 не доказывает физическую потерю ACK в WAN. Архивные записи ниже отражают состояние на свою дату; актуальный статус задают эта таблица и верхняя точка продолжения.
@@ -470,19 +480,19 @@ flowchart LR
новый контекст ≠ старые данные; неизвестное ≠ ноль
```
## Текущая точка продолжения
## Текущая точка продолжения — 2026-10-15
По журналу этапы 0–8 завершены в границах локальной приёмки; внешние ограничения сохраняются. Этап 9 начат (блоки 9.1–9.34 — IPsec/GRE/VXLAN и переключение Firewall); этапы 10–12 не начаты. Этап 11 разделён: 11А — пользователи, контейнеры, сертификаты, резервирование; 11Б — оповещения, сбор данных, интеграции, релизы, настройки.
Этапы0–11 завершены в границах локальной приёмки; реальные сетевые операции и интеграции дополнительно проверены в12.5. Итоговый статус этапа12 и точный проверенный контур задаются [актом приёмки](ux-ui-acceptance-candidate.md) и верхней датированной записью [журнала](ux-ui-progress.md). Старое утверждение «этапы10–12 не начаты» удалено как не соответствующее результатам.
Подробные планы: [этап 6](ux-ui-stage-6.md), [этап 7](ux-ui-stage-7.md), [этап 8 и итоговая матрица](ux-ui-stage-8.md), [этап 9](ux-ui-stage-9.md).
| Группа | Завершённый объём | Документ |
| --- | --- | --- |
| 0–5 | Подготовка, операции, миграция таблиц и состояния данных | [Журнал](ux-ui-progress.md) |
| 6–8 | Оболочка, серверы, мониторинг, трафик и статистика | [Этап6](ux-ui-stage-6.md), [этап7](ux-ui-stage-7.md), [этап8](ux-ui-stage-8.md) |
| 9–10 | VPN, Firewall, Filters, маршрутизация и диагностика | [Этап9](ux-ui-stage-9.md), [этап10](ux-ui-stage-10.md) |
| 11А–11Б | Администрирование, оповещения, интеграции и настройки | [Этап11А](ux-ui-stage-11a.md), [этап11Б](ux-ui-stage-11b.md) |
| 12 | Общая регрессия и реальный стенд; ограничения перечислены отдельно | [Этап12](ux-ui-stage-12.md), [матрица](ux-ui-remaining-acceptance.md) |
Этап 8 завершён блоком 8.13: периоды и URL статистики, достоверность REST/SSE, защита от гонок, свежесть и разрывы графиков, месячный отчёт с каталогом неактивных серверов, адаптивность и профильная клавиатурная приёмка. Повреждённые ответы статистики показывают ошибку с повтором. Точный состав проверок и ограничений сохранён в журнале.
Ближайший оставшийся объём:
1. Этап 9: карта разделов и схема сохранены; удаление, импорт, создание, переключение, контекст экспорта и выбор пира WireGuard исправлены в 9.1–9.7; в 9.8 проверено подтверждение восстановления. В 9.9 исправлены разметка и сохранение подтверждения при ошибке у всех шести потребителей. В 9.10 исправлены ошибки и поздние ответы загрузки истории WireGuard. В 9.11 подтверждение восстановления проверено у остальных пяти потребителей. В 9.12 обработаны ошибка/повтор/поздние ответы истории IPsec. В 9.13 подключены ошибка/повтор/защита поздних ответов остальных четырёх разделов и общая валидация ревизий всех шести. В 9.14 исправлены подтверждение инициализации IPsec, сохранение формы и защита повторной отправки. В 9.15 проверены создание/редактирование пользователей IPsec и сохранение формы. В 9.16 проверены получение/повторный экспорт сертификатов, поздние ответы и соответствие отображаемого пароля архиву. В 9.17 подтверждены ответы удаления четырёх типов объектов IPsec и исправлен диалог повторов. В 9.18 исправлено подтверждение сохранения peer IPsec и поведение формы. В 9.19 исправлено подтверждение удаления GRE и сохранение диалога при ошибке. В 9.20 исправлено подтверждение включения/выключения GRE и защита повторов. В 9.21 исправлены подтверждение создания/сохранения GRE и защита формы. В 9.22 исправлены контейнер ответа, первоначальные KPI и сохранение данных при ошибке VXLAN. В 9.23 backend сообщает частичные сбои VXLAN, UI сохраняет данные неответивших устройств и показывает неизвестное состояние. В 9.24 добавлены схемы payload и тесты гонок VXLAN. В 9.25 подтверждены включение/отключение правил Firewall и защита повторов. В 9.26 подтверждены включение/отключение address-list с общим замком переключений. В 9.27 удаление правил/address-list перенесено в диалог с подтверждением API и защитой повторов. В 9.28 создание/редактирование правил и address-list требуют подтверждения API, сохраняют ввод/ошибку и блокируют повторы/закрытие. В 9.29 перемещение Firewall требует ok=true, откатывает порядок при ошибке и использует общий замок. В 9.30 восстановление истории подключено к общему замку, ручное обновление и открытие истории заблокированы во время записи. В 9.31 добавлены схемы ответа Firewall/серверов, сохранение последних данных при ошибке и поколение чтения с отменой применения при начале записи. В 9.32 backend сообщает частичные сбои по устройству/семейству/таблице, UI сохраняет недоступные срезы и блокирует изменения неполного среза. В 9.33 состояние изолировано по backend/режиму; поздние операции старого экрана не запускают чтение и не показывают уведомления в новом контексте. В 9.34 показано время получения срезов Firewall: успешные обновляются, недоступные сохраняют прежнее время или остаются неизвестными. В 9.35 сохранение Filters ожидает ok=true, сохраняет ввод при ошибке и блокирует повторную отправку/закрытие; live-спLine truncated
2. Сохранять контекст устройства, введённые значения при ошибке и подтверждать результат операций по API; локальные моки проверяют клиентские сценарии, реальные сетевые операции требуют тестового окружения.
3. В этапе 12 выполнить полный аудит доступности (скринридер, контраст), производительности и сквозную регрессию. Ограничения этапа 8 — удалённые серверы месячного каталога, отсутствие экспорта и автоматического переподключения SSE — остаются явно зафиксированными, без заявления о реализации.
Следующие разделы с номерами9.x и датами сентября/начала октября сохраняют исторические результаты. Они не отменяют актуальный статус выше и не задают новую очередь уже завершённых работ.
## Проверенные экраны Filters — блок 9.46
+12 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются.
Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,17 @@
| 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.3.83; внешняя12.5 открыта, блоки1–262. ACME259; default UI260/261:120 states30 экранов; REST262 ten-minute252 requests passed. Runtime backend258/frontend261. Следующий263 — итоговая локальная UI-регрессия. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Завершён2026-10-15 в границах предоставленного стенда:1396 UI/221 context,120 live states30 экранов, production builds/ReUI checklist и реальные интеграции. Ограничения — в [акте](ux-ui-acceptance-candidate.md); production-выпуск не выполнялся. |
## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15)
Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json).
TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись.
Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production.
Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0.
## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15)
+15 -5
View File
@@ -1,11 +1,21 @@
# Оставшаяся внешняя приёмка — 2026-10-15
Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются.
Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись.
Это актуальная матрица после 12.5.262. Исторические записи сохраняют версии и ограничения на момент выполнения; поздние проверки ниже уточняют их. Этап 12.5 открыт. Успех в двух CHR и одном backend не означает приёмку всех конфигураций, интеграций или полной регрессии.
Это матрица после12.5.264: основной план завершён в пределах предоставленного стенда; ниже сохранён дополнительный неподтверждённый охват. Исторические записи отражают состояние на дату выполнения. Успех на двух CHR и одном backend не означает приёмку всех конфигураций. Итоговые критерии и границы — в [акте](ux-ui-acceptance-candidate.md).
Стенд: Debian13/Compose, PostgreSQL18.6, два CHR RouterOS7.24.5. Backend `ux-certificates258`, frontend `ux-accessibility261`; production lab с195 использует AUTH_REQUIRED=true и Portal1.3.1. Подписанные JWT/RBAC проверялись в изолированных процессах. Все собственные объекты112 удалены, исходные13 коллекций×2 (включая logging/certificates/files/routes) проверены; пароли не менялись.
## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15)
Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json).
TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись.
Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production.
Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0.
## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15)
Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json).
@@ -376,7 +386,7 @@ Production backend/frontend ux-backups237 собраны и развёрнуты
## Остаток приёмки по группам — 2026-10-15
Этапы0–11 завершены в локальных границах. Этап12.5 открыт. Ниже семь групп охвата; это не семь обязательных новых этапов и не обещание числа окон. Принятые сценарии не запускать заново без изменения кода или найденного риска. Для расширения стенда отдельно нужны перечисленные условия.
Этапы0–12 завершены в пределах документированной лабораторной приёмки2026-10-15. Ниже семь групп дополнительного охвата; это не обязательные новые этапы основного плана и не обещание числа окон. Принятые сценарии не запускать заново без изменения кода или найденного риска. Для расширения стенда отдельно нужны перечисленные условия.
| Группа | Подтверждено | Открытый объём / условие |
| --- | --- | --- |
@@ -385,8 +395,8 @@ Production backend/frontend ux-backups237 собраны и развёрнуты
| Масштаб и устойчивость | Контролируемые PG lock/dedupe/loss/recovery, отдельные multi-process сценарии194/200/201 | Несколько полноценных backend/worker со всеми writers, длительный rekey/traffic, физические потери WAN/DB и maximum throughput |
| Хранилища и внешние jobs | Реальные Portal/Telegram195–201, Selectel S3/limited bridge restore/retention228–240, GeoIP mirror242; контейнеры248; production ACME250 и реальное renewal/rotation259 с trusted TLS/cleanup | Large native export/migration buckets/multi-instance S3; CA revocation отдельно не принят. Gitea publishing CI не запускался: действует no push. Direct licensed MaxMind отсутствует в текущей реализации |
| Расширенные сетевые конфигурации | GRE/WG/VXLAN/IPsec/OSPF/BFD/BGP в записанных сценариях, включая private IPv6 | from-pool/EUI-64/multiple-address import/export, outer IPv6, произвольная PKI/OID/path-length, независимые внешние peers и длительные переходы. BFD-only gate не гарантирован |
| UX, доступность и производительность | UI226, ARIA мастеров251, новая проверка260 текущего runtime описана выше | Default UI260/261:120 unique states30 экранов приняты в автоматическом scope; актуальная полная UI-регрессия263 и ручная screen-reader приёмка отдельно. Synthetic timing не field CWV, scoped axe не полная WCAG сертификация |
| Границы выпуска | Датированный журнал, протоколы и локальные коммиты без push | Подготовить итоговый перечень принятых конфигураций/исключений для решения о выпуске; лабораторный успех не объявлять приёмкой всех конфигураций |
| UX, доступность и производительность | UI226, ARIA мастеров251, новая проверка260 текущего runtime описана выше | Default UI260/261:120 unique states30 экранов приняты в автоматическом scope; основная регрессия263:1396 и context264:221 приняты; ручная screen-reader приёмка отдельно. Synthetic timing не field CWV, scoped axe не полная WCAG сертификация |
| Границы выпуска | Датированный журнал, протоколы и локальные коммиты без push | [Итоговый акт](ux-ui-acceptance-candidate.md) готов; production-выпуск не выполнялся, лабораторный успех не означает приёмку всех конфигураций |
Portal offline JWT действует доexp после logout/role change; это записанная граница198, не мгновенная revocation. Controlled Telegram unknown/retry201 не доказывает физическую потерю ACK в WAN. Архивные записи ниже отражают состояние на свою дату; актуальный статус задают эта таблица и верхняя точка продолжения.
+13 -1
View File
@@ -1,6 +1,6 @@
# Этап 12: итоговая приёмка UX/UI
Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются.
Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись.
План: [ux-ui-plan.md](ux-ui-plan.md). Фактические результаты: [ux-ui-progress.md](ux-ui-progress.md). Подготовлен после сводных проверок 11Б; завершение каждого блока требует локального коммита без push.
@@ -12,6 +12,8 @@
| 12.4 | Сквозная регрессия интерфейса, права, context; production/contracts/backend builds и ReUI checklist | Итоговая матрица с результатами и точными исключениями |
| 12.5 | Внешняя приёмка PG/RouterOS/Telegram/интеграций | Протокол тестового окружения; локальные моки не заменяют эту проверку |
Исходные условия ниже зафиксированы в начале этапа2026-10-03. Это исторический контекст; актуальные результаты и ограничения заданы верхней датированной записью и [итоговым актом](ux-ui-acceptance-candidate.md).
Сначала воспроизвести предполагаемые проблемы общей оболочки: health popover принимает только status:ok, тогда как shared health допускает подтверждённый legacy ok:true; проверить согласованность. Проверить реальные accessible names header triggers и skip link focus. Использовать установленный axe-core для автоматической части; отсутствие violations не означает полного соответствия или замену screen reader/manual проверки.
Клавиатурный сценарий должен предоставлять эквивалент действий мышью ([W3C SC 2.1.1](https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html)); программные имена/роли/состояния проверяются отдельно ([W3C SC 4.1.2](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html)). Проверка reflow включает 320 CSS px; широкие таблицы проверяются как отдельные области прокрутки, а не как разрешение переполнения страницы ([W3C SC 1.4.10](https://www.w3.org/WAI/WCAG22/Understanding/reflow.html)).
@@ -4152,6 +4154,16 @@ Real Portal/browser API, provider local verified: создан один job ро
Runtime backend ux-backup234/frontend ux-routing218 healthy; новое application image для volume-only fix не требовалось. Пароли CHR не менялись, S3 mutations0 в235, configs body/JWT не опубликованы, private local manifest удалён. Исходные10 missing local files не восстановлены и records не удалены. Force-recreate — не host reboot/power loss/fsync/DR приёмка. Далее236 — UX недоступных local files, затем version retention границы и оставшиеся7 группы матрицы; multi-instance guard не принимается. Этап12.5 открыт.
## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15)
Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json).
TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись.
Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production.
Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0.
## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15)
Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json).
+11 -1
View File
@@ -1,6 +1,6 @@
# Тестовый сервер UX/UI — 2026-10-10
Актуальное продолжение 2026-10-15: 263 — основной UI-набор принят:1393 initial +3 targeted =1396 уникальных сценариев, без пропусков; исходные371 screenshots и два исторических JSON восстановлены. Production backend258/frontend261. Далее264 — отдельная context-регрессия и итоговый акт; границы внешней приёмки сохраняются.
Актуальное состояние 2026-10-15: 264 — лабораторная приёмка основного UX/UI-плана завершена в документированных границах стенда. Приняты1396 основных UI и221 отдельных context-сценарий;120 live default states30 экранов. Runtime backend258/frontend261. Непроверенные внешние группы сохранены в итоговом акте; production-выпуск и push не выполнялись.
| Параметр | Проверенное состояние |
| --- | --- |
@@ -34,6 +34,16 @@ OSPF84: real GRE Full adjacency/private routes/Ping3/3 и4 live PC/320px URL/bro
BFD85: Up/Full/own route/Ping,4 live UI и loss/withdrawal/recovery приняты; exact own cleanup8 коллекций×2 passed. Withdrawal5,245ms не подтверждает sub-second BFD timing; этот вопрос открыт. Runtime routing83 без новой сборки. [Отчёт](ux-ui/acceptance/ospf-bfd-loss-2026-10-09.json).
## 12.5.264 — context-регрессия и завершение лабораторной приёмки (2026-10-15)
Отдельный playwright.ux-context.config.ts: initial219 passed/2 failed, skipped0/flaky0/global errors0. Два remove-кейса использовали running fixture и упирались в корректный запрет удаления после248. Для remove задан stopped, для stop сохранён running; проверка позднего результата после смены backend сохранена. Повторены ровно два отказавших remove-кейса:2 passed. Итого221 уникальный принятый сценарий, а не один зелёный исходный прогон. Проверены смена backend/режима данных, поздние чтения и результаты операций, ABA и сохранение нового контекста; набор включает backend-switch.e2e.ts и исключённые из основной конфигурации context-файлы. Это локальные HTTP mocks, без native операций. С основным263 приняты1396 основных и221 отдельных context-сценарий; повторные три263 не добавляются к уникальному числу. [Протокол по файлам](ux-ui/acceptance/context264-summary.json).
TypeScript и scoped ESLint тестовых изменений263/264 прошли. После тестов SHA-256371 исходных screenshots проверен, исторические JSON сохранены. Нового production кода после build261/backend258 нет, повторная сборка не требовалась. Runtime images повторно сверены через docker inspect, все четыре сервиса running, backend/Portal/PG healthy. Пароли и конфигурации CHR в263–264 не менялись.
Основной UX/UI-план и этап12 завершены **в границах предоставленного тестового стенда**: production builds, профильные backend-проверки,1396 UI/221 context,120 live default states30 экранов, реальные интеграционные сценарии и список ограничений сохранены. [Итоговый акт](ux-ui-acceptance-candidate.md) отделяет эти результаты от непроверенных ОС/ручного screen reader/публичного IPv6/независимых WAN/multi-instance/расширенной PKI/S3/внешней публикации. Это не приёмка всех конфигураций и не выпуск в production.
Устаревшая текущая точка плана, ошибочно называвшая этапы10–12 не начатыми, заменена актуальным индексом. Исторические датированные записи сохранены. Следующий шаг при расширении работ — выбрать конкретную дополнительную группу из матрицы и предоставить её стенд; бесконечный повтор принятых тестов не требуется. Коммиты локальные, push0.
## 12.5.263 — полная UI-регрессия и согласованный фокус выбранной строки (2026-10-15)
Основной Playwright-набор:1396 сценариев в235 файлах,39min39s. Первый прогон:1393 passed/3 failed, skipped0/flaky0/global errors0. Все три отказа — прежний тестовый контракт ServerTileRail в collector-probes-tables: после260 фокус находится на выбранном option, контейнер listbox больше не Tab stop. Исправлены только тестовые обращения к фокусу; URL, End/Home/стрелки, границы площадок, поиск, pagination, mobile Escape и axe сохранены. Повторены ровно три отказавших сценария:3 passed/12.6s. Итого1396 уникальных принятых сценариев; это не1399 и не один полностью зелёный исходный прогон. [Протокол и результаты по файлам](ux-ui/acceptance/ui263-summary.json).
@@ -0,0 +1,90 @@
{
"date": "2026-10-15",
"block": "12.5.264",
"status": "accepted",
"config": "playwright.ux-context.config.ts",
"initial": {
"startTime": "2026-10-15T13:19:22.980Z",
"duration": 564926.3859999999,
"expected": 219,
"skipped": 0,
"unexpected": 2,
"flaky": 0
},
"targeted": {
"startTime": "2026-10-15T13:29:02.404Z",
"duration": 10679.58,
"expected": 2,
"skipped": 0,
"unexpected": 0,
"flaky": 0
},
"uniqueAccepted": 221,
"failuresResolved": [
"containers-context.spec.ts:Контейнеры: поздняя команда/remove/false",
"containers-context.spec.ts:Контейнеры: поздняя команда/remove/true"
],
"cause": "The removal fixture was running; block248 requires confirmed stopped state before removal. Only the remove fixture is now stopped; stop cases stay running and all late-response/context assertions remain.",
"files": {
"alerts-context.spec.ts": 14,
"backend-switch.e2e.ts": 3,
"backups-context.spec.ts": 28,
"bgp-context.spec.ts": 4,
"certificates-context.spec.ts": 16,
"containers-context.spec.ts": 8,
"data-collection-context.spec.ts": 6,
"evobgp-context.spec.ts": 8,
"filters-context.spec.ts": 6,
"firewall-context.spec.ts": 4,
"geoip-context.spec.ts": 6,
"gre-context.spec.ts": 6,
"ipsec-context.spec.ts": 6,
"netflow-context.spec.ts": 10,
"network-map-context.spec.ts": 12,
"ospf-context.spec.ts": 8,
"probes-context.spec.ts": 8,
"recursive-routes-context.spec.ts": 8,
"route-optimizer-context.spec.ts": 8,
"settings-context.spec.ts": 10,
"system-database-context.spec.ts": 6,
"terminal-context.spec.ts": 8,
"uptime-context.spec.ts": 8,
"users-context.spec.ts": 8,
"vxlan-context.spec.ts": 4,
"wireguard-context.spec.ts": 8
},
"globalErrors": 0,
"rawReportSha256": "89a6d7ff6ae56acffe521c8b8689015d72b447af867718875d96366ef4338b83",
"mainSuite": {
"uniqueAccepted": 1396,
"evidence": "ui263-summary.json",
"disjointContextFiles": true
},
"scope": "Local mocked HTTP UI context regression; source switches, stale responses and ABA guards. Not native network operations or manual AT certification.",
"productionCodeChanged": false,
"productionBuildRepeated": false,
"reason": "Only tests/documentation changed after frontend261 production build and backend258 deployment.",
"labStage12": "completed within documented environment and exclusions",
"releaseOrPushPerformed": false,
"sourceHeadBeforeTestFix": "481688e7",
"testFilesChanged": [
"tests/e2e/containers-context.spec.ts"
],
"preservation": {
"screenshotsSha256Verified": 371,
"screenshotsRestoredDuringContextRun": 0,
"historicalBackupJsonUnchanged": true
},
"staticApiIsolation": {
"contextFiles": 25,
"broadApiMockInFile": 24,
"sharedBackupFixtureBroadApiMock": 1,
"backendSwitchBroadApiMock": true
},
"checks": {
"typescript": "passed",
"scopedEslint": "passed",
"currentLocalMarkdownReferences": 985,
"missingLocalReferences": 0
}
}
+2 -1
View File
@@ -12,8 +12,9 @@ for(const change of ["backend","mode"])for(const fails of [false,true])test("К
await expect(page.getByText("СТАРЫЙ КОНТЕЙНЕР",{exact:true})).toHaveCount(0);await expect(page.getByText(/СТАРАЯ ОШИБКА контейнеров/)).toHaveCount(0)
})
for(const action of ["stop","remove"])for(const fails of [false,true])test("Контейнеры: поздняя команда/"+action+"/"+fails,async({page})=>{
const commandContainer={...container,status:action==="remove"?"stopped":"running"}
let started=false,completed=false,release!:()=>void;const gate=new Promise<void>(r=>release=r)
await page.route("**/health",r=>r.fulfill({headers,json:{ok:true}}));await page.route("**/api/**",r=>{const p=new URL(r.request().url()).pathname;return r.fulfill({headers,json:p==="/api/auth/config"?{required:false}:p==="/api/servers"?[server]:state()})})
await page.route("**/health",r=>r.fulfill({headers,json:{ok:true}}));await page.route("**/api/**",r=>{const p=new URL(r.request().url()).pathname;return r.fulfill({headers,json:p==="/api/auth/config"?{required:false}:p==="/api/servers"?[server]:state([commandContainer])})})
await page.route("**/api/servers/1/containers/"+action,async r=>{started=true;await gate;try{await r.fulfill(fails?{headers,status:503,json:{error:"СТАРАЯ КОМАНДА ОТКАЗ"}}:{headers,json:{ok:true}})}catch{}finally{completed=true}})
await page.goto("/containers");await page.getByRole("button",{name:"Действия контейнера "+container.name}).click();await page.getByRole("menuitem",{name:action==="stop"?"Остановить":"Удалить",exact:true}).click()
if(action==="remove")await page.getByRole("alertdialog").getByRole("button",{name:"Удалить",exact:true}).click()