Files
orchestrator/docs/work-items/ORCH-067/04-test-plan.yaml

182 lines
7.6 KiB
YAML
Raw Permalink 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.
work_item: ORCH-067
description: >
План тестов для ORCH-067 (Telegram tracker: bump по умолчанию, статус-строка
карточки по модели Plane ORCH-066, кликабельный номер задачи в карточке и во
всех уведомлениях орка). Сеть изолируется: send_telegram/edit_telegram/
delete_telegram подменяются рекордерами (как в tests/conftest.py и
tests/test_notify_approve_links.py); БД — временный SQLite, сидируемый фикстурой.
tests:
# --- Группа A: bump по умолчанию (AC-1..AC-4) ---
- id: TC-01
type: unit
description: "Дефолт Settings().tracker_mode == 'bump' без env ORCH_TRACKER_MODE"
module: tests/test_tracker_bump_default.py
asserts: "AC-1"
expected: PASS
- id: TC-02
type: unit
description: >
bump-поведение: при повторном update_task_tracker с сохранённым
tracker_message_id вызывается delete_telegram(old) -> send_telegram(...,
disable_notification=True) -> set_tracker_message_id(new). Одна карточка.
module: tests/test_tracker_bump_default.py
asserts: "AC-2"
expected: PASS
- id: TC-03
type: unit
description: >
bump fail-safe: send_telegram вернул None (нет креды/транзиент) ->
tracker_message_id не обнуляется, дубликат в вызове не создаётся.
module: tests/test_tracker_bump_default.py
asserts: "AC-3"
expected: PASS
- id: TC-04
type: unit
description: "ORCH_TRACKER_MODE=edit -> прежнее edit-поведение (editMessageText)"
module: tests/test_tracker_bump_default.py
asserts: "AC-4"
expected: PASS
# --- Группа B: статус-строка карточки (AC-5..AC-9) ---
- id: TC-05
type: unit
description: "render_task_tracker содержит явную строку текущего Plane-статуса"
module: tests/test_tracker_status_line.py
asserts: "AC-5"
expected: PASS
- id: TC-06
type: unit
description: >
Маппинг stage -> Plane-статус по таблице ТЗ §2.2: created->To Analyse,
analysis->Analysis, architecture->Architecture, development->Development,
review->Code-Review, testing->Testing, deploy->Awaiting Deploy, done->Done
(параметризованный тест по всем stage).
module: tests/test_tracker_status_line.py
asserts: "AC-6"
expected: PASS
- id: TC-07
type: unit
description: >
analysis + brd_review_started_at задан + brd_review_ended_at пуст ->
статус '⏸️ In Review' (ожидание согласования BRD); строка 'Подтверждение
BRD' с ⏸️/⏳ сохранена; без сетевых вызовов.
module: tests/test_tracker_status_line.py
asserts: "AC-7"
expected: PASS
- id: TC-08
type: unit
description: >
Awaiting Deploy ('ожидание Confirm Deploy') и Needs Input ('нужны
уточнения') корректно отражаются в статус-строке.
module: tests/test_tracker_status_line.py
asserts: "AC-8"
expected: PASS
- id: TC-09
type: unit
description: >
render_task_tracker не падает при битых/недоступных данных статуса
(деградация на stage-маппинг/fallback, исключение не наружу).
module: tests/test_tracker_status_line.py
asserts: "AC-9, AC-16"
expected: PASS
# --- Группа C: кликабельный номер в карточке (AC-10..AC-11) ---
- id: TC-10
type: unit
description: >
При полных данных (plane_web_url не loopback, workspace, project_id по repo,
plane_issue_id) карточка содержит <a href=".../issues/<id>/">ORCH-NNN</a>
с корректным URL.
module: tests/test_tracker_issue_link.py
asserts: "AC-10"
expected: PASS
- id: TC-11
type: unit
description: >
Fail-safe ссылки в карточке: при отсутствии любого из (web_base/не-loopback,
workspace, project_id, plane_issue_id) номер выводится html.escape без <a>,
рендер не падает. Параметризовать по каждому отсутствующему полю.
module: tests/test_tracker_issue_link.py
asserts: "AC-11"
expected: PASS
# --- Группа D: единый хелпер и уведомления (AC-12..AC-14) ---
- id: TC-12
type: unit
description: >
plane_issue_link(...) возвращает HTML-ссылку при достаточных данных и
html.escape(work_item_id) при недостаточных; никогда не бросает (в т.ч. на
None-аргументах и loopback-базе).
module: tests/test_plane_issue_link.py
asserts: "AC-12"
expected: PASS
- id: TC-13
type: unit
description: >
notify_approve_requested: номер задачи кликабелен (ведёт на страницу Plane),
сохранён call-to-action 'Approved', ровно одно notifying-сообщение.
module: tests/test_notify_issue_links.py
asserts: "AC-13"
expected: PASS
- id: TC-14
type: unit
description: >
notify_error: номер задачи кликабелен при наличии данных, деградирует на
сырой номер без падения при их отсутствии.
module: tests/test_notify_issue_links.py
asserts: "AC-13, AC-12"
expected: PASS
- id: TC-15
type: integration
description: >
Точки send_telegram в stage_engine/launcher/merge_gate/job_reaper/
security_gate/reconciler/main, где есть work_item_id, используют
plane_issue_link (или эквивалент) — номер кликабелен. Проверка рекордером
send_telegram на представительных alert-путях (deploy fail, agent fail,
QG fail, прод-деплой).
module: tests/test_notify_issue_links.py
asserts: "AC-13"
expected: PASS
- id: TC-16
type: unit
description: >
HTML-экранирование: title с '<b>'/'&'/'>' экранируется, <a>-разметка
остаётся валидной, сообщение не ломается под parse_mode=HTML (карточка и
уведомления).
module: tests/test_tracker_issue_link.py
asserts: "AC-14"
expected: PASS
# --- Группа E: нерегресс (AC-15..AC-18) ---
- id: TC-17
type: integration
description: >
Инварианты: карточка отправляется с disable_notification=True; одна карточка
на задачу; транспорт send/edit/delete не изменён по семантике.
module: tests/test_tracker_bump_default.py
asserts: "AC-15"
expected: PASS
- id: TC-18
type: integration
description: >
Нерегресс существующих тестов нотификаций (test_notify_approve_links.py,
test_notify_done_regression.py) и корректная деградация карточки для
enduro-trails без новых Plane-статусов.
module: tests/test_notify_done_regression.py
asserts: "AC-16, AC-17"
expected: PASS