Files
galaxy/crates/channel_versions/src/overrides_tests.rs
T

224 lines
7.3 KiB
Rust

use chrono::{DateTime, Utc};
use crate::{ChannelVersion, ChannelVersions};
use super::*;
#[test]
fn test_only_first_override_is_applied() {
#[cfg(target_os = "macos")]
let predicate = OverridePredicate::TargetOS(TargetOS::MacOS);
#[cfg(target_os = "linux")]
let predicate = OverridePredicate::TargetOS(TargetOS::Linux);
#[cfg(target_os = "windows")]
let predicate = OverridePredicate::TargetOS(TargetOS::Windows);
let version = ChannelVersion {
version_info: VersionInfo {
version: "base_version".to_string(),
update_by: None,
soft_cutoff: None,
last_prominent_update: None,
is_rollback: None,
version_for_new_users: None,
cli_version: None,
},
overrides: vec![
VersionOverride {
predicate: predicate.clone(),
version_info: VersionInfo {
version: "override_version".to_string(),
update_by: Some(DateTime::<Utc>::MIN_UTC.fixed_offset()),
soft_cutoff: Some("override_cutoff".to_string()),
last_prominent_update: None,
is_rollback: None,
version_for_new_users: None,
cli_version: None,
},
},
VersionOverride {
predicate,
version_info: VersionInfo {
// This should not be applied; as we only apply the first
// matching override.
version: "second_override_version".to_string(),
update_by: None,
soft_cutoff: None,
last_prominent_update: None,
is_rollback: None,
version_for_new_users: None,
cli_version: None,
},
},
],
};
let version_info = version.version_info.clone();
let version_info_with_overrides = version.version_info();
assert_ne!(version_info.version, version_info_with_overrides.version);
assert_eq!(version_info_with_overrides.version, "override_version");
assert_ne!(
version_info.update_by,
version_info_with_overrides.update_by
);
assert_eq!(
version_info_with_overrides.update_by,
Some(DateTime::<Utc>::MIN_UTC.fixed_offset())
);
assert_ne!(
version_info.soft_cutoff,
version_info_with_overrides.soft_cutoff
);
assert_eq!(
version_info_with_overrides.soft_cutoff,
Some("override_cutoff".to_string())
);
}
#[test]
fn test_unknown_target_is_ignored() {
let channel_version_string = r#"{
"beta": {
"version": "v0.2024.01.30.16.52.beta_00"
},
"canary": {
"version": "v0.2022.09.29.08.08.canary_00"
},
"dev": {
"soft_cutoff": "v0.2023.05.12.08.03.dev_00",
"version": "v0.2024.01.30.20.34.dev_00"
},
"preview": {
"version": "v0.2024.01.30.20.34.preview_00"
},
"stable": {
"soft_cutoff": "v0.2023.11.28.08.02.stable_00",
"version": "v0.2024.01.16.16.31.stable_01",
"overrides": [
{
"predicate": {
"target_os": "gibberish"
},
"version_info": {
"version": "v0.2024.01.30.16.52.stable_00"
}
}
]
}
}"#;
// We should still be able to deserialize even if the target OS isn't recognized.
let channel_versions: ChannelVersions = serde_json::from_str(channel_version_string)
.expect("Should be able to parse channel versions");
assert_eq!(
channel_versions.stable.version_info().version,
"v0.2024.01.16.16.31.stable_01"
);
// The override should have no effect, as the target OS is gibberish.
let version_with_overrides = channel_versions
.stable
.version_info()
.with_overrides_applied(&channel_versions.stable.overrides, &Context::from_env());
assert_eq!(
version_with_overrides.version,
"v0.2024.01.16.16.31.stable_01"
);
}
#[test]
fn test_cli_version_override_is_applied() {
#[cfg(target_os = "macos")]
let predicate = OverridePredicate::TargetOS(TargetOS::MacOS);
#[cfg(target_os = "linux")]
let predicate = OverridePredicate::TargetOS(TargetOS::Linux);
#[cfg(target_os = "windows")]
let predicate = OverridePredicate::TargetOS(TargetOS::Windows);
let version = ChannelVersion {
version_info: VersionInfo {
version: "base_version".to_string(),
update_by: None,
soft_cutoff: None,
last_prominent_update: None,
is_rollback: None,
version_for_new_users: None,
cli_version: Some("base_cli_version".to_string()),
},
overrides: vec![VersionOverride {
predicate,
version_info: VersionInfo {
version: "override_version".to_string(),
update_by: None,
soft_cutoff: None,
last_prominent_update: None,
is_rollback: None,
version_for_new_users: None,
cli_version: Some("override_cli_version".to_string()),
},
}],
};
let version_info_with_overrides = version.version_info();
assert_eq!(
version_info_with_overrides.cli_version,
Some("override_cli_version".to_string())
);
assert_eq!(
version_info_with_overrides.cli_version(),
"override_cli_version"
);
}
#[test]
fn test_cli_version_preserved_when_override_omits_it() {
#[cfg(target_os = "macos")]
let predicate = OverridePredicate::TargetOS(TargetOS::MacOS);
#[cfg(target_os = "linux")]
let predicate = OverridePredicate::TargetOS(TargetOS::Linux);
#[cfg(target_os = "windows")]
let predicate = OverridePredicate::TargetOS(TargetOS::Windows);
let version = ChannelVersion {
version_info: VersionInfo {
version: "base_version".to_string(),
update_by: None,
soft_cutoff: None,
last_prominent_update: None,
is_rollback: None,
version_for_new_users: None,
cli_version: Some("base_cli_version".to_string()),
},
overrides: vec![VersionOverride {
predicate,
version_info: VersionInfo {
version: "override_version".to_string(),
update_by: None,
soft_cutoff: None,
last_prominent_update: None,
is_rollback: None,
version_for_new_users: None,
cli_version: None,
},
}],
};
let version_info_with_overrides = version.version_info();
// cli_version should be preserved from the base since the override doesn't set it.
assert_eq!(
version_info_with_overrides.cli_version,
Some("base_cli_version".to_string())
);
assert_eq!(
version_info_with_overrides.cli_version(),
"base_cli_version"
);
}
#[test]
fn test_cli_version_falls_back_to_version() {
let info = VersionInfo::new("app_version".to_string());
assert_eq!(info.cli_version, None);
assert_eq!(info.cli_version(), "app_version");
}