use torc::client::version_check::{
ServerInfo, VersionCheckResult, VersionMismatchSeverity, compare_versions, parse_version,
};
#[test]
fn test_parse_version() {
assert_eq!(parse_version("0.8.0"), Some((0, 8, 0)));
assert_eq!(parse_version("1.2.3"), Some((1, 2, 3)));
assert_eq!(parse_version("v1.2.3"), Some((1, 2, 3)));
assert_eq!(parse_version("1.2.3-beta"), Some((1, 2, 3)));
assert_eq!(parse_version("0.8.0 (abc1234)"), Some((0, 8, 0)));
assert_eq!(parse_version("0.8.0 (abc1234-dirty)"), Some((0, 8, 0)));
assert_eq!(parse_version("v1.2.3 (def5678)"), Some((1, 2, 3)));
assert_eq!(parse_version("invalid"), None);
}
#[test]
fn test_compare_versions_exact_match() {
assert_eq!(
compare_versions("0.8.0", "0.8.0"),
VersionMismatchSeverity::None
);
}
#[test]
fn test_compare_versions_patch_diff() {
assert_eq!(
compare_versions("0.8.1", "0.8.0"),
VersionMismatchSeverity::Patch
);
assert_eq!(
compare_versions("0.8.0", "0.8.1"),
VersionMismatchSeverity::Patch
);
}
#[test]
fn test_compare_versions_minor_client_higher() {
assert_eq!(
compare_versions("0.9.0", "0.8.0"),
VersionMismatchSeverity::Minor
);
}
#[test]
fn test_compare_versions_minor_server_higher() {
assert_eq!(
compare_versions("0.8.0", "0.9.0"),
VersionMismatchSeverity::Minor
);
}
#[test]
fn test_compare_versions_major_diff() {
assert_eq!(
compare_versions("1.0.0", "0.8.0"),
VersionMismatchSeverity::Major
);
assert_eq!(
compare_versions("0.8.0", "1.0.0"),
VersionMismatchSeverity::Major
);
}
#[test]
fn test_version_check_with_api_version_match() {
let info = ServerInfo {
version: "0.14.0 (abc1234)".to_string(),
api_version: Some("0.11.0".to_string()),
};
let result = VersionCheckResult::from_server_info(&info);
assert_eq!(result.severity, VersionMismatchSeverity::None);
assert!(result.message.contains("API version"));
assert!(result.message.contains("matches"));
}
#[test]
fn test_version_check_with_api_version_patch_diff() {
let info = ServerInfo {
version: "0.14.0 (abc1234)".to_string(),
api_version: Some("0.11.1".to_string()),
};
let result = VersionCheckResult::from_server_info(&info);
assert_eq!(result.severity, VersionMismatchSeverity::Patch);
assert!(result.message.contains("patch difference"));
}
#[test]
fn test_version_check_with_api_version_client_newer() {
let info = ServerInfo {
version: "0.12.0 (abc1234)".to_string(),
api_version: Some("0.7.0".to_string()),
};
let result = VersionCheckResult::from_server_info(&info);
assert_eq!(result.severity, VersionMismatchSeverity::Minor);
assert!(result.message.contains("client is newer than server"));
assert!(result.message.contains("should be compatible"));
}
#[test]
fn test_version_check_with_api_version_major_diff() {
let info = ServerInfo {
version: "2.0.0 (abc1234)".to_string(),
api_version: Some("1.0.0".to_string()),
};
let result = VersionCheckResult::from_server_info(&info);
assert_eq!(result.severity, VersionMismatchSeverity::Major);
assert!(result.message.contains("incompatible"));
}
#[test]
fn test_version_check_legacy_server_no_api_version() {
let info = ServerInfo {
version: "0.13.0 (abc1234)".to_string(),
api_version: None,
};
let result = VersionCheckResult::from_server_info(&info);
assert!(result.server_api_version.is_none());
assert!(
result.message.contains("Version")
|| result.message.contains("version")
|| result.message.contains("matches")
);
}
#[test]
fn test_version_check_server_newer_api_is_minor() {
let info = ServerInfo {
version: "0.15.0 (abc1234)".to_string(),
api_version: Some("0.12.0".to_string()),
};
let result = VersionCheckResult::from_server_info(&info);
assert_eq!(result.severity, VersionMismatchSeverity::Minor);
assert!(result.message.contains("server is newer than client"));
}
#[test]
fn test_version_check_result_fields() {
let info = ServerInfo {
version: "0.14.0 (abc1234)".to_string(),
api_version: Some("0.11.0".to_string()),
};
let result = VersionCheckResult::from_server_info(&info);
assert_eq!(result.server_version, Some("0.14.0 (abc1234)".to_string()));
assert_eq!(result.server_api_version, Some("0.11.0".to_string()));
assert_eq!(result.client_api_version, "0.11.0");
}