# Тест-кейсы: Рельеф (Terrain Layer) — Фаза 5.4

**Дата:** 2026-05-11  
**Версия BRD:** BRD_TERRAIN.md  
**Исполнители:** Dev (автотесты + деплой), Стрим (ручная проверка), Слава (финальная приёмка)

---

## Распределение

| Кто | Что |
|-----|-----|
| 🤖 Dev | TC-01..TC-06 — данные и деплой (автоматически, в процессе реализации) |
| 🌊 Стрим | TC-07..TC-22 — ручная проверка через браузер/curl после деплоя |
| 👤 Слава | Финальная приёмка — только после «✅ Всё зелёное» от Стрим |

---

## Блок 1: Данные и инфраструктура (Dev)

### TC-01 — SRTM тайлы скачаны
**Исполнитель:** Dev  
**Проверка:**
```bash
ls /home/slin/enduro-trails/data/srtm/*.hgt | wc -l
# Ожидаемо: >= 30 файлов
```
**Ожидаемый результат:** ≥30 `.hgt` файлов в директории

---

### TC-02 — Тайлы hypso сгенерированы
**Исполнитель:** Dev  
**Проверка:**
```bash
find /home/slin/enduro-trails/data/terrain/hypso -name "*.png" | wc -l
# Ожидаемо: > 1000 файлов (зумы 5-15)
```
**Ожидаемый результат:** PNG тайлы присутствуют для зумов 5-15

---

### TC-03 — Тайлы hillshade сгенерированы
**Исполнитель:** Dev  
**Проверка:**
```bash
find /home/slin/enduro-trails/data/terrain/hillshade -name "*.png" | wc -l
# Ожидаемо: > 500 файлов (зумы 10-15)
```
**Ожидаемый результат:** PNG тайлы присутствуют для зумов 10-15

---

### TC-04 — Тайл hypso доступен через nginx
**Исполнитель:** Dev  
**Проверка:**
```bash
curl -o /dev/null -s -w "%{http_code}" \
  "https://openclaw.mva154.duckdns.org/enduro/terrain/hypso/8/75/42.png"
# Ожидаемо: 200
```
**Ожидаемый результат:** HTTP 200, Content-Type: image/png

---

### TC-05 — Тайл hillshade доступен через nginx
**Исполнитель:** Dev  
**Проверка:**
```bash
curl -o /dev/null -s -w "%{http_code}" \
  "https://openclaw.mva154.duckdns.org/enduro/terrain/hillshade/12/2400/1340.png"
# Ожидаемо: 200
```
**Ожидаемый результат:** HTTP 200, Content-Type: image/png

---

### TC-06 — Cache-Control заголовок
**Исполнитель:** Dev  
**Проверка:**
```bash
curl -I "https://openclaw.mva154.duckdns.org/enduro/terrain/hypso/8/75/42.png" \
  | grep -i cache-control
# Ожидаемо: Cache-Control: public, immutable
```
**Ожидаемый результат:** `Cache-Control: public, immutable` в заголовках

---

## Блок 2: Фронтенд — кнопка и попап (Стрим)

### TC-07 — Кнопка 🏔️ присутствует в toolbar
**Исполнитель:** Стрим  
**Шаги:** Открыть https://openclaw.mva154.duckdns.org/enduro/  
**Ожидаемый результат:** Кнопка 🏔️ видна в toolbar, после кнопки слоёв, перед линейкой  
**Проверка:** `curl` + grep по `terrain-toggle` в HTML

---

### TC-08 — Попап открывается по нажатию
**Исполнитель:** Стрим  
**Шаги:** Нажать кнопку 🏔️  
**Ожидаемый результат:** Появляется попап с двумя чекбоксами «Цветной рельеф» и «Теневой рельеф»

---

### TC-09 — Попап закрывается повторным нажатием
**Исполнитель:** Стрим  
**Шаги:** Нажать 🏔️ → попап открылся → нажать 🏔️ снова  
**Ожидаемый результат:** Попап закрылся

---

### TC-10 — Попап закрывается по тапу вне
**Исполнитель:** Стрим  
**Шаги:** Открыть попап → кликнуть на карту  
**Ожидаемый результат:** Попап закрылся

---

### TC-11 — Теневой чекбокс disabled на малом зуме
**Исполнитель:** Стрим  
**Шаги:** Зум 8 → открыть попап  
**Ожидаемый результат:** Чекбокс «Теневой рельеф» серый (disabled), видна подпись «Доступно при приближении»

---

### TC-12 — Теневой чекбокс enabled на зуме 10+
**Исполнитель:** Стрим  
**Шаги:** Зум 10 → открыть попап  
**Ожидаемый результат:** Чекбокс «Теневой рельеф» активен, подпись скрыта

---

## Блок 3: Слои на карте (Стрим)

### TC-13 — Цветной рельеф включается
**Исполнитель:** Стрим  
**Шаги:** Зум 6 → 🏔️ → включить «Цветной рельеф»  
**Ожидаемый результат:** На карте появляется цветная заливка рельефа (зелёный/жёлтый/коричневый)

---

### TC-14 — Цветной рельеф выключается
**Исполнитель:** Стрим  
**Шаги:** Включить → выключить «Цветной рельеф»  
**Ожидаемый результат:** Цветная заливка исчезает, карта как была

---

### TC-15 — Теневой рельеф включается на зуме 12
**Исполнитель:** Стрим  
**Шаги:** Зум 12 → 🏔️ → включить «Теневой рельеф»  
**Ожидаемый результат:** Появляются тени на склонах и оврагах

---

### TC-16 — Теневой рельеф не виден на зуме < 10 даже если включён
**Исполнитель:** Стрим  
**Шаги:** Включить «Теневой» на зуме 12 → отзумить до зума 8  
**Ожидаемый результат:** Тени исчезают (слой скрыт), чекбокс остаётся checked

---

### TC-17 — Теневой рельеф возвращается при приближении
**Исполнитель:** Стрим  
**Шаги:** Продолжение TC-16 → зумить обратно до 10+  
**Ожидаемый результат:** Тени снова появляются (чекбокс был checked)

---

### TC-18 — Оба слоя одновременно
**Исполнитель:** Стрим  
**Шаги:** Зум 12 → включить оба чекбокса  
**Ожидаемый результат:** Видны и цвет рельефа, и тени поверх. Дороги видны поверх рельефа.

---

### TC-19 — Рельеф под дорогами (z-index)
**Исполнитель:** Стрим  
**Шаги:** Включить оба слоя, зум 12  
**Ожидаемый результат:** Дороги и треки видны поверх рельефа, не перекрываются

---

### TC-20 — Кнопка подсвечивается при активном слое
**Исполнитель:** Стрим  
**Шаги:** Включить хотя бы один слой  
**Ожидаемый результат:** Кнопка 🏔️ подсвечена (класс `active`)

---

### TC-21 — Кнопка не подсвечена когда оба выключены
**Исполнитель:** Стрим  
**Шаги:** Выключить оба слоя  
**Ожидаемый результат:** Кнопка 🏔️ без подсветки

---

## Блок 4: Персистентность (Стрим)

### TC-22 — Состояние сохраняется после перезагрузки
**Исполнитель:** Стрим  
**Шаги:**
1. Включить «Цветной рельеф», выключить «Теневой»
2. Перезагрузить страницу (F5)
**Ожидаемый результат:** «Цветной» включён, «Теневой» выключен — как было до перезагрузки

---

### TC-23 — Оба выключены после перезагрузки (дефолт)
**Исполнитель:** Стрим  
**Шаги:** Выключить оба → перезагрузить  
**Ожидаемый результат:** Оба чекбокса сняты, слои не видны

---

## Блок 5: Мобильный (Стрим — через DevTools mobile emulation)

### TC-24 — Попап не перекрывает кнопки на мобильном
**Исполнитель:** Стрим  
**Шаги:** DevTools → iPhone 14 → открыть попап  
**Ожидаемый результат:** Попап виден полностью, не перекрывает toolbar и кнопки масштаба

---

### TC-25 — Тап вне попапа закрывает его на мобильном
**Исполнитель:** Стрим  
**Шаги:** Мобильная эмуляция → открыть попап → тапнуть на карту  
**Ожидаемый результат:** Попап закрылся

---

## Итого

| Блок | Тест-кейсов | Исполнитель |
|------|-------------|-------------|
| 1. Данные и инфраструктура | TC-01..TC-06 (6 шт) | 🤖 Dev |
| 2. Кнопка и попап | TC-07..TC-12 (6 шт) | 🌊 Стрим |
| 3. Слои на карте | TC-13..TC-21 (9 шт) | 🌊 Стрим |
| 4. Персистентность | TC-22..TC-23 (2 шт) | 🌊 Стрим |
| 5. Мобильный | TC-24..TC-25 (2 шт) | 🌊 Стрим |
| **Итого** | **25 тест-кейсов** | |

---

## Порядок работы

```
Dev реализует → деплоит → сообщает Стрим
    ↓
Стрим прогоняет TC-07..TC-25 (ручные)
    ↓
Баги → Dev фиксит → Стрим перепроверяет
    ↓
Всё зелёное → Стрим даёт отмашку Славе
```
