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