use dig_block::BuilderError;
use std::error::Error as StdError;
#[test]
fn err004_cost_budget_exceeded_display_shows_current_addition_max() {
let e = BuilderError::CostBudgetExceeded {
current: 500_000_000_000,
addition: 100_000_000_000,
max: 550_000_000_000,
};
let s = e.to_string();
assert!(s.contains("500000000000"), "{}", s);
assert!(s.contains("100000000000"), "{}", s);
assert!(s.contains("550000000000"), "{}", s);
assert!(
s.to_lowercase().contains("cost") && s.contains("budget"),
"{}",
s
);
}
#[test]
fn err004_size_budget_exceeded_display_shows_current_addition_max() {
let e = BuilderError::SizeBudgetExceeded {
current: 9_000_000,
addition: 2_000_000,
max: 10_000_000,
};
let s = e.to_string();
assert!(s.contains("9000000"), "{}", s);
assert!(s.contains("2000000"), "{}", s);
assert!(s.contains("10000000"), "{}", s);
assert!(
s.to_lowercase().contains("size") && s.contains("budget"),
"{}",
s
);
}
#[test]
fn err004_too_many_slash_proposals_display_shows_max() {
let e = BuilderError::TooManySlashProposals { max: 64 };
let s = e.to_string();
assert!(s.contains("64"), "{}", s);
assert!(s.to_lowercase().contains("slash"), "{}", s);
}
#[test]
fn err004_slash_proposal_too_large_display_shows_size_and_max() {
let e = BuilderError::SlashProposalTooLarge {
size: 100_000,
max: 65_536,
};
let s = e.to_string();
assert!(s.contains("100000"), "{}", s);
assert!(s.contains("65536"), "{}", s);
}
#[test]
fn err004_signing_failed_display_includes_reason() {
let e = BuilderError::SigningFailed("key not found".into());
let s = e.to_string();
assert!(s.contains("signing failed"), "{}", s);
assert!(s.contains("key not found"), "{}", s);
}
#[test]
fn err004_empty_block_display_matches_spec() {
let e = BuilderError::EmptyBlock;
assert_eq!(
e.to_string(),
"empty block: no spend bundles added",
"Display must match ERR-004 template for log stability"
);
}
#[test]
fn err004_missing_dfsp_roots_display_matches_spec() {
let e = BuilderError::MissingDfspRoots;
assert_eq!(
e.to_string(),
"missing DFSP roots",
"Display must match ERR-004 template for log stability"
);
}
#[test]
fn err004_implements_std_error() {
let e: BuilderError = BuilderError::EmptyBlock;
let _: &dyn StdError = &e;
let _ = e.source();
}
#[test]
fn err004_builder_error_is_clone() {
let e = BuilderError::MissingDfspRoots;
assert_eq!(e.to_string(), e.clone().to_string());
}