From b824e4babdcc60b2c4188c0bfae51ecddbc058c5 Mon Sep 17 00:00:00 2001 From: Gros Frumos Date: Wed, 18 Mar 2026 21:47:18 +0200 Subject: [PATCH] =?UTF-8?q?kin:=20KIN-UI-020=20=D0=9A=D0=BE=D0=BD=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?VALID=5FTASK=5FSTATUSES=20=D0=B8=D0=B7=20list=20=D0=B2=20frozen?= =?UTF-8?q?set?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_models.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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'")