bee-check 0.1.0

Retrievability checker for Ethereum Swarm references. Multi-vantage stewardship probes, per-chunk drill-down, and one-shot re-seed.
Documentation
//! Unit test for the status-aggregation logic. The network path is
//! exercised by the binary smoke test (see README).

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\""));
}