6.5 KiB
DEV TASK — добить test_plane_webhook_generates_sequential_ids (последний красный тест)
Проект: orchestrator | Сервер: slin@82.22.50.71 (pw motoZ@yaz2010) | Репо: /home/slin/repos/orchestrator | Контейнер: orchestrator
Ветка УЖЕ существует: fix/isolate-webhook-tests-from-plane (коммит 7bbab9c). Работать в ней же, добавить НОВЫЙ коммит сверху. git fetch origin && git checkout fix/isolate-webhook-tests-from-plane && git pull --ff-only.
Контекст
В предыдущем заходе ты починил 3 целевых теста (коммит 7bbab9c, они зелёные). Но всплыл 1 сосед: test_plane_webhook_generates_sequential_ids (tests/test_webhooks.py:~84) теперь красный (IndexError: list index out of range на assert ids[0] == "ET-001").
Причина (проверена, это НЕ баг моков, а УСТАРЕВШИЙ ТЕСТ):
- Код намеренно изменён (Feature 1, см.
handle_work_item_createdв src/webhooks/plane.py:334): событиеwork_item.createdБОЛЬШЕ НЕ создаёт задачу — только soft QG-0 лог («awaiting In Progress»). Ни branch, ни docs, ни task row. - Задача создаётся только при переходе issue В In Progress (событие
issue/updatedсоstate.group=="started"→start_pipeline). - Поэтому ты в коммите 7bbab9c правильно переписал
test_plane_webhook_creates_taskна путьissue/updated+ 4 мока через ИСТОЧНИК (src.plane_sync.fetch_issue_sequence_id,fetch_issue_fields,add_comment). - А
test_plane_webhook_generates_sequential_idsостался на МЁРТВОМ путиwork_item.createdбез моков → задачи не создаются → список пуст → IndexError.
Что сделать — ТОЛЬКО этот один тест
Привести test_plane_webhook_generates_sequential_ids к НОВОМУ контракту, по образцу уже починенного test_plane_webhook_creates_task (коммит 7bbab9c, строки 57-80 — изучи его как эталон):
- Оба POST'а переделать с
event: work_item.createdна путь перевода в In Progress — формат payload идентичен тому, что вtest_plane_webhook_creates_task:(state id возьми ТОТ ЖЕ, что использован в test_plane_webhook_creates_task:{"event": "issue", "action": "updated", "data": {"id": "item-1", "name": "First task", "project": "proj-1", "state": {"id": "<In Progress state id>", "name": "In Progress", "group": "started"}}}b873d9eb-993c-48cd-97ac-99a9b1623967). - Навесить ТЕ ЖЕ моки-декораторы, что на починенном тесте:
@patch("src.plane_sync.add_comment"),@patch("src.plane_sync.fetch_issue_sequence_id", ...),@patch("src.plane_sync.fetch_issue_fields", return_value=(...)),@patch("src.webhooks.plane._create_gitea_branch", new_callable=AsyncMock),@patch("src.webhooks.plane._create_initial_docs", new_callable=AsyncMock).- ⚠️ НЮАНС про
fetch_issue_sequence_id: в одиночном тесте мок возвращаетNone(fallback на DB-инкремент). Здесь нужны ПОСЛЕДОВАТЕЛЬНЫЕ id (ET-001, ET-002). Еслиreturn_value=Noneдля обоих вызовов → DB-инкремент даст ET-001, ET-002 (то что нужно — проверь!). Если же тест требует точные seq из Plane — используйside_effect=[1, 2](или [None, None] если полагаемся на DB). Подбери так, чтобыids == ["ET-001","ET-002"]выполнялось ЧЕСТНО, не подгоняя assert. НЕ меняй сам assert, если можно добиться правильным моком.
- ⚠️ НЮАНС про
- Убедись, что
nameдостаточно длинный для QG-0 (>= 5 символов; "First task"/"Second task" — ок), а repo резолвится в enduro-trails (prefix ET) как в соседнем тесте.
ЗАПРЕТЫ
- Менять ТОЛЬКО
tests/test_webhooks.py, ТОЛЬКО этот один тест. НЕ трогать src/, workflow ci.yml, conftest, другие тесты. - НЕ добавлять X-Gitea-Delivery заголовки и НЕ лезть в дедупликацию — это вне задачи (в прошлый раз ты на этом завис, я откатила тот хвост).
- ⚠️ НЕ регистрировать раннеров, НЕ запускать nohup. Раннер
mva154-runner-orchуже есть. - PR push в main ЗАПРЕЩЁН. НЕ мержить — мержит ревьюер.
Проверка (приложить пруф)
- Чистое окружение (read-only, без .env):
— должно быть 0 failed по всему test_webhooks.py (был 1 failed). Приложи итоговую строку (X passed).
docker run --rm -v /home/slin/repos/orchestrator:/code:ro -w /code -e PYTHONPATH=/code \ --entrypoint python3 $(docker inspect orchestrator --format '{{.Config.Image}}') \ -m pytest tests/test_webhooks.py -q - Push (новый коммит в ту же ветку) → workflow прогнался, job test → success (
/api/v1/repos/admin/orchestrator/actions/tasks, токенdocker exec orchestrator printenv ORCH_GITEA_TOKEN). ⚠️ Раньше CI был красный ИМЕННО из-за этого теста — теперь должен позеленеть. Если ещё что-то красное — отчёт, СТОП. git log --oneline origin/main..origin/fix/isolate-webhook-tests-from-planeпоказывает оба коммита (7bbab9c + твой новый).
Результат
- Новый коммит в ветке
fix/isolate-webhook-tests-from-plane, весь test_webhooks.py зелёный в чистом окружении, CI job test = success. PR #27 (уже существует на эту ветку) станет зелёным. Отчёт с пруфом →tasks/orchestrator/reports/dev-2026-06-04-fix-seq-test.md. Коммит:test: migrate sequential_ids test to In Progress contract.