pub fn coverage(intents: &[IntentOutline], plan: &Plan) -> IntentCoverageExpand description
Derive the coverage of intents by plan.
use majordomus_cli::intent_plan::{coverage, CoverageStrength, IntentOutline, IssueOrigin};
use majordomus_cli::plan::Plan;
let plan: Plan = serde_json::from_value(serde_json::json!({
"project": {"name": "p", "repository": "o/p", "default_branch": "master",
"active_milestone": ""},
"statuses": {"issue": [], "milestone": []},
"milestones": [], "waves": [], "edges": [], "milestone_edges": [], "findings": [],
"issues": [{"id": "I1", "milestone": "m", "status": "READY", "wave": 1,
"priority": "p1", "profile": "implementation", "parallel_safe": true,
"title": "t", "slug": "", "depends_on": [], "blocked_by": [], "dependents": [],
"scope": ["src"], "serves": ["x#works"], "objective": "", "evidence_have": 0,
"evidence_need": 1, "started_at": "", "verified_at": "", "completed_at": ""}]
})).unwrap();
let x = IntentOutline { id: "x".into(), criteria: vec!["works".into()],
milestones: vec!["m".into()], ..Default::default() };
let c = coverage(&[x], &plan);
assert_eq!(c.failures(), 0);
assert_eq!(c.criterion("x", "works").unwrap().strength, CoverageStrength::Covered);
assert_eq!(c.purpose("I1").unwrap().origin, IssueOrigin::Intent);