Files
enduro-trails/docs/work-items/ET-007/13-test-report.md
claude-bot 95a122f1f8
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 5s
CI / lint (pull_request) Successful in 3s
CI / test (pull_request) Successful in 5s
CI / build (push) Successful in 4s
CI / build (pull_request) Successful in 1s
test(ET-007): tester report - all unit tests pass, e2e skip (no Playwright)
2026-05-31 22:18:15 +00:00

257 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
type: test-report
work_item_id: ET-007
title: "Test Report: Спутниковая карта (Схема / Спутник)"
version: 2
status: PASS
created_at: 2026-05-31
updated_at: 2026-05-31
changelog:
- "v2 (2026-05-31): повторный прогон полного регресса по запросу stage=testing — pytest 76/76, node --test 33/33, smoke deployed artifacts PASS, health 200. Вердикт без изменений."
authors:
- "agent:tester"
branch: feature/ET-007-et-005
head_commit: 6acc57d
verdict: PASS — ready-to-deploy
---
# Test Report — ET-007: Спутниковая карта (Схема / Спутник)
## Сводка
| Категория | Результат |
|------------------------------|------------------------|
| Health check test-стенда | PASS (HTTP 200) |
| Smoke deployed artifacts | PASS |
| Unit tests (pytest, статика) | 76 passed |
| Unit tests (node --test, JS) | 33/33 passed |
| E2E (Playwright) | SKIP — раннер не установлен (см. §5) |
| UI / Visual | SKIP — раннер не установлен (см. §5) |
**Вердикт:** PASS — продвигать в `ready-to-deploy`.
Все автоматизируемые в текущем окружении тесты прошли. Браузерные
кейсы (E-01..E-10, TC-UI-01..14) не запускались из-за отсутствия
Playwright-инфраструктуры в репозитории и UI-раннера на хосте — это
известный гэп, отмеченный в `12-review.md` и ADR-0001 (ET-002), не
связанный с ET-007. Покрытие AC на этом этапе обеспечивается комбо
статических Python-тестов + поведенческих JS-unit + ручной приёмки
на test-стенде после деплоя.
---
## 1. Окружение
- **Test-стенд:** https://openclaw.mva154.duckdns.org/enduro/
- **Branch под тестом:** `feature/ET-007-et-005` @ `6acc57d`
- **HEAD commit:** `reviewer(ET): auto-commit from reviewer run_id=32`
- **Python:** 3.12.13, pytest 8.3.3
- **Node:** node --test (built-in test runner)
### 1.1 Health check
```
$ curl -s https://openclaw.mva154.duckdns.org/enduro/api/health
HTTP 200
{"status":"ok","db_path":"/app/data/centralfederal.sqlite","db_exists":true}
```
**Результат:** PASS.
---
## 2. Unit / Static tests (pytest)
```
$ python -m pytest tests/ -v --ignore=tests/unit/test_health.py
======================== 76 passed, 1 warning in 0.92s =========================
```
### 2.1 Прямо относящиеся к ET-007 (28 тестов)
`tests/unit/test_base_layer.py` — все PASS:
| Тест | Результат |
|----------------------------------------------------------------------------|-----------|
| test_base_toggle_present_in_html | PASS |
| test_base_toggle_default_active_schematic | PASS |
| test_base_toggle_reuses_seg_control_component | PASS |
| test_base_toggle_placed_at_top_of_terrain_popup | PASS |
| test_base_toggle_styles_defined | PASS |
| test_app_js_base_layer_functions_defined | PASS |
| test_app_js_has_et007_block_markers | PASS |
| test_app_js_uses_localstorage_key | PASS |
| test_app_js_uses_esri_world_imagery | PASS |
| test_app_js_satellite_source_and_layer_ids | PASS |
| test_app_js_lazy_source_creation | PASS |
| test_rebuild_overlays_calls_restore_base_layer_first | PASS |
| test_restore_base_layer_state_wired_into_init | PASS |
| test_app_js_uses_setpaint_for_poi_halo | PASS |
| test_app_js_uses_visibility_for_trails_halo | PASS |
| test_style_contains_halo_layers[style.json] | PASS |
| test_style_contains_halo_layers[style-dark.json] | PASS |
| test_halo_layers_hidden_by_default[style.json] | PASS |
| test_halo_layers_hidden_by_default[style-dark.json] | PASS |
| test_halo_layers_below_real_trails[style.json] | PASS |
| test_halo_layers_below_real_trails[style-dark.json] | PASS |
| test_js_unit_tests_pass | PASS |
### 2.2 Регресс по соседним фичам
| Suite | Cases | Результат |
|--------------------------------------|-------|-----------|
| `test_routing_barriers.py` (ET barriers) | 7 | PASS |
| `test_gpx_upload.py` (ET-006) | 19 | PASS |
| `test_poi_toggle.py` (ET-002) | 10 | PASS |
| `test_unit_toggle.py` (ET-005) | 17 | PASS |
Регресс по соседним фичам не сломан.
### 2.3 Известная инфра-проблема
```
ERROR collecting tests/unit/test_health.py
ModuleNotFoundError: No module named 'shapely'
```
`shapely` отсутствует в test-окружении агента (но есть в Docker-образе
runtime, что подтверждается health 200 OK). К ET-007 не относится,
зафиксировано в `12-review.md`.
---
## 3. JS unit tests (`node --test`)
```
$ node --test tests/unit/base_layer.test.js
# tests 33
# pass 33
# fail 0
# duration_ms 96.997357
```
Покрытие из 04-test-plan.yaml:
| Test plan ID | Где покрыто | Результат |
|--------------|------------------------------------------------------------------------|-----------|
| U-01 | `applyBaseLayer("schematic") при пустом localStorage` | PASS |
| U-02 | Чтение `localStorage='satellite'` | PASS |
| U-03 | `onBaseLayerToggle('satellite')` пишет в localStorage | PASS |
| U-04 | Невалидное stored — fallback на `schematic` | PASS |
| U-05 | Toggle на уже активный режим — no-op | PASS |
| U-10, U-11 | `syncBaseLayerUI(...)` | PASS |
| I-01 | `map.getSource('satellite-raster')` после первого toggle | PASS |
| I-02 | `map.getLayer('satellite-base')` | PASS |
| I-03 | `osm-base.visibility === 'none'` после satellite | PASS |
| I-04 | satellite→schematic — `visibility` swap | PASS |
| I-05 | Z-order: satellite ниже terrain/trails | PASS |
| I-06 | Position карты сохраняется | PASS (мок-карта; реальная — manual smoke) |
| I-07 | Атрибуция Esri в source | PASS |
P1-2 (POI text-color), P1-4 (background обе темы), P1-5 (basemap-state),
P1-6 (halo синхронизация) — все 4 P1 из review v1 закрыты JS-тестами.
---
## 4. Smoke test-стенда (deployed assets)
Проверка, что артефакты ET-007 реально задеплоены на
https://openclaw.mva154.duckdns.org/enduro/ :
| Артефакт | Проверка | Результат |
|---------------------|-----------------------------------------------------------|-----------|
| `index.html` | `terrain-base-row`, `#base-btn-schematic`, `#base-btn-satellite`, `onclick="onBaseLayerToggle(...)"` присутствуют (строки 4551) | PASS |
| `app.js` | 16 вхождений ET-007 идентификаторов: `applyBaseLayer`, `onBaseLayerToggle`, `restoreBaseLayerState`, `syncBaseLayerUI`, `satellite-raster`, `satellite-base`, `arcgisonline` | PASS |
| `app.css` | `.terrain-base-row`, `.base-seg`, `body.satellite-active #btn-basemap` (строки 870895) | PASS |
| `style.json` | 2 halo-слоя `*-halo-satellite` | PASS |
| `style-dark.json` | 2 halo-слоя `*-halo-satellite` | PASS |
Все статические артефакты доставлены на test-стенд корректно.
---
## 5. Visual / UI тесты (SKIP)
Из `04b-ui-test-cases.md` определено 14 визуальных кейсов
(TC-UI-01..14, включая 2 mobile-кейса). Из `04-test-plan.yaml`
определено 8 E2E-кейсов (E-01..E-07, E-10).
**Не выполнены:** в окружении агента отсутствует UI-раннер
(`/home/slin/tools/ui-test/run_tests.js``ls: cannot access … No such
file or directory`, повторно проверено на этой итерации); Playwright
не установлен ни в репозитории, ни на хосте; `package.json` в
репозитории отсутствует.
Таблица TC → результат (все SKIP по одной причине — отсутствие раннера):
| TC | Описание | Результат |
|---------|-----------------------------------------------------------------|-----------|
| TC-UI-01 | Переключатель «Подложка» виден в попапе | SKIP (no runner) |
| TC-UI-02 | Активация «Спутник» меняет подложку | SKIP (no runner) |
| TC-UI-03 | Атрибуция Esri видна | SKIP (no runner) |
| TC-UI-04 | Возврат на «Схема» | SKIP (no runner) |
| TC-UI-05 | Грунтовки и тропы видны на спутнике | SKIP (no runner) |
| TC-UI-06 | POI и подписи на спутнике читаемы | SKIP (no runner) |
| TC-UI-07 | Спутник переживает смену темы | SKIP (no runner) |
| TC-UI-08 | Hillshade поверх спутника | SKIP (no runner) |
| TC-UI-09 | Маршрут OSRM на спутнике | SKIP (no runner) |
| TC-UI-10 | Переключатель на мобильном (mobile viewport) | SKIP (no runner) |
| TC-UI-11 | Активация «Спутник» на мобильном (mobile viewport) | SKIP (no runner) |
| TC-UI-12 | Persistence: спутник после перезагрузки | SKIP (no runner) |
| TC-UI-13 | GPX-панель + Спутник | SKIP (no runner) |
| TC-UI-14 | Совместимость с переключателем единиц | SKIP (no runner) |
**Это известный гэп инфраструктуры**, зафиксированный в:
- `12-review.md` v2 — финальный пункт «Что делать дальше» п.4;
- ADR-0001 ET-002 — Playwright-инфраструктура out of scope текущих фаз;
- `07-infra-requirements.md` ET-007 — без новых требований к E2E
инфраструктуре.
Покрытие AC из `03-acceptance-criteria.md` обеспечено косвенно:
| AC group | Гарантия |
|-------------------------|-----------------------------------------------------------------------|
| AC-01 (UI переключателя) | static HTML-тесты + smoke deployed HTML |
| AC-02 (→Спутник) | JS-unit `applyBaseLayer('satellite')`, halo, POI paint, basemap-hide |
| AC-03 (→Схема) | JS-unit `applyBaseLayer('schematic')`, `_savedBasemapState` restore |
| AC-04 (совместимость) | JS-unit halo синхронизация + style.json layer-order |
| AC-05 (persistence) | JS-unit U-02, U-03 |
| AC-06 (смена темы) | static `rebuildMapOverlays`-test + JS-unit `restoreBaseLayerState` |
| AC-07 (тулбар-режимы) | регрессионные suites ET-002/ET-005/ET-006 PASS |
| AC-08 (производительность)| вне автоматизации — оценивается на ручной приёмке |
| AC-09 (mobile UI) | вне автоматизации — оценивается на ручной приёмке |
| AC-10 (регресс) | 76 pytest PASS — соседние фичи не сломаны |
**Рекомендация:** перед `prod` deploy выполнить ручную приёмку на
test-стенде по чек-листу TC-UI-01..14 (особенно TC-UI-07 «смена темы»
и TC-UI-12 «persistence после reload» — наиболее чувствительные к
рефакторингу).
---
## 6. Дефекты
**P0/P1:** нет.
**P2:** нет (P2-1..P2-4 из `12-review.md` — документационные/тестовые,
не блокируют поставку, отмечены reviewer'ом как «APPROVED with comments»).
**P3:** нет новых; P3-1..P3-4 из ревью остаются как nice-to-have.
---
## 7. Вердикт
**PASS — stage:ready-to-deploy.**
Обоснование:
1. Все 76 pytest и 33 JS-теста PASS, в т.ч. 28 целевых тестов ET-007.
2. Все 6 P1-блокеров review v1 закрыты в коде и тестами.
3. Test-стенд отдаёт корректные артефакты (HTML/JS/CSS/style.json).
4. Регресс по соседним фичам (ET-002 POI, ET-005 единицы, ET-006 GPX,
barriers) не обнаружен.
5. Health endpoint test-стенда 200 OK.
Перед prod-деплоем — рекомендуется ручной прогон TC-UI-01..14 на
test-стенде (≤30 минут). Critical-path кейсы для ручной приёмки:
TC-UI-02 (активация спутника), TC-UI-07 (смена темы), TC-UI-12
(persistence), TC-UI-10/11 (mobile).