From d2bc769160ad2d71f8091712b79a97d9d821debf Mon Sep 17 00:00:00 2001 From: claude-bot Date: Wed, 3 Jun 2026 23:08:11 +0000 Subject: [PATCH] tester(ET): auto-commit from tester run_id=70 --- docs/work-items/ET-011/13-test-report.md | 249 +++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 docs/work-items/ET-011/13-test-report.md diff --git a/docs/work-items/ET-011/13-test-report.md b/docs/work-items/ET-011/13-test-report.md new file mode 100644 index 0000000..15759e3 --- /dev/null +++ b/docs/work-items/ET-011/13-test-report.md @@ -0,0 +1,249 @@ +--- +type: test-report +work_item_id: ET-011 +verdict: PASS +stage: ready-to-deploy +version: 1 +--- + +# Test Report ET-011 — Скачивание трека из popup на карте + +**Branch:** `feature/ET-011-popup-enduro-trails` +**HEAD:** `721b33a` (fix(gps-tracks): address ET-011 review — JS UI tests + flat 403 contract) +**Tester:** agent:tester +**Дата:** 2026-06-03 +**Test env:** https://openclaw.mva154.duckdns.org/enduro/ + +--- + +## Сводка + +| Категория | Прогон | PASS | FAIL | WARN | Заметки | +|---|---|---|---|---|---| +| Pytest (unit + integration + web) | 204 | **204** | 0 | 0 | 2 deselected, 7 deprecation-warnings (внешний модуль `mapbox_vector_tile`) | +| Node JS — `track_download.test.js` | 28 | **28** | 0 | 0 | UI-сторона AC-1/AC-2/AC-7 — поведенческие | +| Node JS — `gps_tracks.test.js` (регрессия) | 24 | **24** | 0 | 0 | ET-008/ET-009 не сломаны | +| Live API smoke (test env) | 3 | **3** | 0 | 0 | health + регрессия `/gps-tracks` + download (см. §3.3) | +| Visual / UI — runner `/home/slin/tools/ui-test` | — | — | — | — | runner недоступен в среде агента; покрытие см. §4 | +| Manual release-smoke (AC-13, контраст тем) | — | — | — | — | по соглашению из review v1 P1-01, выполняется после deploy | + +**Verdict: PASS → stage:ready-to-deploy.** +P0/P1/P2-блокеров не выявлено. Регрессий не обнаружено. Контракт endpoint'а и +структура popup-кнопки соответствуют ADR-014 / ADR-015 и закрывают AC-1..AC-15 +автоматически или согласованным manual smoke'ом. + +--- + +## 1. Окружение + +| Проверка | Результат | +|---|---| +| `GET /api/health` | 200 OK; `{"status":"ok","db_path":"/app/data/centralfederal.sqlite","db_exists":true}` | +| `GET /api/gps-tracks?bbox=30,50,50,60` (регрессия ET-008) | 200 OK, 39 features, `truncated=false`, sample ids `[23, 21, 22]` | +| `make test` обёртка | в среде агента `make` отсутствует — запущен напрямую `pytest tests/` из `src/api` (эквивалент `make test`) | +| `make lint` | пропущен (на review-стадии `ruff check` уже clean, see `12-review.md`) | + +--- + +## 2. Pytest (`pytest tests/ -v`) + +Полный прогон `src/api && python -m pytest ../../tests/ -v` — **204 passed, 2 deselected, 7 warnings**. + +Ключевые срезы ET-011: + +### 2.1 Backend — endpoint (`tests/api/test_gps_tracks_download.py`) + +| Test ID | Имя | Покрывает | Результат | +|---|---|---|---| +| IT-01 | `test_it01_download_happy_path` (имя в тестах: `test_it01_*`) | AC-3, REQ-F-02 | PASS | +| IT-02 | 404 для несуществующего id | AC-7, REQ-F-02 | PASS | +| IT-03 | 400 для невалидного format=fit | AC-8, REQ-F-02 | PASS | +| IT-04 | 413 для patho-трека > 200 000 точек | AC-9, REQ-NF-02 | PASS | +| IT-05 | 403 — единственный источник вне whitelist | AC-11, REQ-F-06 | PASS | +| IT-05 (dual) | 403 — оба источника вне whitelist | AC-11, REQ-F-06 | PASS | +| IT-06 | `filename*=UTF-8''` + ASCII-fallback | AC-4, REQ-NF-05 | PASS | +| IT-07 | Валидация ответа по `gpx.xsd` | AC-5, REQ-NF-03 | PASS | +| `test_default_deny_without_config` | default-deny при пустом whitelist | REQ-F-06 | PASS | + +### 2.2 Backend — GPX builder (`tests/api/test_gps_tracks_gpx_builder.py`) + +| Test ID | Имя | Покрывает | Результат | +|---|---|---|---| +| UT-01 | `test_ut01_build_gpx_basic_structure` | AC-10, REQ-F-03 | PASS | +| UT-01 | `test_ut01_metadata_link_text_includes_source` | AC-10 | PASS | +| UT-01 | `test_ut01_osm_copyright_present` | AC-10 | PASS | +| UT-02 | пустые/NULL поля → элементы не пустые, а отсутствуют | REQ-F-03 | PASS | +| UT-02 | пустое имя в `` тоже | REQ-F-03 | PASS | +| UT-03 | XSD-валидация минимальный/типичный/UTF-8 | AC-5, REQ-NF-03 | PASS | +| UT-05 | двухточечный edge-case | REQ-F-03 | PASS | +| — | XML-декларация `` присутствует | REQ-F-03 | PASS | +| — | precision `lat/lon` — 6 знаков | REQ-F-03 | PASS | +| — | без OSM-копирайта если sources≠osm | REQ-F-03, REQ-F-06 | PASS | +| — | `