test(pipeline-status): regression guard for duplicate Closes mentions #86

Closed
opened 2026-08-16 20:11:22 +03:00 by slaid098 · 0 comments
Owner

Контекст

Урок PR#55: pipeline-status падал в AMBIGUOUS, когда в body PR один и тот же номер issue упоминался несколько раз (Closes #55 + Closes #55). Сейчас это защищено структурой кода (check_issue() дедупит через set()), но выделенного регрессионного теста нет — защита живёт только на чтении кода и может быть случайно потеряна рефакторингом.

Задача

  1. В tests/test_pipeline_status.py добавить тест: check_issue на body с одним и тем же номером дважды (Closes #45 … Closes #45, а также вариант разными ключевыми словами Closes #45 + Fixes #45) → фаза ISSUE DONE, НЕ AMBIGUOUS.
  2. Рядом комментарием сослаться на существующий тест-контраст разных номеров (test_check_issue_ambiguous_multiple: Closes #45 + Fixes #47 → AMBIGUOUS); дублировать его не нужно.

Контракты

  • Изменения только в tests/; продакшн-код pipeline-status.py не трогаем.

Инварианты

  • Весь набор pytest tests/test_pipeline_status*.py зелёный до и после.

Граничные случаи

  • Учесть формат, который уже поддерживает CLOSURE_RE (Closes/Fixes/Resolves + #N).

Влияние на связанные компоненты

  • Нет (тестовая добавка).

Вне scope

  • Любые изменения поведения оракула.

Критерии приемки

  • Новый тест присутствует, имя явно говорит о сценарии (например test_check_issue_duplicate_same_number_not_ambiguous).
  • pytest tests/test_pipeline_status*.py зелёный.
## Контекст Урок PR#55: `pipeline-status` падал в AMBIGUOUS, когда в body PR один и тот же номер issue упоминался несколько раз (`Closes #55` + `Closes #55`). Сейчас это защищено структурой кода (`check_issue()` дедупит через `set()`), но выделенного регрессионного теста нет — защита живёт только на чтении кода и может быть случайно потеряна рефакторингом. ## Задача 1. В `tests/test_pipeline_status.py` добавить тест: `check_issue` на body с одним и тем же номером дважды (`Closes #45` … `Closes #45`, а также вариант разными ключевыми словами `Closes #45` + `Fixes #45`) → фаза ISSUE DONE, НЕ AMBIGUOUS. 2. Рядом комментарием сослаться на существующий тест-контраст разных номеров (`test_check_issue_ambiguous_multiple`: `Closes #45` + `Fixes #47` → AMBIGUOUS); дублировать его не нужно. ## Контракты - Изменения только в tests/; продакшн-код pipeline-status.py не трогаем. ## Инварианты - Весь набор `pytest tests/test_pipeline_status*.py` зелёный до и после. ## Граничные случаи - Учесть формат, который уже поддерживает CLOSURE_RE (Closes/Fixes/Resolves + `#N`). ## Влияние на связанные компоненты - Нет (тестовая добавка). ## Вне scope - Любые изменения поведения оракула. ## Критерии приемки - Новый тест присутствует, имя явно говорит о сценарии (например `test_check_issue_duplicate_same_number_not_ambiguous`). - `pytest tests/test_pipeline_status*.py` зелёный.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
slaid098/opencode-config#86
No description provided.