Files
enduro-trails/docs/work-items/ET-001/04-test-plan.yaml
claude-bot 75b9a0cfea
All checks were successful
CI / lint (push) Successful in 28s
CI / test (push) Successful in 46s
CI / build (push) Successful in 17s
analyst(ET): auto-commit from analyst run_id=2
2026-06-14 01:47:11 +03:00

209 lines
9.5 KiB
YAML
Raw 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.
# Test Plan — ET-001: Чекбокс показа/скрытия POI в кнопке рельефа
# ВНИМАНИЕ: функциональность уже поставлена в ET-002. Этот план —
# верификация/регрессия существующей реализации + проверка одной новой
# дельты (подпись «Показывать POI», REQ-F-01). UI-кейсы — в 04b-ui-test-cases.md.
# Среда e2e/ui: https://openclaw.mva154.duckdns.org/enduro/
work_item: ET-001
version: 3
relates_to: ET-002
related_acs: [AC-01, AC-02, AC-03, AC-04, AC-05, AC-06, AC-07, AC-08, AC-09, AC-10]
tests:
# ─── Unit (frontend, JS) ────────────────────────────────────────────
- id: TC-U-01
type: unit
layer: frontend
title: applyPoiVisibility(false) скрывает слои POI и синхронизирует layerState
target: src/web/app.js :: applyPoiVisibility
given: |
JSDOM/мок map с методами getLayer (true для poi-circles, poi-labels)
и setLayoutProperty (spy). layerState.poi = true.
when: |
Вызвать applyPoiVisibility(false).
then: |
- setLayoutProperty вызван для 'poi-circles' и 'poi-labels' со
значением 'none'.
- layerState.poi === false.
covers: [REQ-F-04, REQ-NF-03, AC-03, AC-08]
- id: TC-U-02
type: unit
layer: frontend
title: onPoiCheckbox пишет localStorage и применяет видимость
target: src/web/app.js :: onPoiCheckbox
given: |
JSDOM с #poi-visible-cb; spy на localStorage.setItem и
applyPoiVisibility.
when: |
Снять чекбокс (checked=false) и вызвать onPoiCheckbox();
затем отметить (checked=true) и вызвать снова.
then: |
- localStorage['poi-visible'] === '0', applyPoiVisibility(false).
- localStorage['poi-visible'] === '1', applyPoiVisibility(true).
covers: [REQ-F-04, REQ-F-05, REQ-F-06, AC-03, AC-04, AC-05]
- id: TC-U-03
type: unit
layer: frontend
title: restorePoiState — дефолт «видимы» при отсутствии ключа
target: src/web/app.js :: restorePoiState
given: |
localStorage без ключа 'poi-visible'; #poi-visible-cb в DOM.
when: |
Вызвать restorePoiState().
then: |
- #poi-visible-cb.checked === true.
- applyPoiVisibility(true) (слои POI видимы).
covers: [REQ-F-03, AC-02]
- id: TC-U-04
type: unit
layer: frontend
title: restorePoiState — восстановление «скрыто» из localStorage
target: src/web/app.js :: restorePoiState
given: |
localStorage['poi-visible'] === '0'; #poi-visible-cb в DOM.
when: |
Вызвать restorePoiState() (имитация загрузки/смены темы).
then: |
- #poi-visible-cb.checked === false.
- слои POI скрыты (visibility 'none').
covers: [REQ-F-06, REQ-F-07, AC-05, AC-07]
- id: TC-U-05
type: unit
layer: frontend
title: Подпись чекбокса равна «Показывать POI» (новая дельта)
target: tests/unit/test_poi_toggle.py:54 :: подпись #poi-visible-cb
given: |
Существующий регресс-тест ET-002 test_poi_toggle.py строкой 54
проверяет `assert "<span>POI</span>" in html`. Это и есть тест,
который фиксирует текст подписи (НЕ JS-тест poi_toggle.test.js —
тот проверяет только поведенческий блок).
when: |
Применена правка index.html:88 (<span>Показывать POI</span>) и
ожидание теста обновлено на `<span>Показывать POI</span>`.
then: |
Ассерт строки 54 проходит на новой подписи.
note: |
ДО правки кейс обязан падать (сейчас в HTML «<span>POI</span>»).
Обновлять index.html:88 и test_poi_toggle.py:54 СТРОГО в одном
коммите, иначе make test красный.
covers: [REQ-F-01, AC-01, AC-09]
# ─── Unit (python, регресс серверного контракта) ────────────────────
- id: TC-U-06
type: unit
layer: backend
title: Серверная отдача слоя POI в MVT не изменилась
target: tests/unit/test_poi_toggle.py (регресс ET-002)
given: |
Существующий python-тест, фиксирующий, что видимость POI —
клиентская и /api/tiles по-прежнему включает слой 'poi'.
when: |
make test.
then: |
Тест зелёный; контракт MVT (layer 'poi') не тронут.
covers: [REQ-NF-02, AC-10]
# ─── Integration (DOM) ──────────────────────────────────────────────
- id: TC-I-01
type: integration
layer: frontend
title: Чекбокс POI присутствует в #terrain-popup и связан с обработчиком
given: |
Полный DOM из src/web/index.html.
when: |
Найти #poi-visible-cb внутри #terrain-popup.
then: |
- Элемент существует, имеет атрибут onchange="onPoiCheckbox()".
- По умолчанию checked.
covers: [REQ-F-02, REQ-F-03, AC-02]
- id: TC-I-02
type: integration
layer: frontend
title: Цикл скрыть→показать переключает visibility слоёв POI
given: |
Полный DOM + мок map (getLayer/setLayoutProperty).
when: |
Снять #poi-visible-cb → onPoiCheckbox(); затем отметить → onPoiCheckbox().
then: |
visibility 'poi-circles'/'poi-labels': none → visible.
covers: [REQ-F-04, REQ-F-05, AC-03, AC-04]
# ─── E2E / UI (Playwright-сценарии; детали — 04b-ui-test-cases.md) ──
- id: TC-E-01
type: e2e
layer: ui
title: Подпись «Показывать POI» и чекбокс включён по умолчанию
env: test
viewport: { width: 1440, height: 900 }
expected: |
#terrain-popup открыт; #poi-visible-cb checked; подпись
«Показывать POI» в одну строку.
covers: [AC-01, AC-02]
reference: 04b-ui-test-cases.md :: TC-UI-01
- id: TC-E-02
type: e2e
layer: ui
title: Снятие чекбокса скрывает POI, установка возвращает
env: test
viewport: { width: 1440, height: 900 }
expected: |
После снятия маркеры POI исчезают; после повторной установки — видны.
covers: [AC-03, AC-04]
reference: 04b-ui-test-cases.md :: TC-UI-02, TC-UI-03
- id: TC-E-03
type: e2e
layer: ui
title: Состояние «скрыто» сохраняется после перезагрузки
env: test
viewport: { width: 1440, height: 900 }
expected: |
После reload POI скрыты, чекбокс снят.
covers: [AC-05]
reference: 04b-ui-test-cases.md :: TC-UI-04
- id: TC-E-04
type: e2e
layer: ui
title: Видимость POI устойчива к смене темы
env: test
viewport: { width: 1440, height: 900 }
expected: |
После #btn-theme POI остаются скрытыми, чекбокс снят.
covers: [AC-07]
reference: 04b-ui-test-cases.md :: TC-UI-05
- id: TC-E-05
type: e2e
layer: ui
title: Mobile — чекбокс «Показывать POI» виден целиком, работает
env: test
viewport: { width: 390, height: 844 }
expected: |
Попап помещается; подпись не обрезана; снятие скрывает POI.
covers: [AC-01, AC-03]
reference: 04b-ui-test-cases.md :: TC-UI-06
# ─── Вне scope ──────────────────────────────────────────────────────────
out_of_scope:
- Разбивка POI по типам, отдельная кнопка POI, иконка-индикатор.
- Изменение серверной агрегации POI (/api/recon, /api/scenic).
- Производительность тайлов/роутинга.
# ─── Примечание ─────────────────────────────────────────────────────────
notes: |
Поведенческая суть (TC-U-01..04, TC-I-*) уже покрыта unit-тестами
ET-002 (tests/unit/poi_toggle.test.js, tests/unit/test_poi_toggle.py).
Реальная новая проверка ET-001 — TC-U-05 / TC-E-01 (подпись).
Playwright-инфраструктуры в репозитории нет (ET-002
07-infra-requirements.md запрещает новые npm-пакеты) — e2e-кейсы
исполняются вручную/визуально либо в существующем CI-раннере, если он
появится.