| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- from app.core.orchestration.migration.retirement import (
- N8nRetirementChecklist,
- N8nRetirementGate,
- )
- def checklist(**overrides):
- values = {
- "inventory_disposition_complete": True,
- "all_dataflows_kestra_primary": True,
- "business_cycle_and_recovery_complete": True,
- "standby_observation_no_rollback": True,
- "monitoring_and_alerting_complete": True,
- "dependency_failures_safe": True,
- "secure_archive_complete": True,
- "independent_review_approved": True,
- "final_l4_passed": True,
- }
- values.update(overrides)
- return N8nRetirementChecklist(**values)
- def test_retirement_is_blocked_with_explicit_missing_evidence():
- decision = N8nRetirementGate.evaluate(
- checklist(
- inventory_disposition_complete=False,
- independent_review_approved=False,
- final_l4_passed=False,
- )
- )
- assert decision["status"] == "blocked"
- assert decision["retirement_approved"] is False
- assert decision["missing"] == [
- "inventory_disposition_complete",
- "independent_review_approved",
- "final_l4_passed",
- ]
- def test_retirement_approval_requires_every_gate():
- decision = N8nRetirementGate.evaluate(checklist())
- assert decision == {
- "status": "approved",
- "retirement_approved": True,
- "missing": [],
- }
|