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 --root \"H:/Code/Rust/cargo-allow\"`"
)
);
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_json_renderer_suggests_init_when_config_is_missing() {
let json = render_doctor_json(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!(json.contains("\"found\": false"));
assert!(json.contains("\"path\": null"));
assert!(json.contains("\"valid\": null"));
assert!(json.contains("\"diagnostic\": null"));
assert!(json.contains(
"\"suggested_init_command\": \"cargo-allow init --root \\\"H:/Code/Rust/cargo-allow\\\"\""
));
}
#[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(
"broken evidence worklist: cargo-allow worklist --item-kind broken_evidence_link --format json"
));
assert!(text.contains("weak evidence/link references: 1"));
assert!(text.contains(
"weak evidence worklist: cargo-allow worklist --item-kind weak_evidence_reference --format json"
));
}
#[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"));
}
#[test]
fn doctor_json_renderer_routes_evidence_repair_queues() {
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("\"evidence_repair_queues\""));
assert!(json.contains("\"signal\": \"broken_evidence_links\""));
assert!(json.contains("\"label\": \"broken evidence links\""));
assert!(json.contains("\"route_kind\": \"worklist_item_kind\""));
assert!(json.contains("\"item_kind\": \"broken_evidence_link\""));
assert!(json.contains("\"count\": 2"));
assert!(json.contains(
"\"command\": \"cargo-allow worklist --item-kind broken_evidence_link --format json\""
));
assert!(json.contains("\"signal\": \"weak_evidence_references\""));
assert!(json.contains("\"label\": \"weak evidence references\""));
assert!(json.contains("\"item_kind\": \"weak_evidence_reference\""));
assert!(json.contains("\"count\": 1"));
assert!(json.contains(
"\"command\": \"cargo-allow worklist --item-kind weak_evidence_reference --format json\""
));
}
#[test]
fn doctor_json_renderer_omits_evidence_repair_queues_when_clean() {
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(true),
config_diagnostic: None,
broken_evidence_links: Some(0),
weak_evidence_references: Some(0),
inventory_source: "git_tracked",
files_scanned: 7,
});
assert!(!json.contains("\"evidence_repair_queues\""));
}