use super::{
format_version, long_version, version_drift_warning, warn_on_drift, BUILD_DATE, GIT_SHA,
VERSION,
};
fn write_script(name: &str, body: &str) -> std::path::PathBuf {
let dir = std::env::temp_dir().join(format!("moadim-build-info-test-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
let path = dir.join(name);
std::fs::write(&path, format!("#!/bin/sh\n{body}\n")).unwrap();
#[cfg(unix)]
{
use std::os::unix::fs::PermissionsExt as _;
std::fs::set_permissions(&path, std::fs::Permissions::from_mode(0o755)).unwrap();
}
path
}
#[test]
fn format_version_includes_sha_and_date_when_known() {
assert_eq!(
format_version("0.1.0", "a1b2c3d", "2026-06-19"),
"0.1.0 (a1b2c3d 2026-06-19)"
);
}
#[test]
fn format_version_drops_suffix_when_sha_unknown() {
assert_eq!(format_version("0.1.0", "unknown", "unknown"), "0.1.0");
}
#[test]
fn format_version_carries_dirty_suffix_through() {
assert_eq!(
format_version("0.1.0", "a1b2c3d-dirty", "2026-06-19"),
"0.1.0 (a1b2c3d-dirty 2026-06-19)"
);
}
#[test]
fn long_version_starts_with_the_crate_version() {
assert!(long_version().starts_with(VERSION));
}
#[test]
fn long_version_reflects_the_embedded_git_fields() {
if GIT_SHA == "unknown" {
assert_eq!(long_version(), VERSION);
} else {
assert_eq!(
long_version(),
format!("{VERSION} ({GIT_SHA} {BUILD_DATE})")
);
}
}
#[test]
fn version_drift_warning_none_when_exe_cannot_be_run() {
let missing =
std::env::temp_dir().join(format!("moadim-no-such-binary-{}", uuid::Uuid::new_v4()));
assert!(version_drift_warning(&missing, "moadim 0.20.0").is_none());
}
#[test]
fn version_drift_warning_none_when_on_disk_binary_exits_nonzero() {
let exe = write_script("moadim", "exit 1");
assert!(version_drift_warning(&exe, "moadim 0.20.0").is_none());
let _ = std::fs::remove_dir_all(exe.parent().unwrap());
}
#[test]
fn version_drift_warning_none_when_on_disk_binary_prints_nothing() {
let exe = write_script("moadim", "exit 0");
assert!(version_drift_warning(&exe, "moadim 0.20.0").is_none());
let _ = std::fs::remove_dir_all(exe.parent().unwrap());
}
#[test]
fn version_drift_warning_none_when_versions_match() {
let exe = write_script("moadim", "printf 'moadim 0.20.0'");
assert!(version_drift_warning(&exe, "moadim 0.20.0").is_none());
let _ = std::fs::remove_dir_all(exe.parent().unwrap());
}
#[test]
fn version_drift_warning_some_when_versions_differ() {
let exe = write_script("moadim", "printf 'moadim 0.21.0'");
let warning = version_drift_warning(&exe, "moadim 0.20.0").expect("expected drift warning");
assert!(
warning.contains("moadim 0.20.0") && warning.contains("moadim 0.21.0"),
"expected both versions named in: {warning}"
);
assert!(
warning.contains("moadim restart"),
"expected a restart hint in: {warning}"
);
let _ = std::fs::remove_dir_all(exe.parent().unwrap());
}
#[test]
fn warn_on_drift_does_not_panic_when_versions_differ() {
let exe = write_script("moadim", "printf 'moadim 0.21.0'");
warn_on_drift(&exe, "moadim 0.20.0");
let _ = std::fs::remove_dir_all(exe.parent().unwrap());
}
#[test]
fn warn_on_drift_does_not_panic_when_versions_match() {
let exe = write_script("moadim", "printf 'moadim 0.20.0'");
warn_on_drift(&exe, "moadim 0.20.0");
let _ = std::fs::remove_dir_all(exe.parent().unwrap());
}