kin: auto-commit after pipeline
This commit is contained in:
parent
12bf510bbc
commit
de52526659
3 changed files with 502 additions and 2 deletions
|
|
@ -173,7 +173,7 @@ def test_create_project_with_phases_other_phases_remain_pending(conn):
|
|||
conn, "proj1", "P1", "/path",
|
||||
description="Desc", selected_roles=["market_researcher", "tech_researcher"],
|
||||
)
|
||||
# market_researcher, tech_researcher, knowledge_synthesizer, architect → 4 фазы (KIN-DOCS-003)
|
||||
# market_researcher, tech_researcher, architect → 3 фазы; knowledge_synthesizer не фаза (P1-001)
|
||||
for phase in result["phases"][1:]:
|
||||
assert phase["status"] == "pending"
|
||||
|
||||
|
|
@ -394,3 +394,89 @@ def test_revise_phase_updates_task_id_to_new_task(conn):
|
|||
new_task_id = out["phase"]["task_id"]
|
||||
assert new_task_id != original_task_id
|
||||
assert new_task_id == out["new_task"]["id"]
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Regression: knowledge_synthesizer не создаётся как pipeline-фаза (P1-001)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def test_create_project_with_phases_knowledge_synthesizer_not_in_phases(conn):
|
||||
"""Регрессия P1-001: knowledge_synthesizer не создаётся как pipeline-фаза.
|
||||
|
||||
При ≥2 исследователях build_phase_order включает knowledge_synthesizer,
|
||||
но create_project_with_phases должен фильтровать его из DB-фаз.
|
||||
"""
|
||||
result = create_project_with_phases(
|
||||
conn, "proj1", "P1", "/path",
|
||||
description="Desc", selected_roles=["market_researcher", "tech_researcher"],
|
||||
)
|
||||
roles = [ph["role"] for ph in result["phases"]]
|
||||
assert "knowledge_synthesizer" not in roles
|
||||
|
||||
|
||||
def test_create_project_with_phases_two_researchers_creates_three_phases(conn):
|
||||
"""Регрессия P1-001: 2 исследователя → 3 фазы (researcher + researcher + architect), не 4.
|
||||
|
||||
До фикса knowledge_synthesizer создавался как фаза → 4 фазы вместо 3.
|
||||
"""
|
||||
result = create_project_with_phases(
|
||||
conn, "proj1", "P1", "/path",
|
||||
description="Desc", selected_roles=["market_researcher", "tech_researcher"],
|
||||
)
|
||||
assert len(result["phases"]) == 3
|
||||
roles = [ph["role"] for ph in result["phases"]]
|
||||
assert roles == ["market_researcher", "tech_researcher", "architect"]
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Edge cases: "effectively empty" arrays — непустой вход, ноль валидных ролей (P1-001)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def test_create_project_with_phases_raises_if_only_architect(conn):
|
||||
"""P1-001 edge case: [architect] → ValueError после фильтрации (architect не researcher)."""
|
||||
with pytest.raises(ValueError, match="[Aa]t least one research role"):
|
||||
create_project_with_phases(
|
||||
conn, "proj1", "P1", "/path",
|
||||
description="Desc", selected_roles=["architect"],
|
||||
)
|
||||
|
||||
|
||||
def test_create_project_with_phases_raises_if_only_knowledge_synthesizer(conn):
|
||||
"""P1-001 edge case: [knowledge_synthesizer] → ValueError (авто-управляемая роль фильтруется)."""
|
||||
with pytest.raises(ValueError, match="[Aa]t least one research role"):
|
||||
create_project_with_phases(
|
||||
conn, "proj1", "P1", "/path",
|
||||
description="Desc", selected_roles=["knowledge_synthesizer"],
|
||||
)
|
||||
|
||||
|
||||
def test_create_project_with_phases_raises_if_architect_and_synthesizer_only(conn):
|
||||
"""P1-001 edge case: [architect, knowledge_synthesizer] → ValueError (оба авто-управляемые)."""
|
||||
with pytest.raises(ValueError, match="[Aa]t least one research role"):
|
||||
create_project_with_phases(
|
||||
conn, "proj1", "P1", "/path",
|
||||
description="Desc", selected_roles=["architect", "knowledge_synthesizer"],
|
||||
)
|
||||
|
||||
|
||||
def test_create_project_with_phases_raises_if_unknown_roles_only(conn):
|
||||
"""P1-001 edge case: только неизвестные роли → пустой список после validate_roles → ValueError."""
|
||||
with pytest.raises(ValueError, match="[Aa]t least one research role"):
|
||||
create_project_with_phases(
|
||||
conn, "proj1", "P1", "/path",
|
||||
description="Desc", selected_roles=["wizard", "ghost", "oracle"],
|
||||
)
|
||||
|
||||
|
||||
def test_build_phase_order_architect_only_returns_empty():
|
||||
"""P1-001 edge case: build_phase_order([architect]) → [] (architect не researcher)."""
|
||||
result = build_phase_order(["architect"])
|
||||
assert result == []
|
||||
|
||||
|
||||
def test_validate_roles_architect_and_synthesizer_returns_empty():
|
||||
"""P1-001 edge case: validate_roles([architect, knowledge_synthesizer]) → [] (оба отфильтровываются)."""
|
||||
result = validate_roles(["architect", "knowledge_synthesizer"])
|
||||
assert result == []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue