This commit is contained in:
2026-10-11 03:05:52 +07:00
parent 7fe5525a01
commit 5973eaf072
5 changed files with 684 additions and 4 deletions
+58
View File
@@ -27,3 +27,61 @@ python3 tests/venue/https.py --docker
python3 tests/venue/dns.py --docker
python3 tests/venue/dns.py --server 192.168.10.155
```
## Полный flow ED-029, этап 8
```sh
python3 tests/venue/flow.py
python3 tests/venue/flow.py --browser
```
`flow.py` собирает актуальный Go/Vue-код во временном каталоге, поднимает
одноразовые prod/venue-серверы с отдельными PostgreSQL и RustFS в Docker-сети
`--internal`, затем удаляет только свои контейнеры, тома и сеть. Работающие
окружения, файлы `prod`/`venue`, их настройки и Cudy не меняются. Требуются
установленные Go, Node/npm, frontend-зависимости и доступ к Docker; образы
`postgres:15`, `rustfs/rustfs:latest` и `alpine:3.22` должны быть доступны локально
(скрипт использует `--pull=never`). SMTP источника направлен в локальный sink,
который закрывает соединение; успешная отправка писем не проверяется.
Проверяются оба формата (`offline` и `online`): экспорт и импорт настоящего ZIP,
исходные ссылки команд/билетов, статусы участия, QR/PDF, приём билетов и его
конкурентность, новые локальные команды/билеты, ходы и материалы, запрет ходов
до старта/на паузе/после завершения, перезапуск всех venue-сервисов, ответы,
оценивание, результаты и повторный импорт без потери прогресса. Дополнительно
запускаются PostgreSQL-регрессии gameplay/lifecycle, tickets, MCP и app. Выдача
токенов писем имитируется только в тестовой БД; решения капитанов выполняются
через штатный API. Возврат результатов на источник не выполняется.
`--browser` требует Firefox с Marionette и запускает отдельный чистый стенд.
Реальные интерфейсы проходят экспорт, скачивание, загрузку ZIP, проверку билета,
ходы, выдачу материала, оценивание и завершение на 1440 px (`online`) и 390 px
(`offline`). Проверяются клавиатурный focus, отказ на ход с сохранением ввода,
блокировка повторной отправки и кнопки на паузе при уже введённом коде.
Локальный HTTP-прокси переключает один публичный адрес между двумя реальными
backend, имитируя смену DNS; API-ответы не подменяются. Тестовые ссылки, ZIP,
профиль Firefox и сборки остаются во временном каталоге до конца прогона.
### Ручная контрольная точка этапа 8
Автоматический прогон не заменяет проверку телефонов и камеры. После отдельного
обновления реальной площадки актуальными артефактами, только на тестовой игре:
1. На источнике подготовить пакет с заранее выданными билетами и QR команд;
скачать и импортировать его на venue через интерфейс.
2. Отключить WAN и мобильные данные. На Android/iPhone открыть прежние ссылки
билета и команды через Wi-Fi площадки, проверить доверенный HTTPS.
3. Проверить билет у организатора и принять его; повтор должен показывать
использованный билет. Проверить QR камерой там, где браузер поддерживает
сканирование; при отсутствии поддержки проверить ручную вставку ссылки.
4. Начать игру, выполнить ход, выдать материал, поставить на паузу с введённым
следующим кодом: ход должен блокироваться. Продолжить и выполнить этот ход.
5. Проверить правила формата: в `offline` материалы выдаёт организатор и нет
цифровых ответов; в `online` игрок сохраняет ответ. Завершить игру, выставить
баллы и открыть результаты; игрок должен увидеть сообщение о завершении.
6. Повторить импорт исходного ZIP: билеты и локальный прогресс должны сохраниться.
Сообщить результат этой контрольной точки для приёмки этапа 8.
Нагрузка на 100 клиентов, покрытие Wi-Fi, ZIP на 1 ГиБ и возврат результатов
относятся к отдельным проверкам/этапам. До готовности возврата использовать
только тестовые игры.