diff --git a/tests/test_models.py b/tests/test_models.py index 3c7ede5..febe36f 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -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'")