Files
enduro-trails/docs/work-items/ET-014/04-test-plan.yaml
claude-bot e796a6cb03
All checks were successful
CI / lint (push) Successful in 5s
CI / test (push) Successful in 10s
CI / build (push) Successful in 2s
analyst(ET): auto-commit from analyst run_id=87
2026-06-04 11:03:45 +00:00

179 lines
7.9 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-014
# Z-index fix: панель «Фильтры» должна открываться поверх панели слоёв.
# Все тесты ориентированы на test-среду: https://openclaw.mva154.duckdns.org/enduro/
work_item: ET-014
related_acs: [AC-01, AC-02, AC-03, AC-04, AC-05, AC-06, AC-07, AC-08, AC-09, AC-10, AC-11, AC-12, AC-13, AC-14]
tests:
# ─── Unit ──────────────────────────────────────────────────────────
- id: TC-U-01
type: unit
layer: frontend
title: togglePublicTracksFiltersSheet корректно открывает/закрывает sheet
target: src/web/gps_tracks.js :: togglePublicTracksFiltersSheet
given: |
JSDOM с минимальным DOM: #sheet-gps-filters, #terrain-popup,
#sheet-backdrop, мок openSheet/closeAllSheets.
when: |
Вызвать togglePublicTracksFiltersSheet() дважды подряд.
then: |
- Первый вызов: openSheet('sheet-gps-filters') вызван 1 раз;
_buildGpsFiltersUI вызван.
- Второй вызов: closeAllSheets() вызван 1 раз.
covers: [REQ-F-04]
- id: TC-U-02
type: unit
layer: frontend
title: При открытии sheet-gps-filters состояние terrain-popup корректно
target: src/web/gps_tracks.js или общий хук в src/web/app.js
given: |
JSDOM: #terrain-popup со style.display='block' и #terrain-toggle.classList
содержит 'active'. #sheet-gps-filters существует.
when: |
Вызвать togglePublicTracksFiltersSheet() при открытом popup'е.
then: |
В зависимости от выбранного варианта решения:
- Вариант A: popup.style.display === 'none', terrain-toggle без 'active'.
- Вариант B/C: popup может оставаться открытым, но stacking-tests
ниже (TC-I-01) обязаны быть зелёными.
covers: [REQ-F-01, REQ-F-02]
# ─── Integration / DOM ─────────────────────────────────────────────
- id: TC-I-01
type: integration
layer: frontend
title: Stacking — sheet-gps-filters визуально выше terrain-popup
given: |
Полный DOM из src/web/index.html, app.css загружен, jsdom + getComputedStyle
или Playwright страница. terrain-popup открыт, sheet-gps-filters открыт.
when: |
Получить элемент в центре области #sheet-gps-filters через
document.elementFromPoint(x, y).
then: |
Возвращённый элемент принадлежит #sheet-gps-filters (или его потомкам),
НЕ принадлежит #terrain-popup.
covers: [REQ-F-01, AC-01, AC-02]
- id: TC-I-02
type: integration
layer: frontend
title: Stacking — marker-dialog поверх всего сохраняется
given: |
Полный DOM. marker-dialog открыт (style.display: flex), параллельно
моделируем «грязное» состояние (terrain-popup открыт).
when: |
document.elementFromPoint в координатах кнопки внутри marker-dialog.
then: |
Элемент принадлежит #marker-dialog.
covers: [REQ-NF-03, AC-10]
- id: TC-I-03
type: integration
layer: frontend
title: Stacking — search-panel и ruler-info остаются на верху (z=600)
given: |
Полный DOM, search-panel.display=block или ruler-info видим.
when: |
elementFromPoint в центре панели.
then: |
Возвращённый элемент принадлежит соответствующей панели,
НЕ перекрывается ни sheet'ом, ни terrain-popup.
covers: [REQ-NF-03, AC-11, AC-12]
- id: TC-I-04
type: integration
layer: frontend
title: Закрытие sheet-gps-filters через closeAllSheets очищает состояние
given: |
sheet-gps-filters.open, sheet-backdrop.visible.
when: |
Вызвать closeAllSheets().
then: |
- sheet-gps-filters без класса 'open'.
- sheet-backdrop без класса 'visible'.
- Никаких inline стилей-«артефактов» (например, лишних z-index, opacity).
covers: [REQ-F-03, AC-04]
# ─── E2E (Playwright; см. также 04b-ui-test-cases.md) ──────────────
- id: TC-E-01
type: e2e
layer: ui
title: Mobile — открыть фильтры публичных треков из панели слоёв
env: test
viewport: { width: 390, height: 844 }
steps_summary: |
open / wait map / click #terrain-toggle / click #public-tracks-cb /
click #public-tracks-filters-btn / assert sheet visible & on top
expected: |
sheet-gps-filters имеет class 'open'; visually центр sheet'а не
перекрыт terrain-popup (elementFromPoint).
covers: [AC-01, AC-03, AC-14]
reference: 04b-ui-test-cases.md :: TC-UI-01
- id: TC-E-02
type: e2e
layer: ui
title: Desktop — фильтры открываются слева, terrain-popup не перекрывает
env: test
viewport: { width: 1440, height: 900 }
expected: |
sheet-gps-filters виден слева (≈380px), terrain-popup не перекрывает.
covers: [AC-02]
reference: 04b-ui-test-cases.md :: TC-UI-02
- id: TC-E-03
type: e2e
layer: ui
title: Закрытие фильтров кнопкой ✕ возвращает к карте
env: test
viewport: { width: 390, height: 844 }
expected: |
Нет видимых частей sheet'а или backdrop'а после клика по ✕.
covers: [AC-04]
reference: 04b-ui-test-cases.md :: TC-UI-03
- id: TC-E-04
type: e2e
layer: ui
title: Повторное открытие/закрытие фильтров стабильно
env: test
viewport: { width: 390, height: 844 }
expected: |
После 3 циклов open/close — DOM-классы консистентны, sheet
продолжает открываться поверх terrain-popup.
covers: [AC-06]
reference: 04b-ui-test-cases.md :: TC-UI-04
- id: TC-E-05
type: e2e
layer: ui
title: Регрессия — открыть остальные bottom-sheets, проверить отображение
env: test
viewport: { width: 390, height: 844 }
expected: |
sheet-route, sheet-recon, sheet-scenic, sheet-link, sheet-gpx —
каждый открывается, виден, закрывается.
covers: [AC-09]
reference: 04b-ui-test-cases.md :: TC-UI-05
- id: TC-E-06
type: e2e
layer: ui
title: Светлая тема — сценарий открытия фильтров
env: test
viewport: { width: 390, height: 844 }
theme: light
expected: |
Sheet поверх terrain-popup, всё видно, контраст корректный.
covers: [AC-13]
reference: 04b-ui-test-cases.md :: TC-UI-06
# ─── Не входит ────────────────────────────────────────────────────────
out_of_scope:
- Тесты бизнес-логики фильтров (это покрывается ET-008/ET-009).
- Тесты позиционирования terrain-popup относительно кнопки «Рельеф».
- Производительность тайлов / роутинга.