use blazingly_json::Value;
use serde::Deserialize;
use weavatrix_refactor_plan::{RefactorPlanLimits, parse_refactor_plan, validate_planner_plan};
#[derive(Deserialize)]
struct Case {
id: String,
consumer: bool,
planner: bool,
#[serde(default)]
plan: Option<Value>,
#[serde(default)]
source: Option<String>,
}
#[test]
fn schema_corpus_and_runtime_profiles_have_declared_outcomes() {
let corpus = include_str!("fixtures/refactor-plan-conformance.jsonl");
let mut count = 0;
for line in corpus.lines().filter(|line| !line.trim().is_empty()) {
let case: Case = blazingly_json::from_str(line).unwrap();
let bytes = case.source.map_or_else(
|| blazingly_json::to_vec(case.plan.as_ref().unwrap()).unwrap(),
String::into_bytes,
);
let parsed = parse_refactor_plan(&bytes, RefactorPlanLimits::default());
assert_eq!(parsed.is_ok(), case.consumer, "{} consumer", case.id);
if let Ok(plan) = parsed {
assert_eq!(
validate_planner_plan(&plan, RefactorPlanLimits::default()).is_ok(),
case.planner,
"{} planner",
case.id
);
} else {
assert!(!case.planner, "{} cannot be planner-valid", case.id);
}
count += 1;
}
assert_eq!(count, 8);
}