agent-swarm-workbench / tests_python /test_run_journal.py
Kiy-K's picture
Restore full Space app with bucket model support
31c8075 verified
Raw
History Blame Contribute Delete
2.52 kB
import pytest
from arena.event_bus import EventBus
from arena.run_journal import InvalidRunStatusTransition, RunJournal
from arena.run_models import RunEvent, RunRequest, RunTask
from arena.run_store import InMemoryRunStore
def test_run_journal_owns_status_transitions_and_streams() -> None:
journal = RunJournal(run_store=InMemoryRunStore(), event_bus=EventBus())
access = journal.create_run(RunRequest(prompt="Build a CLI"))
queue = journal.subscribe_events(access.run.id)
journal.transition(access.run.id, "planning")
journal.publish(access.run.id, {"kind": "run_started", "run_id": access.run.id})
view = journal.get_run(access.run.id)
assert view.status == "planning"
assert queue.get(timeout=1)["kind"] == "run_started"
def test_run_journal_rejects_invalid_status_transition() -> None:
journal = RunJournal(run_store=InMemoryRunStore(), event_bus=EventBus())
access = journal.create_run(RunRequest(prompt="Build a CLI"))
with pytest.raises(InvalidRunStatusTransition):
journal.transition(access.run.id, "completed")
def test_run_journal_persists_runtime_task_and_event_updates() -> None:
journal = RunJournal(run_store=InMemoryRunStore(), event_bus=EventBus())
access = journal.create_run(RunRequest(prompt="Build a CLI"))
task = RunTask(id="task-1", title="Build codebase", status="active")
event = RunEvent(id="event-1", message="Coordinator started work")
journal.publish(access.run.id, {"kind": "task_created", "task": task.model_dump()})
journal.publish(access.run.id, {"kind": "event", "event": event.model_dump(mode="json")})
view = journal.get_run(access.run.id)
assert view.tasks == [task]
assert [item.id for item in view.events] == ["event-1"]
def test_run_journal_cancels_active_tasks_and_closes_stream() -> None:
journal = RunJournal(run_store=InMemoryRunStore(), event_bus=EventBus())
access = journal.create_run(RunRequest(prompt="Build a CLI"))
queue = journal.subscribe_events(access.run.id)
journal.transition(access.run.id, "working")
journal.publish(
access.run.id,
{
"kind": "task_created",
"task": RunTask(id="task-1", title="Build codebase", status="active").model_dump(),
},
)
view = journal.cancel_run(access.run.id)
assert view.status == "interrupted"
assert view.tasks[0].status == "interrupted"
assert queue.get(timeout=1)["kind"] == "task_created"
assert queue.get(timeout=1) is None