This repository has been archived on 2026-08-04. You can view files and clone it, but cannot push or open issues or pull requests.
orchestrator/agent-team/tests/test_task_model.py

111 lines
2.7 KiB
Python
Raw Normal View History

"""Unit tests for agent_team.task_model (§3.3, §3.3.1)."""
from __future__ import annotations
from agent_team.task_model import (
Phase,
PipelineState,
TaskRecord,
TaskStatus,
new_thread_id,
task_from_dict,
task_from_json,
task_to_dict,
task_to_json,
)
def test_new_thread_id_unique_hex() -> None:
a = new_thread_id()
b = new_thread_id()
assert a != b
assert len(a) == 32
int(a, 16) # must be valid hex
def test_phase_members() -> None:
assert {p.name for p in Phase} == {
"INTAKE",
"CLARIFY",
"PLAN",
"REVIEW",
"BUILD",
"VERIFY",
"PARKED",
"DONE",
}
def test_task_record_defaults() -> None:
rec = TaskRecord(
thread_id="t1",
status=TaskStatus.ACTIVE,
current_phase=Phase.INTAKE,
)
assert rec.qa_history == []
assert rec.plan is None
assert rec.review_verdicts == []
assert rec.candidate_diff is None
assert rec.diff_hash is None
assert rec.ci_results is None
assert rec.transport == ""
def test_to_dict_serializes_enums_to_values() -> None:
rec = TaskRecord(
thread_id="t1",
status=TaskStatus.WAITING_HUMAN,
current_phase=Phase.CLARIFY,
)
data = task_to_dict(rec)
assert data["status"] == "waiting_human"
assert data["current_phase"] == "clarify"
def test_roundtrip_dict() -> None:
rec = TaskRecord(
thread_id="t1",
status=TaskStatus.PARKED,
current_phase=Phase.PLAN,
qa_history=[{"q": "x", "a": "y"}],
plan={"phases": [1, 2]},
review_verdicts=["REQUEST_CHANGES"],
candidate_diff="diff --git a b",
diff_hash="deadbeef",
ci_results={"conclusion": "success"},
transport="slack",
created_at="2026-06-17T00:00:00Z",
updated_at="2026-06-17T01:00:00Z",
)
restored = task_from_dict(task_to_dict(rec))
assert restored == rec
def test_roundtrip_json() -> None:
rec = TaskRecord(
thread_id="t2",
status=TaskStatus.DONE,
current_phase=Phase.DONE,
diff_hash="abc",
)
restored = task_from_json(task_to_json(rec))
assert restored == rec
assert restored.status is TaskStatus.DONE
assert restored.current_phase is Phase.DONE
def test_pipeline_state_keys_mirror_task_record() -> None:
# Every PipelineState key should be a TaskRecord field.
state_keys = set(PipelineState.__annotations__)
record_fields = set(TaskRecord.__dataclass_fields__)
assert state_keys == record_fields
def test_pipeline_state_usable_as_dict() -> None:
state: PipelineState = {
"thread_id": "t1",
"status": "active",
"current_phase": "intake",
}
assert state["thread_id"] == "t1"