--- type: test-report work_item_id: ORCH-017 result: PASS --- # Test Report — ORCH-017 Прямые ссылки на BRD и Plane-таску в Telegram-уведомлении об апруве BRD. Вердикт review (`12-review.md`): **APPROVED** ✔ — прогон регресса допущен. ## Окружение - Python: 3.12.13 - pytest: 8.3.3 (pytest-asyncio 0.23.8, anyio 4.13.0) - Дата: 2026-06-05 - Ветка: `feature/ORCH-017-brd-plane-telegram` - Прод-контейнер `orchestrator` (8500) НЕ перезапускался; smoke — только read-only GET. ## Smoke test API (prod, read-only) | Endpoint | HTTP | Результат | |----------|------|-----------| | `GET /health` | 200 | `{"status":"ok","service":"orchestrator"}` — PASS | | `GET /status` | 200 | active_tasks содержит task #35 ORCH-017 (stage=testing) — PASS | | `GET /queue` | 200 | counts running=1, failed=0, breaker=closed, preflight ok — PASS | > `curl` в окружении отсутствует — smoke выполнен через `urllib.request` (GET, без побочных эффектов). ## Результаты по test-plan (04-test-plan.yaml) | TC ID | Описание | Тест | Результат | |-------|----------|------|-----------| | TC-01 | BRD-ссылка на `01-brd.md` (Gitea branch-view) | `test_notify_approve_links::test_tc01_brd_link_present` | PASS | | TC-02 | Plane-ссылка (web-URL+workspace+project+issue_id) | `…::test_tc02_plane_link_present` | PASS | | TC-03 | Фоллбэки URL (gitea_public_url→gitea_url, plane_web_url→plane_api_url) | `…::test_tc03_url_fallbacks` | PASS | | TC-04 | Сохранён призыв «Approved» | `…::test_tc04_keeps_approved_call_to_action` | PASS | | TC-05 | Ровно одно пингующее сообщение (не silent) | `…::test_tc05_single_notifying_message` | PASS | | TC-06 | Graceful: branch/issue=None — без исключения | `…::test_tc06_graceful_missing_branch_and_issue` | PASS | | TC-07 | Пустой Plane-base → Plane-ссылка опущена, BRD остаётся | `…::test_tc07_plane_base_empty_drops_plane_link_keeps_brd` | PASS | | TC-07b | Loopback Plane-base отбрасывается (доп.) | `…::test_tc07b_loopback_plane_base_dropped` | PASS | | TC-08 | parse_mode=HTML, html.escape, валидная разметка | `…::test_tc08_html_escaped_and_valid_markup` | PASS | | TC-08b | send_telegram сохраняет parse_mode=HTML (доп.) | `…::test_tc08b_send_telegram_keeps_parse_mode_html` | PASS | | TC-09 | Регрессия трекера (silent edit, без дублей) | `test_telegram_tracker.py` (полный набор) | PASS | | TC-10 | Поток analysis-approved строит ссылки из БД | `test_analysis_approve_flow_links::test_tc10_approved_flow_builds_links_from_db` | PASS | | TC-11 | (Условный) inline-кнопки | — | N/A — вариант кнопок отклонён (ADR-001 Р-1) | | TC-12 | (Условный) обратная совместимость send_telegram c reply_markup | — | N/A — вариант кнопок отклонён (ADR-001 Р-1) | Все запланированные тесты (TC-01…TC-10) — PASS. Условные TC-11/TC-12 не применимы: ADR-001 (Р-1) зафиксировал HTML-ссылки в тексте без изменения сигнатуры `send_telegram`. ## Покрытие критериев приёмки (03-acceptance-criteria.md) | AC | Покрывающие TC | Статус | |----|----------------|--------| | AC-1 | TC-01, TC-10 | PASS | | AC-2 | TC-02, TC-10 | PASS | | AC-3 | TC-01, TC-02, TC-03 | PASS | | AC-4 | TC-04 | PASS | | AC-5 | TC-05, TC-09 | PASS | | AC-6 | TC-06, TC-07, TC-07b | PASS | | AC-7 | TC-08, TC-08b | PASS | | AC-8 | TC-09, TC-10 | PASS | | AC-9 | проверено review (CHANGELOG/.env.example/INFRA.md/ADR) | PASS | | AC-10 | полный регресс `pytest tests/` | PASS | ## Вывод pytest ### Целевые тесты ORCH-017 ``` tests/test_notify_approve_links.py::test_tc01_brd_link_present PASSED tests/test_notify_approve_links.py::test_tc02_plane_link_present PASSED tests/test_notify_approve_links.py::test_tc03_url_fallbacks PASSED tests/test_notify_approve_links.py::test_tc04_keeps_approved_call_to_action PASSED tests/test_notify_approve_links.py::test_tc05_single_notifying_message PASSED tests/test_notify_approve_links.py::test_tc06_graceful_missing_branch_and_issue PASSED tests/test_notify_approve_links.py::test_tc07_plane_base_empty_drops_plane_link_keeps_brd PASSED tests/test_notify_approve_links.py::test_tc07b_loopback_plane_base_dropped PASSED tests/test_notify_approve_links.py::test_tc08_html_escaped_and_valid_markup PASSED tests/test_notify_approve_links.py::test_tc08b_send_telegram_keeps_parse_mode_html PASSED tests/test_analysis_approve_flow_links.py::test_tc10_approved_flow_builds_links_from_db PASSED 11 passed in 0.53s ``` ### Полный регресс ``` ======================== 434 passed, 1 warning in 7.99s ======================== ``` Единственное предупреждение — PydanticDeprecatedSince20 (`src/config.py:4`, class-based config), предсуществующее, к ORCH-017 не относится, на результат не влияет. ## Итог **PASS** — 434/434 теста зелёные, целевые TC-01…TC-10 пройдены, все 10 критериев приёмки покрыты, smoke API прод-инстанса OK. Задача готова к стадии **deploy-staging**.