5.5 KiB
5.5 KiB
type, work_item_id, result
| type | work_item_id | result |
|---|---|---|
| test-report | ORCH-082 | PASS |
Test Report — ORCH-082
Гарантированный идемпотентный код-PR перед merge-verify (фикс ложного HOLD «no open PR»).
Окружение
- Python: 3.12.13
- pytest: 8.3.3
- Ветка: feature/ORCH-082-orch-81-pr-merge-verify-hold
- Дата: 2026-06-09
- Review verdict: APPROVED (12-review.md, P0/P1 отсутствуют)
Проверка окружения
GET /health→{"status":"ok","service":"orchestrator"}— прод-контейнер 8500 жив.- Тесты прогнаны в worktree ветки (прод не затронут, деструктивных операций нет).
Smoke test API (prod 8500)
| Endpoint | Результат |
|---|---|
GET /health |
{"status":"ok"} — OK |
GET /status |
OK — ORCH-082 (id=61) виден на стадии testing |
GET /queue |
OK — running:1, queued:0, breaker closed, reconcile/reaper/post_deploy активны |
Результаты (привязка к 04-test-plan.yaml)
| TC ID | Тип | Описание | Тест | Результат |
|---|---|---|---|---|
| TC-01 | unit | ensure_open_pr: PR нет → POST создаёт → ('created', N); фильтр base==main | test_tc01_creates_pr_when_absent | PASS |
| TC-02 | unit | PR head==branch И base==main уже есть → ('existed', N), POST не вызывается | test_tc02_existed_no_duplicate | PASS |
| TC-03 | unit | Мульти-PR: только docs-PR (base!=main) → создаётся PR на main (AC-6) | test_tc03_docs_pr_not_counted_creates_on_main | PASS |
| TC-04 | unit | never-raise: GET/POST кидает ошибку → ('failed', reason), не всплывает (AC-7) | test_tc04_never_raise_on_get_error / _on_post_error / _failed_when_post_non_2xx | PASS (3) |
| TC-05 | unit | Гонка: POST 'PR exists' (409/422) → повторный GET → ('existed', N), без дубля | test_tc05_race_post_conflict_confirms_existing[409,422] | PASS (2) |
| TC-06 | integration | PR отсутствовал → ensure создаёт → merge_pr → verify True → done без HOLD (AC-3) | test_tc06_autocreate_then_merge_then_done | PASS |
| TC-07 | integration | Регресс ORCH-073: verify=False → HOLD + set_issue_blocked, НЕ done, без отката (AC-4) | test_tc07_verify_false_still_holds | PASS |
| TC-08 | integration | ensure → 'failed' (Gitea down) → честный HOLD+alert, текст ≠ 'not merged' (AC-7) | test_tc08_ensure_failed_holds_distinct | PASS |
| TC-09 | integration | Kill-switch off → ensure не вызывается, 'no open PR' → прежний HOLD 1:1 (AC-8) | test_tc09_killswitch_off_no_autocreate | PASS |
| TC-10 | integration | Условность: non-self репо (applies=False) → no-op, авто-создание не выполняется (AC-9) | test_tc10_non_self_repo_noop | PASS |
| TC-11 | integration | Идемпотентный повторный проход: PR existed, already-merged → verify True → done (FR-5) | test_tc11_idempotent_redrive | PASS |
| TC-12 | unit | Логи различают created/existed/failed; HOLD create-failed ≠ HOLD not-merged (AC-5) | test_tc12_logs_distinguish_outcomes | PASS |
| TC-13 | integration | Happy-path ORCH-071/073 не изменён: verify True → done, merged_to_main: true | test_merge_verify.py (verify_true_when_sha_is_ancestor + 7 регресс-тестов) | PASS |
Все 13 TC из тест-плана покрыты и зелёные.
Сопоставление с критериями приёмки (03-acceptance-criteria.md)
- AC-1 Root cause в ADR-001 (R-A структурный + R-C для ORCH-074) — подтверждено review.
- AC-2 Идемпотентный код-PR, без дублей — TC-02, TC-05, TC-11 — PASS.
- AC-3 Авто-создание PR ПЕРЕД merge_pr — TC-06 — PASS.
- AC-4 Защита ORCH-073 цела (verify=False → HOLD, не done) — TC-07 + test_merge_verify — PASS.
- AC-5 Логи различают исход PR — TC-12 — PASS.
- AC-6 Фильтр base==main (docs-PR не код-PR) — TC-03 — PASS.
- AC-7 Never-raise + честный HOLD при недоступности Gitea — TC-04, TC-08 — PASS.
- AC-8 Kill-switch off → поведение 1:1 — TC-09 — PASS.
- AC-9 Условность self-hosting — TC-10 — PASS.
- AC-10 Инварианты не нарушены, документация обновлена — подтверждено review (README/CHANGELOG/.env.example/ADR).
- AC-11 pytest зелёный — 1046 passed — PASS.
Вывод pytest
Полный прогон:
1046 passed, 1 warning in 25.57s
(единственный warning — PydanticDeprecatedSince20 в src/config.py:5, не относится к ORCH-082, предсуществующий.)
Целевые наборы:
tests/test_orch082_ensure_pr.py ............ (8 passed)
tests/test_orch082_merge_verify_autocreate.py ....... (7 passed)
tests/test_merge_verify.py ........ (8 passed)
======================== 23 passed, 1 warning in 0.42s =========================
Итог
PASS — все 1046 тестов зелёные, целевые наборы ORCH-082 + регресс merge-verify зелёные,
smoke API (health/status/queue) OK, все 13 TC и AC-1..AC-11 покрыты. Задача готова к переходу
на стадию deploy-staging.