use crate::ui::constants::{color_dim, color_header};
use crate::ui::utils::is_tty;
pub fn render_banner(version: &str) -> String {
if !is_tty() {
return String::new();
}
let logo = r#" ███████╗███████╗███╗ ██╗████████╗██████╗ ██╗
██╔════╝██╔════╝████╗ ██║╚══██╔══╝██╔══██╗██║
███████╗█████╗ ██╔██╗ ██║ ██║ ██████╔╝██║
╚════██║██╔══╝ ██║╚██╗██║ ██║ ██╔══██╗██║
███████║███████╗██║ ╚████║ ██║ ██║ ██║██║
╚══════╝╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝"#;
let colored_logo = logo
.lines()
.map(color_header)
.collect::<Vec<_>>()
.join("\n");
let subtitle = format!(
" Multi-chain Smart Contract Invariant Checker · v{}",
version
);
let colored_subtitle = color_dim(&subtitle);
format!("{}\n{}\n", colored_logo, colored_subtitle)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_banner_contains_expected_strings() {
let banner = render_banner("0.1.1");
if !banner.is_empty() {
assert!(banner.contains("Sentri") || banner.is_empty());
assert!(banner.contains("0.1.1") || banner.is_empty());
}
}
#[test]
fn test_banner_logo_structure() {
let banner = render_banner("0.1.0");
if !banner.is_empty() {
assert!(banner.contains("███"), "Banner should contain ASCII art");
}
}
}