AgentEvalTool/tests/unit/test_campaign_recovery.py

47 lines
1.6 KiB
Python

"""Tests for the unified durable Campaign startup recovery seam."""
from agenteval.evaluation import campaign_lifecycle
def test_recovery_coordinator_orders_cleanup_before_relaunch(db_session, monkeypatch):
calls: list[str] = []
class FakeRuns:
def __init__(self, _session):
pass
def mark_orphans_failed(self):
calls.append("runs")
return 2
class FakeAnalysis:
def __init__(self, _session):
pass
def mark_orphans_failed(self):
calls.append("analysis")
return 1
class FakeComparison(FakeAnalysis):
def mark_orphans_failed(self):
calls.append("comparison")
return 1
monkeypatch.setattr(campaign_lifecycle, "RunRepository", FakeRuns)
monkeypatch.setattr(campaign_lifecycle, "CampaignAnalysisRepository", FakeAnalysis)
monkeypatch.setattr(campaign_lifecycle, "CampaignPeriodComparisonRepository", FakeComparison)
import agenteval.evaluation.analysis as analysis
import agenteval.evaluation.campaign_runner as runner
monkeypatch.setattr(analysis, "resume_queued_campaign_analysis", lambda _session: calls.append("queued") or 3)
monkeypatch.setattr(runner, "resume_running_campaigns", lambda _session, **_: calls.append("campaigns") or 4)
summary = campaign_lifecycle.recover_campaign_runtime(db_session)
assert calls == ["runs", "analysis", "comparison", "campaigns", "queued"]
assert summary.interrupted_runs == 2
assert summary.interrupted_analysis == 2
assert summary.resumed_campaigns == 4
assert summary.resumed_analysis == 3