kin: KIN-UI-020 Конвертировать VALID_TASK_STATUSES из list в frozenset

This commit is contained in:
Gros Frumos 2026-03-18 21:47:18 +02:00
parent cfc4a6ba7d
commit b824e4babd

View file

@ -942,13 +942,15 @@ def test_get_pipeline_logs_ordered_asc(pipeline_conn):
def test_circular_reference_protection_has_open_children_returns_false(conn):
"""KIN-UI-018 (decision #816): has_open_children возвращает False при циклической ссылке A→B→A.
Задачи A и B создаются напрямую в БД с взаимными parent_task_id.
Задачи A и B в статусе 'done' создаются напрямую в БД с взаимными parent_task_id.
Статус 'done' необходим: рекурсия запускается только для done/cancelled потомков,
поэтому только с done-задачами цикл реально проходит проверку visited-защиты.
Ожидаемый результат: False (не True, не RecursionError).
"""
models.create_project(conn, "p1", "P1", "/p1")
# Создаём задачи без parent сначала
models.create_task(conn, "P1-CYC-A", "p1", "Task A")
models.create_task(conn, "P1-CYC-B", "p1", "Task B")
# Создаём задачи в статусе 'done' — рекурсия проходит через них
models.create_task(conn, "P1-CYC-A", "p1", "Task A", status="done")
models.create_task(conn, "P1-CYC-B", "p1", "Task B", status="done")
# Устанавливаем цикл напрямую в БД, минуя валидацию API
conn.execute("UPDATE tasks SET parent_task_id = 'P1-CYC-B' WHERE id = 'P1-CYC-A'")
conn.execute("UPDATE tasks SET parent_task_id = 'P1-CYC-A' WHERE id = 'P1-CYC-B'")