69 lines
3.9 KiB
YAML
69 lines
3.9 KiB
YAML
work_item: ORCH-106
|
||
stage: analysis
|
||
author_agent: analyst
|
||
status: ready-for-review
|
||
created_at: 2026-06-12
|
||
model_used: claude-opus-4-8
|
||
track: bug
|
||
title: "Регресс-тест: create_state шлёт валидный color (onboard_project.py)"
|
||
framework: pytest
|
||
scope: >
|
||
Покрывается ТОЛЬКО тело POST, формируемое PlaneClient.create_state в
|
||
scripts/onboard_project.py (наличие непустого валидного hex-поля color) + неизменность
|
||
существующего поведения онбординга. Вне покрытия: реальные сетевые вызовы к Plane CE
|
||
(детерминированный CI без сети — перехват _post/httpx.post), выбор палитры/значения цвета,
|
||
правки рантайма src/**.
|
||
notes: >
|
||
Обязательный регресс-тест багфикс-трека (ORCH-019): TC-01 ДОЛЖЕН быть КРАСНЫМ на коде до фикса
|
||
(тело без color) и ЗЕЛЁНЫМ после фикса. Тесты детерминированы и без сети: инстанцируется
|
||
РЕАЛЬНЫЙ PlaneClient, его _post (или httpx.post) монкипатчится для перехвата (url, payload);
|
||
FakePlane из существующего набора НЕ годится для регресса (мок не строит реальное тело).
|
||
Полный регресс `pytest tests/ -q` должен оставаться зелёным.
|
||
|
||
tests:
|
||
- id: TC-01
|
||
type: unit
|
||
description: >
|
||
[ОБЯЗАТЕЛЬНЫЙ РЕГРЕСС, red→green] Реальный PlaneClient.create_state(project_id, "STOP",
|
||
"cancelled") формирует тело POST с ключом 'color', значение — непустая строка. Перехват
|
||
через монкипатч PlaneClient._post: assert 'color' in payload and payload['color'].
|
||
КРАСНЫЙ до фикса (тело {'name','group'}), ЗЕЛЁНЫЙ после.
|
||
module: tests/test_onboarding_script.py
|
||
expected: PASS
|
||
|
||
- id: TC-02
|
||
type: unit
|
||
description: >
|
||
Значение payload['color'], отправляемое create_state, является валидной hex-строкой цвета
|
||
(соответствует hex-формату, напр. ^#?[0-9A-Fa-f]{6}$). Защита от непустого, но невалидного
|
||
значения.
|
||
module: tests/test_onboarding_script.py
|
||
expected: PASS
|
||
|
||
- id: TC-03
|
||
type: unit
|
||
description: >
|
||
Тело сохраняет существующие ключи: payload содержит корректные 'name' и 'group' (для STOP —
|
||
group 'cancelled' из STATE_GROUPS) ВМЕСТЕ с новым 'color'; добавление color не вытесняет
|
||
name/group.
|
||
module: tests/test_onboarding_script.py
|
||
expected: PASS
|
||
|
||
- id: TC-04
|
||
type: integration
|
||
description: >
|
||
Прогон секции создания статусов онбординга по нескольким статусам (включая STOP, Done,
|
||
Confirm Deploy): для КАЖДОГО перехваченное тело create_state несёт непустой валидный color;
|
||
ни один статус не отправляется без color.
|
||
module: tests/test_onboarding_script.py
|
||
expected: PASS
|
||
|
||
- id: TC-05
|
||
type: unit
|
||
description: >
|
||
Нулевая регрессия контракта: публичная сигнатура create_state(project_id, name, group)
|
||
неизменна; существующие онбординг-тесты (FakePlane mutations ('create_state', name, group),
|
||
call-site строка 773) остаются зелёными.
|
||
module: tests/test_onboarding_script.py
|
||
expected: PASS
|