Files
manual_slop/tests/test_execution_engine.py
2026-03-05 13:55:40 -05:00

80 lines
2.2 KiB
Python

import pytest
from src.models import Ticket
from src.dag_engine import TrackDAG, ExecutionEngine
def test_execution_engine_basic_flow():
t1 = Ticket(id="T1", description="desc", status="todo")
t2 = Ticket(id="T2", description="desc", status="todo", depends_on=["T1"])
dag = TrackDAG([t1, t2])
engine = ExecutionEngine(dag)
# 1. First tick
ready = engine.tick()
assert len(ready) == 1
assert ready[0].id == "T1"
assert ready[0].status == "todo" # Not auto-queued yet
# 2. Mark T1 in_progress
ready[0].status = "in_progress"
ready = engine.tick()
assert len(ready) == 1
assert ready[0].id == "T1"
# 3. Mark T1 complete
ready[0].status = "completed"
ready = engine.tick()
assert len(ready) == 1
assert ready[0].id == "T2"
def test_execution_engine_update_nonexistent_task():
dag = TrackDAG([])
engine = ExecutionEngine(dag)
# Should not crash
engine.update_task_status("NONEXISTENT", "completed")
def test_execution_engine_status_persistence():
t1 = Ticket(id="T1", description="desc", status="todo")
dag = TrackDAG([t1])
engine = ExecutionEngine(dag)
engine.update_task_status("T1", "in_progress")
assert t1.status == "in_progress"
def test_execution_engine_auto_queue():
t1 = Ticket(id="T1", description="desc", status="todo")
t2 = Ticket(id="T2", description="desc", status="todo", depends_on=["T1"])
dag = TrackDAG([t1, t2])
engine = ExecutionEngine(dag, auto_queue=True)
# Tick should return T1
ready = engine.tick()
assert len(ready) == 1
assert ready[0].id == "T1"
# Mark T1 complete
t1.status = "completed"
ready = engine.tick()
assert len(ready) == 1
assert ready[0].id == "T2"
def test_execution_engine_step_mode():
t1 = Ticket(id="T1", description="desc", status="todo", step_mode=True)
dag = TrackDAG([t1])
engine = ExecutionEngine(dag, auto_queue=True)
# Even with auto_queue, step_mode task requires manual approval
ready = engine.tick()
assert len(ready) == 1
assert ready[0].id == "T1"
assert ready[0].status == "todo"
# Manual approval
engine.approve_task("T1")
assert t1.status == "in_progress"
def test_execution_engine_approve_task():
t1 = Ticket(id="T1", description="desc", status="todo")
dag = TrackDAG([t1])
engine = ExecutionEngine(dag)
engine.approve_task("T1")
assert t1.status == "in_progress"