test_task_timeline_tracker.py 1.25 KB
from services.shared.events import TaskLifecycleStage, TaskLifecycleStatus
from services.shared.observability import InMemoryEventRecorder
from services.shared.timeline import InMemoryTaskTimelineStore, create_task_timeline_tracker


def test_task_timeline_tracker_records_timeline_and_observable_event():
    timeline_store = InMemoryTaskTimelineStore()
    event_recorder = InMemoryEventRecorder()
    tracker = create_task_timeline_tracker(
        timeline_store=timeline_store,
        event_recorder=event_recorder,
        source="tests.task_timeline_tracker",
    )

    entry = tracker.record(
        task_id="task-123",
        stage=TaskLifecycleStage.ANALYZING,
        status=TaskLifecycleStatus.RUNNING,
        action="analysis started",
        progress_percent=65.0,
        payload={"analysis_run_id": "run-123"},
        metadata={"operation": "unit_test"},
    )

    assert entry.task_id == "task-123"
    assert entry.stage == "analyzing"
    assert entry.status == "running"
    assert tracker.latest("task-123") == entry
    assert event_recorder.events[-1].event_name == "task.analyzing.running"
    assert event_recorder.events[-1].payload["analysis_run_id"] == "run-123"
    assert event_recorder.events[-1].payload["metadata"]["operation"] == "unit_test"