# tests/integration/test_replay_resume_acknowledgments.py """Tests intégration : /replay/resume valide les acquittements de safety_checks (QW4).""" import pytest def test_resume_accepts_when_all_required_acknowledged(): """État pause + tous required acquittés → reprise OK.""" state = { "status": "paused_need_help", "safety_checks": [ {"id": "c1", "label": "X", "required": True, "source": "declarative", "evidence": None}, {"id": "c2", "label": "Y", "required": True, "source": "declarative", "evidence": None}, ], "checks_acknowledged": [], } # Simuler la validation côté serveur acknowledged = ["c1", "c2"] required_ids = {c["id"] for c in state["safety_checks"] if c["required"]} missing = required_ids - set(acknowledged) assert missing == set() # rien ne manque → reprise OK def test_resume_rejects_when_required_missing(): """État pause + un required non acquitté → 400 required_checks_missing.""" state = { "status": "paused_need_help", "safety_checks": [ {"id": "c1", "label": "X", "required": True, "source": "declarative", "evidence": None}, {"id": "c2", "label": "Y", "required": False, "source": "llm_contextual", "evidence": "..."}, ], "checks_acknowledged": [], } acknowledged = ["c2"] # only optional required_ids = {c["id"] for c in state["safety_checks"] if c["required"]} missing = required_ids - set(acknowledged) assert missing == {"c1"} # c1 manquant → resume doit retourner 400 def test_resume_audit_trail_stored(): """checks_acknowledged contient les ids reçus (audit).""" state = { "status": "paused_need_help", "safety_checks": [ {"id": "c1", "required": True, "label": "X", "source": "declarative", "evidence": None}, ], "checks_acknowledged": [], } acknowledged = ["c1"] state["checks_acknowledged"] = acknowledged state["status"] = "running" assert state["checks_acknowledged"] == ["c1"] assert state["status"] == "running"