use std::path::PathBuf;
use crate::analysis::result::{AnalysisResult, FailureReason};
#[test]
fn transport_with_status_renders_the_code_in_display() {
let reason = FailureReason::Transport {
status: Some(429),
message: "rate limited".to_owned(),
};
let rendered = format!("{reason}");
assert!(
rendered.contains("429"),
"rendered line must contain 429, got {rendered:?}"
);
}
#[test]
fn merge_unions_same_path_into_one_entry_keeping_the_first_reason() {
let path = PathBuf::from("src/lib.rs");
let mut first = AnalysisResult::default();
first.failed_files.insert(
path.clone(),
FailureReason::Transport {
status: Some(429),
message: "rate limited".to_owned(),
},
);
let other = PathBuf::from("src/other.rs");
let mut second = AnalysisResult::default();
second.failed_files.insert(
path.clone(),
FailureReason::Transport {
status: Some(500),
message: "internal".to_owned(),
},
);
second
.failed_files
.insert(other.clone(), FailureReason::Truncated);
first.merge(second);
assert_eq!(
first.failed_files.len(),
2,
"the colliding path unions into one entry and the new path is added"
);
assert!(
first.failed_files.contains_key(&other),
"a no-op merge would leave this absent"
);
let kept = first
.failed_files
.get(&path)
.expect("the merged entry is present");
assert_eq!(
kept,
&FailureReason::Transport {
status: Some(429),
message: "rate limited".to_owned(),
},
"first reason wins on a key collision"
);
}
#[test]
fn three_failure_shapes_are_distinct_and_each_one_renders() {
let transport = FailureReason::Transport {
status: Some(429),
message: "rate limited".to_owned(),
};
let truncated = FailureReason::Truncated;
let malformed = FailureReason::MalformedFinding("unknown severity `blocker`".to_owned());
assert!(
matches!(transport, FailureReason::Transport { .. }),
"transport failure must remain Transport"
);
assert!(
matches!(truncated, FailureReason::Truncated),
"truncated response must remain Truncated"
);
assert!(
matches!(malformed, FailureReason::MalformedFinding(_)),
"unknown severity must remain MalformedFinding"
);
assert!(
format!("{transport}").contains("429"),
"transport line must carry its HTTP code"
);
assert!(
format!("{truncated}").contains("truncated"),
"truncated line must say so"
);
assert!(
format!("{malformed}").contains("malformed finding"),
"malformed line must say so, got {:?}",
malformed
);
}
#[test]
fn documented_cache_limits_hold_their_stated_values() {
use crate::cli::check::{CACHE_MAX_BYTES, CACHE_TTL_DAYS};
assert_eq!(CACHE_TTL_DAYS, 30);
assert_eq!(CACHE_MAX_BYTES, 268_435_456, "256 MiB, per its doc comment");
}