209 lines
9.5 KiB
YAML
209 lines
9.5 KiB
YAML
# 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-раннере, если он
|
||
появится.
|