# Test Cases: Enduro Trails — Фаза 3 «Умный маршрут» **Версия:** 1.0 **Дата:** 2026-05-04 **Автор:** Стрим 🌊 **Статус:** Готов к ревью **Связан с:** BRD_PHASE3.md --- ## Соглашения - **Precondition** — состояние системы до теста - **Steps** — шаги воспроизведения - **Expected** — ожидаемый результат - **Priority:** P1 (блокер) / P2 (важный) / P3 (желательный) - **URL:** `https://openclaw.mva154.duckdns.org/enduro/` --- ## TC-F03: Человекочитаемое время ### TC-F03-01 — Время меньше часа **Priority:** P1 **Precondition:** Маршрут построен, OSRM вернул duration **Input:** `duration_s = 2700` (45 минут) **Expected:** отображается `45 мин` **Not expected:** `2700`, `45`, `0 ч 45 мин` --- ### TC-F03-02 — Ровно час **Priority:** P1 **Input:** `duration_s = 3600` **Expected:** `1 ч` **Not expected:** `1 ч 0 мин`, `60 мин` --- ### TC-F03-03 — Часы и минуты **Priority:** P1 **Input:** `duration_s = 9300` (155 минут) **Expected:** `2 ч 35 мин` **Not expected:** `155 мин`, `2.58 ч` --- ### TC-F03-04 — Ровно сутки **Priority:** P2 **Input:** `duration_s = 86400` **Expected:** `1 дн` **Not expected:** `24 ч`, `1 дн 0 ч` --- ### TC-F03-05 — Больше суток **Priority:** P2 **Input:** `duration_s = 93600` (26 часов) **Expected:** `1 дн 2 ч` **Not expected:** `26 ч`, `1 дн 2 ч 0 мин` --- ### TC-F03-06 — Дни, часы и минуты **Priority:** P2 **Input:** `duration_s = 165000` (2750 минут = 1 дн 21 ч 50 мин) **Expected:** `1 дн 21 ч 50 мин` **Not expected:** `2750 мин`, `45 ч 50 мин` --- ### TC-F03-07 — Ноль секунд (граничный случай) **Priority:** P3 **Input:** `duration_s = 0` **Expected:** `0 мин` **Not expected:** ошибка, пустая строка, `NaN` --- ### TC-F03-08 — Время применено везде **Priority:** P1 **Steps:** 1. Построить маршрут A→B 2. Проверить компактную карточку маршрута 3. Раскрыть карточку «Подробнее» 4. Проверить развёрнутую карточку **Expected:** во всех местах время в формате `X ч Y мин`, нигде нет «минут» как числа > 60 --- ## TC-F01: Альтернативные маршруты ### TC-F01-01 — Базовое построение альтернатив **Priority:** P1 **Precondition:** Карта открыта, маркеры A и B не установлены **Steps:** 1. Кликнуть на карте — установить точку A (например, Москва) 2. Кликнуть на карте — установить точку B (например, Тверь, ~170 км) 3. Нажать кнопку «Дикий путь» 🗺️ **Expected:** - На карте появляются 2–5 маршрутов разными цветами - Каждый маршрут имеет свой уникальный цвет из палитры (синий, зелёный, фиолетовый, оранжевый, серый) - Появляется панель с карточками вариантов - Каждая карточка содержит: номер варианта, цветную точку, дистанцию, время, полоску покрытия --- ### TC-F01-02 — Визуальное различие маршрутов **Priority:** P1 **Precondition:** Построены 3+ маршрута **Expected:** - Все маршруты видны на карте одновременно - Цвета не повторяются - Маршруты не сливаются визуально (разная толщина или прозрачность для неактивных) --- ### TC-F01-03 — Hover на карточке подсвечивает маршрут **Priority:** P2 **Precondition:** Построены 3+ маршрута **Steps:** 1. Навести мышь на карточку «Вариант 2» **Expected:** - Маршрут варианта 2 на карте становится жирнее/ярче - Остальные маршруты становятся тусклее - При уходе мыши — возврат к исходному состоянию --- ### TC-F01-04 — Выбор маршрута кликом на карточку **Priority:** P1 **Steps:** 1. Построить маршруты 2. Кликнуть на карточку «Вариант 3» **Expected:** - Вариант 3 выделен в панели (рамка/фон) - На карте вариант 3 отображается жирнее остальных - Кнопка «Скачать GPX» становится активной --- ### TC-F01-05 — Выбор маршрута кликом на линию карты **Priority:** P2 **Steps:** 1. Построить маршруты 2. Кликнуть на линию маршрута на карте **Expected:** - Соответствующая карточка в панели выделяется - Маршрут становится активным --- ### TC-F01-06 — Только один маршрут (нет альтернатив) **Priority:** P2 **Precondition:** Точки A и B очень близко (< 5 км) или OSRM вернул 1 маршрут **Expected:** - Показывается 1 карточка - Нет сообщения об ошибке - Опционально: подпись «Альтернативных маршрутов не найдено» --- ### TC-F01-07 — Кнопка «Сбросить» **Priority:** P1 **Precondition:** Построены маршруты, установлены маркеры A и B **Steps:** 1. Нажать кнопку «Сбросить» **Expected:** - Все маршруты исчезают с карты - Маркеры A и B удалены - Панель карточек скрывается - Карта возвращается в исходное состояние --- ### TC-F01-08 — Повторное построение маршрута **Priority:** P1 **Steps:** 1. Построить маршруты 2. Переставить точку B в другое место 3. Нажать «Дикий путь» снова **Expected:** - Старые маршруты исчезают - Появляются новые маршруты для новых точек - Нет задвоения линий на карте --- ### TC-F01-09 — Максимум 5 вариантов **Priority:** P2 **Expected:** - Никогда не показывается больше 5 карточек - Если OSRM вернул 5 — показываем 5 --- ## TC-F02: Статистика маршрута ### TC-F02-01 — Компактная карточка содержит все элементы **Priority:** P1 **Precondition:** Маршрут построен **Expected:** каждая карточка содержит: - [ ] Цветную точку (совпадает с цветом маршрута на карте) - [ ] Номер варианта («Вариант 1») - [ ] Дистанцию в км (`142 км`) - [ ] Время в читаемом формате (`4 ч 35 мин`) - [ ] Цветную полоску покрытия - [ ] Процент грунта и асфальта (`86% грунт · 14% асфальт`) - [ ] Кнопку «Подробнее» --- ### TC-F02-02 — Полоска покрытия пропорциональна **Priority:** P2 **Precondition:** Маршрут с известной статистикой (например, 50% Lev1-2, 30% Lev3-5, 20% асфальт) **Expected:** - Жёлтый сегмент занимает ~50% ширины полоски - Красный — ~30% - Серый — ~20% - Ни один сегмент не исчезает полностью если > 0% --- ### TC-F02-03 — Цвета полоски совпадают с картой **Priority:** P2 **Expected:** - Lev1-2 в полоске — тот же жёлтый (#FFD700) что на карте - Lev3-5 — тот же красный (#FF4400) - Тропы — тот же красный пунктир (#cc0000) или близкий - Асфальт — серый --- ### TC-F02-04 — Развёрнутая карточка **Priority:** P1 **Steps:** 1. Построить маршрут 2. Нажать «Подробнее» на карточке **Expected:** - Карточка разворачивается - Показаны строки: Lev1-2, Lev3-5, Тропы, Асфальт - Каждая строка: иконка цвета + название + км + % - Итоговые строки: «Итого грунт» и «Итого асфальт» - Кнопки «📥 GPX» и «Выбрать маршрут» --- ### TC-F02-05 — Сумма процентов = 100% **Priority:** P1 **Expected:** track_lev12_pct + track_lev345_pct + path_pct + asphalt_pct = 100 (±1% погрешность округления) --- ### TC-F02-06 — Статистика не ломает UI при ошибке бэкенда **Priority:** P1 **Precondition:** Бэкенд вернул маршрут без поля `stats` (или stats = null) **Expected:** - Маршрут отображается на карте - Карточка показывает дистанцию и время - Полоска покрытия отсутствует или показывает «нет данных» - Нет JS-ошибок в консоли, UI не ломается --- ### TC-F02-07 — Карточки не перекрывают карту **Priority:** P2 **Steps:** 1. Построить 5 маршрутов 2. Проверить что карта за панелью кликабельна **Expected:** - Панель карточек расположена сбоку (десктоп) или снизу (мобиле) - Карта за панелью остаётся интерактивной --- ## TC-F04: Промежуточные точки ### TC-F04-01 — Добавление промежуточной точки **Priority:** P1 **Precondition:** Маршрут A→B построен **Steps:** 1. Нажать кнопку «+ Точка» 2. Кликнуть на карте в произвольном месте между A и B **Expected:** - На карте появляется маркер промежуточной точки (визуально отличается от A/B) - В панели точек появляется строка «1» с координатами и кнопкой ✕ - Маршрут перестраивается через новую точку: A→C→B - Режим «добавить точку» деактивируется --- ### TC-F04-02 — Маркер промежуточной точки отличается от A/B **Priority:** P2 **Expected:** - Маркер A — зелёный с буквой A - Маркер B — красный с буквой B - Промежуточные — белые с цветной обводкой и номером (1, 2, ...) --- ### TC-F04-03 — Несколько промежуточных точек **Priority:** P1 **Steps:** 1. Добавить 3 промежуточные точки последовательно **Expected:** - Маршрут строится A→C1→C2→C3→B - В панели точек 5 строк: A, 1, 2, 3, B - Все маркеры видны на карте --- ### TC-F04-04 — Перетаскивание промежуточной точки **Priority:** P1 **Steps:** 1. Добавить промежуточную точку 2. Перетащить её маркер на карте в другое место **Expected:** - Во время перетаскивания маршрут перестраивается (с debounce ~300ms) - После отпускания маршрут зафиксирован в новом положении - Координаты в панели точек обновляются --- ### TC-F04-05 — Удаление промежуточной точки **Priority:** P1 **Steps:** 1. Добавить 2 промежуточные точки 2. Нажать ✕ рядом с точкой «1» в панели **Expected:** - Точка «1» удалена из панели - Маркер исчез с карты - Маршрут перестроился: A→C2→B - Нумерация обновилась --- ### TC-F04-06 — Изменение порядка точек **Priority:** P2 **Steps:** 1. Добавить 2 промежуточные точки C1 и C2 2. Перетащить строку C2 выше C1 в панели точек **Expected:** - Порядок в панели: A, C2, C1, B - Маршрут перестроился: A→C2→C1→B --- ### TC-F04-07 — Лимит промежуточных точек **Priority:** P2 **Steps:** 1. Добавить 8 промежуточных точек (максимум) 2. Попытаться добавить 9-ю **Expected:** - Кнопка «+ Точка» неактивна или показывает предупреждение - 9-я точка не добавляется - Сообщение: «Максимум 8 промежуточных точек» --- ### TC-F04-08 — Перестройка маршрута не блокирует UI **Priority:** P2 **Steps:** 1. Добавить промежуточную точку 2. Быстро перетащить её несколько раз подряд **Expected:** - UI не зависает - Карта остаётся интерактивной во время перестройки - Финальный маршрут соответствует последней позиции точки --- ## TC-F05: Экспорт GPX ### TC-F05-01 — Кнопка GPX неактивна без маршрута **Priority:** P1 **Precondition:** Маршрут не построен **Expected:** кнопка «Скачать GPX» задизейблена или скрыта --- ### TC-F05-02 — Базовый экспорт GPX **Priority:** P1 **Steps:** 1. Построить маршрут A→B 2. Выбрать вариант 3. Нажать «Скачать GPX» **Expected:** - Браузер скачивает файл - Имя файла: `enduro-YYYYMMDD-HHMMSS.gpx` - Файл открывается без ошибок в текстовом редакторе --- ### TC-F05-03 — GPX содержит трек **Priority:** P1 **Steps:** 1. Скачать GPX 2. Открыть файл, проверить структуру **Expected:** ```xml Enduro route YYYY-MM-DD 142 км · 86% грунт ... ``` --- ### TC-F05-04 — GPX содержит waypoints (точки маршрута) **Priority:** P1 **Precondition:** Маршрут с промежуточными точками **Expected:** в GPX присутствуют `` для точек A, промежуточных и B с именами («Старт», «Точка 1», «Финиш») --- ### TC-F05-05 — GPX содержит флажки/метки **Priority:** P1 **Precondition:** На карте расставлены метки (F-06) **Expected:** в GPX присутствуют `` для каждой метки с её именем и иконкой --- ### TC-F05-06 — Уникальное имя файла **Priority:** P2 **Steps:** 1. Скачать GPX 2. Подождать 1 секунду 3. Скачать GPX снова **Expected:** два файла с разными именами (разный timestamp), не перезаписывают друг друга --- ### TC-F05-07 — GPX валиден для OsmAnd **Priority:** P2 **Steps:** 1. Скачать GPX 2. Загрузить в OsmAnd (или валидатор gpx.studio) **Expected:** - Трек отображается на карте OsmAnd - Waypoints видны как точки - Нет ошибок парсинга --- ### TC-F05-08 — Метаданные GPX корректны **Priority:** P2 **Expected:** - `` содержит дату в формате YYYY-MM-DD - `` содержит дистанцию и % грунта - `