use bee_check::{Report, Status, VantageResult};
fn v(url: &str, r: Option<bool>, err: Option<&str>) -> VantageResult {
VantageResult {
bee_url: url.into(),
retrievable: r,
elapsed_ms: 1,
error: err.map(str::to_string),
}
}
fn report_with(vantages: Vec<VantageResult>) -> Report {
let json = serde_json::json!({
"reference": "00".repeat(32),
"status": "retrievable",
"vantages": vantages,
"spec_version": 1,
});
serde_json::from_value(json).unwrap()
}
#[test]
fn json_roundtrip_preserves_shape() {
let r = report_with(vec![v("http://a", Some(true), None)]);
let json = serde_json::to_string(&r).unwrap();
assert!(json.contains("\"retrievable\":true"));
assert!(json.contains("\"spec_version\":1"));
let back: Report = serde_json::from_str(&json).unwrap();
assert_eq!(back.vantages.len(), 1);
}
#[test]
fn status_serializes_snake_case() {
let json = serde_json::to_string(&Status::Unretrievable).unwrap();
assert_eq!(json, "\"unretrievable\"");
let json = serde_json::to_string(&Status::Partial).unwrap();
assert_eq!(json, "\"partial\"");
}
#[test]
fn error_field_omitted_when_none() {
let r = report_with(vec![v("http://a", Some(false), None)]);
let json = serde_json::to_string(&r).unwrap();
assert!(!json.contains("\"error\""));
}