10 KiB
type, work_item_id, title, version, status, created_at, updated_at, authors
| type | work_item_id | title | version | status | created_at | updated_at | authors | |
|---|---|---|---|---|---|---|---|---|
| acceptance-criteria | ET-009 | Acceptance Criteria: Новые источники GPS-треков — EnduroRussia и Wikiloc | 1 | draft | 2026-06-01 | 2026-06-01 |
|
Acceptance Criteria — ET-009
Критерии формализованы в Gherkin-стиле. Все критерии — обязательные; задача считается принятой, когда каждый прошёл проверку в test-среде или в автоматическом тестовом запуске CI.
AC-01 — Конфиг EnduroRussia исправлен и активирован
Given запись enduro_russia в config/gps_sources.yaml
When работа ET-009 завершена
Then:
base_urlравноhttps://endurorussia.ru(без дефиса);enabledравноtrue;license_adrуказывает на существующий файл сstatus: accepted;rate_limit_sec≥ 5.
AC-02 — Конфиг Wikiloc добавлен
Given config/gps_sources.yaml
When работа ET-009 завершена
Then существует запись с id: wikiloc, в которой:
enabled: true;base_url: https://www.wikiloc.com;rate_limit_sec: 10;license_adr: docs/work-items/ET-008/06-adr/ADR-012-wikiloc-licensing.md;parser_module: src.api.gps_tracks.sources.wikiloc;save_user_field: false;attribution: "© Wikiloc contributors";- задано
max_tracks_per_run(любое целое > 0; для MVP — 50).
AC-03 — Wikiloc подписан на регион ЦФО+Чувашия
Given config/gps_regions.yaml
When работа ET-009 завершена
Then запись tsfo_plus_chuvashia.sources содержит элемент wikiloc.
enduro_russia в этом списке уже был и остаётся.
AC-04 — Pipeline licensing-guard прозрачно работает
Given scripts/gps_collect.py и ADR-010 со status: accepted
When оператор запускает python scripts/gps_collect.py --region tsfo_plus_chuvashia --source enduro_russia
Then в логах нет сообщения skipped_license, в pipeline_runs
последняя запись имеет status ∈ {ok, partial}, не skipped_license.
And given искусственная подмена status: accepted на status: proposed в копии ADR-010
When запуск pipeline с этим путём
Then pipeline_runs[-1].status == 'skipped_license', exit-code 1.
AC-05 — Unit-тесты EnduroRussia зелёные
Given ветка feature/ET-009-… с коммитом изменений
When CI запускает pytest tests/unit/test_gps_tracks_enduro_russia.py -v
Then все тесты UT-ER-01..UT-ER-08 проходят, exit-code 0.
AC-06 — Unit-тесты Wikiloc зелёные
Given та же ветка
When CI запускает pytest tests/unit/test_gps_tracks_wikiloc.py -v
Then все тесты UT-WL-01..UT-WL-10 проходят, exit-code 0.
AC-07 — Integration-тесты pipeline зелёные
Given ветка
When CI запускает pytest tests/integration/test_pipeline_et009.py -v
Then все тесты IT-ER-01, IT-WL-01, IT-WL-02, IT-DEDUP-01, IT-LIC-01
проходят.
AC-08 — Тестовые фикстуры существуют в репо
Given репо после слияния When проверка файлов Then следующие файлы существуют и не пустые:
tests/fixtures/gps-tracks/enduro-russia-api-tracks-page1.jsontests/fixtures/gps-tracks/enduro-russia-track-1.gpx(≥ 10 trkpt)tests/fixtures/gps-tracks/enduro-russia-track-2.gpx(пустой)tests/fixtures/gps-tracks/enduro-russia-track-3.gpx(вне bbox)tests/fixtures/gps-tracks/wikiloc-search-page1.html(≥ 5 ссылок на треки)tests/fixtures/gps-tracks/wikiloc-trail-page.htmltests/fixtures/gps-tracks/wikiloc-track.gpx
AC-09 — Первый продакшн-прогон EnduroRussia
Given mva154, ветка смерджена в main, deploy выполнен When оператор выполняет
python scripts/gps_collect.py --region tsfo_plus_chuvashia --source enduro_russia
Then:
- exit-code 0;
- последняя запись
pipeline_runsимеетregion_id='tsfo_plus_chuvashia',source_id='enduro_russia',status='ok'или'partial'; tracks_new + tracks_updated ≥ 200;errors_json IS NULLили содержит ≤ 5% от tracks_new;- длительность ≤ 45 минут.
AC-10 — Первый продакшн-прогон Wikiloc
Given mva154 и активированный wikiloc
When оператор выполняет
python scripts/gps_collect.py --region tsfo_plus_chuvashia --source wikiloc
Then:
- exit-code 0 (graceful-stop приемлем);
- последняя запись
pipeline_runsимеетstatus∈{ok, partial, rate_limited}; tracks_new + tracks_updated ≥ 1(любое ненулевое — успех; ограничениеmax_tracks_per_run=50).
AC-11 — API возвращает новые источники
Given БД после двух прогонов AC-09 + AC-10
When клиент делает GET /api/gps-tracks?bbox=37.0,55.0,38.0,56.0
Then в ответе:
- статус 200;
- в
FeatureCollection.features[].properties.sourcesвстречаются строки"enduro_russia"и/или"wikiloc"(для разных треков); - ни одна feature не имеет в
sourcesзначение"enduro-russia"(с дефисом) или другую опечатку.
AC-12 — Health-эндпоинт показывает новые источники
Given БД после прогонов
When клиент делает GET /api/gps-tracks/health
Then в ответе:
- статус 200;
- поле
tracks_by_sourceсодержит ключиenduro_russiaиwikilocс числовыми значениями ≥ 1.
AC-13 — Dedup-merge работает между источниками
Given БД после прогонов When SQL-запрос:
SELECT id, sources_json FROM tracks
WHERE sources_json LIKE '%enduro_russia%'
AND (sources_json LIKE '%wikiloc%' OR sources_json LIKE '%osm%');
Then возвращается ≥ 1 строка (хотя бы один трек попал в БД из ≥ 2 источников и был объединён по dedup-key).
Note. Если для данного снимка БД таких пересечений нет физически (маловероятно при ≥ 200 треков EnduroRussia), AC-13 проверяется синтетически через integration-тест IT-DEDUP-01 и считается покрытым.
AC-14 — Стили карты содержат цвета новых источников
Given src/web/style.json и src/web/style-dark.json
When работа ET-009 завершена
Then в paint.line-color слоя для публичных треков (имя слоя по
ET-008 — gps-tracks-layer или эквивалент) match-expression
содержит ключи osm, enduro_russia, wikiloc с присвоенными цветами,
и есть fallback-значение по умолчанию.
AC-15 — Атрибуция отображается в UI
Given в БД есть треки из всех трёх источников When пользователь открывает страницу, включает «Публичные треки», ждёт 3 сек Then в строке атрибуции MapLibre (правый нижний угол) видны:
- «© OpenStreetMap contributors (ODbL)»;
- «EnduroRussia.ru»;
- «© Wikiloc contributors».
AC-16 — UI-фильтр источников показывает 3 чекбокса
Given в БД есть треки трёх источников
When пользователь открывает #sheet-gps-filters
Then в секции «ИСТОЧНИК» (#gps-source-grid) видны минимум три
чекбокса с подписями «OSM», «EnduroRussia», «Wikiloc». По умолчанию
все установлены.
AC-17 — Снятие галки источника убирает соответствующие линии
Given включён слой и видны треки трёх источников
When пользователь снимает галку «EnduroRussia» в фильтре
Then через ≤ 200 мс на карте все линии цвета enduro_russia (или
все треки с этим источником в properties.sources) исчезают; OSM и
Wikiloc остаются.
AC-18 — Документация work item полная
Given репо после слияния ET-009
When проверка docs/work-items/ET-009/
Then существуют:
00-business-request.md01-brd.md02-trz.md03-acceptance-criteria.md04-test-plan.yaml04b-ui-test-cases.md13-test-report.md(после Тестирования)14-deploy-log.md(после Деплоя)
AC-19 — Регрессия ET-008 не сломана
Given все существующие e2e-тесты ET-008
When CI прогоняет pytest tests/e2e/ -v (или соответствующий
маркер)
Then все тесты ET-008 (E-01..E-41 из docs/work-items/ET-008/04-test-plan.yaml)
проходят без регрессий, как и до ET-009.
AC-20 — Производительность endpoint не деградировала
Given БД с треками после ET-009 (новые источники добавлены)
When нагрузочный тест 100 запросов GET /api/gps-tracks?bbox=… на
z=10 с 500 треков в bbox
Then p95 latency ≤ 300 мс (не выше, чем baseline ET-008).