allow-report 0.1.3

Report and receipt rendering for cargo-allow source exception scans.
Documentation
use super::*;

#[test]
fn doctor_json_renderer_records_root_config_and_inventory() {
    let json = render_doctor_json(DoctorReport {
        source_tree_root: "H:/Code/Rust/cargo-allow",
        root_discovery: "nearest_git_root",
        config_path: Some("H:/Code/Rust/cargo-allow/policy/allow.toml"),
        config_schema_version: Some("0.1"),
        config_policy: Some("cargo-allow"),
        config_owner: Some("core/policy"),
        config_status: Some("active"),
        config_valid: Some(true),
        config_diagnostic: None,
        broken_evidence_links: Some(0),
        weak_evidence_references: Some(0),
        inventory_source: "git_tracked",
        files_scanned: 50,
    });

    assert!(json.contains("\"schema_id\": \"cargo-allow.doctor.v1\""));
    assert!(json.contains("\"command\": \"doctor\""));
    assert!(json.contains("\"claim_boundary\""));
    assert!(json.contains("\"scanner_limitations\""));
    assert!(json.contains("\"path\": \"H:/Code/Rust/cargo-allow\""));
    assert!(json.contains("\"discovery\": \"nearest_git_root\""));
    assert!(json.contains("\"found\": true"));
    assert!(json.contains("\"path\": \"H:/Code/Rust/cargo-allow/policy/allow.toml\""));
    assert!(json.contains("\"schema_version\": \"0.1\""));
    assert!(json.contains("\"policy\": \"cargo-allow\""));
    assert!(json.contains("\"owner\": \"core/policy\""));
    assert!(json.contains("\"status\": \"active\""));
    assert!(json.contains("\"valid\": true"));
    assert!(json.contains("\"diagnostic\": null"));
    assert!(json.contains("\"broken_evidence_links\": 0"));
    assert!(json.contains("\"weak_evidence_references\": 0"));
    assert!(json.contains("\"scanner\": \"source_syntax\""));
    assert!(json.contains("\"source\": \"git_tracked\""));
    assert!(json.contains("\"root\": \"H:/Code/Rust/cargo-allow\""));
    assert!(json.contains("\"files_scanned\": 50"));
    let expected = format!(
        r#"{{
  "schema_version": 1,
  "schema_id": "cargo-allow.doctor.v1",
  "tool": "cargo-allow",
  "command": "doctor",
  "claim_boundary": {},
  "scanner_limitations": {},
  "inventory": {{
    "scope": "source_tree",
    "scanner": "source_syntax",
    "source": "git_tracked",
    "root": "H:/Code/Rust/cargo-allow",
    "files_scanned": 50
  }},
  "root": {{
    "path": "H:/Code/Rust/cargo-allow",
    "discovery": "nearest_git_root"
  }},
  "config": {{
    "found": true,
    "path": "H:/Code/Rust/cargo-allow/policy/allow.toml",
    "schema_version": "0.1",
    "policy": "cargo-allow",
    "owner": "core/policy",
    "status": "active",
    "valid": true,
    "diagnostic": null,
    "broken_evidence_links": 0,
    "weak_evidence_references": 0
  }}
}}
"#,
        render_claim_boundary_json(),
        render_scanner_limitations_json()
    );
    assert_eq!(json, expected);
}

#[test]
fn doctor_human_renderer_records_root_config_and_inventory() {
    let text = render_doctor_human(DoctorReport {
        source_tree_root: "H:/Code/Rust/cargo-allow",
        root_discovery: "nearest_git_root",
        config_path: None,
        config_schema_version: None,
        config_policy: None,
        config_owner: None,
        config_status: None,
        config_valid: None,
        config_diagnostic: None,
        broken_evidence_links: None,
        weak_evidence_references: None,
        inventory_source: "filesystem_fallback",
        files_scanned: 7,
    });

    assert!(text.contains("source tree root: H:/Code/Rust/cargo-allow"));
    assert!(text.contains("root discovery: nearest_git_root"));
    assert!(text.contains("config: not found; run `cargo-allow init`"));
    assert!(text.contains(
        "inventory: source_tree/source_syntax via filesystem_fallback; files scanned: 7"
    ));
    assert!(text.contains("did not invoke Cargo metadata"));
    assert!(text.contains("external evidence tools"));
}

#[test]
fn doctor_human_renderer_reports_invalid_config_status() {
    let text = render_doctor_human(DoctorReport {
        source_tree_root: "H:/Code/Rust/cargo-allow",
        root_discovery: "nearest_git_root",
        config_path: Some("policy/allow.toml"),
        config_schema_version: Some("0.1"),
        config_policy: Some("cargo-allow"),
        config_owner: Some("core/policy"),
        config_status: Some("active"),
        config_valid: Some(false),
        config_diagnostic: Some("policy schema_version must not be empty"),
        broken_evidence_links: Some(2),
        weak_evidence_references: Some(1),
        inventory_source: "git_tracked",
        files_scanned: 7,
    });

    assert!(text.contains("config: policy/allow.toml"));
    assert!(text.contains("policy schema version: 0.1"));
    assert!(text.contains("policy: cargo-allow"));
    assert!(text.contains("policy owner: core/policy"));
    assert!(text.contains("policy status: active"));
    assert!(text.contains("config status: invalid: policy schema_version must not be empty"));
    assert!(text.contains("broken evidence links: 2"));
    assert!(text.contains("weak evidence/link references: 1"));
}

#[test]
fn doctor_json_renderer_includes_optional_evidence_health_counts() {
    let json = render_doctor_json(DoctorReport {
        source_tree_root: "H:/Code/Rust/cargo-allow",
        root_discovery: "nearest_git_root",
        config_path: Some("policy/allow.toml"),
        config_schema_version: Some("0.1"),
        config_policy: Some("cargo-allow"),
        config_owner: Some("core/policy"),
        config_status: Some("active"),
        config_valid: Some(false),
        config_diagnostic: Some("missing evidence file"),
        broken_evidence_links: Some(2),
        weak_evidence_references: Some(1),
        inventory_source: "git_tracked",
        files_scanned: 7,
    });

    assert!(json.contains("\"broken_evidence_links\": 2"));
    assert!(json.contains("\"weak_evidence_references\": 1"));
}