OneLauncher-Cracked/packages/oneclient_core/tests/clusters.rs

147 lines
4.1 KiB
Rust

use std::time::Duration;
use oneclient_cluster::profiles::create_settings_profile;
use oneclient_common::domain::GameLoader;
use oneclient_common::patch::Patch;
use oneclient_core::ProfileUpdate;
use oneclient_core::clusters::{ClusterStage, CreateClusterOptions};
#[tokio::test]
async fn cluster_lifecycle_with_settings_profile() {
let state = oneclient_core::dev::ephemeral_state().await.unwrap();
let settings = state.settings.read().clone();
let global = state.settings.read().global_game_settings.clone();
// Deliberately not the global default of 4096 so the assertions distinguish
// "the cluster's own profile was used" from "fell back to global and matched"
let cluster = state
.clusters
.create(
&global,
CreateClusterOptions::new("Test Cluster", "1.21.1", GameLoader::Fabric).mem_max(2048),
)
.await
.unwrap();
assert_eq!(cluster.name, "Test Cluster");
assert_eq!(cluster.mc_version, "1.21.1");
assert_eq!(cluster.stage, ClusterStage::NotReady);
assert!(cluster.setting_profile_name.is_some());
assert!(cluster.created_at.is_some());
let resolved = state
.clusters
.resolve_settings(&global, &cluster)
.await
.unwrap();
assert_eq!(resolved.mem_max, Some(2048));
state
.clusters
.update_profile(
cluster.id,
ProfileUpdate {
mem_max: Patch::Set(6144),
..Default::default()
},
)
.await
.unwrap();
let updated = state
.clusters
.resolve_settings(&global, &cluster)
.await
.unwrap();
assert_eq!(updated.mem_max, Some(6144));
let shared = create_settings_profile(
&state.services.db,
&settings.global_game_settings,
"Shared Profile",
)
.await
.unwrap();
state
.clusters
.update(
cluster.id,
oneclient_core::ClusterUpdate::default().setting_profile(shared.name.clone()),
)
.await
.unwrap();
let reassigned = state.clusters.get(cluster.id).await.unwrap();
assert_eq!(
reassigned.setting_profile_name.as_deref(),
Some("Shared Profile")
);
let after_play = state
.clusters
.add_playtime(cluster.id, Duration::from_secs(120))
.await
.unwrap();
assert_eq!(after_play.overall_played, Duration::from_secs(120));
assert!(after_play.last_played.is_some());
state.clusters.delete(cluster.id, true).await.unwrap();
assert!(state.clusters.get(cluster.id).await.is_err());
}
#[tokio::test]
async fn cleared_profile_fields_inherit_from_global() {
let state = oneclient_core::dev::ephemeral_state().await.unwrap();
{
let mut settings = state.settings.write();
settings.global_game_settings.mem_max = Some(8192);
}
// Read the baseline *after* the write above so the new cluster inherits it
let global = state.settings.read().global_game_settings.clone();
let cluster = state
.clusters
.create(
&global,
CreateClusterOptions::new("Inherit Test", "1.21.1", GameLoader::Vanilla).mem_max(2048),
)
.await
.unwrap();
let profile_name = cluster.setting_profile_name.clone().unwrap();
state
.clusters
.update_profile(
cluster.id,
ProfileUpdate {
mem_max: Patch::Clear,
force_fullscreen: Patch::Clear,
..Default::default()
},
)
.await
.unwrap();
let global = state.settings.read().global_game_settings.clone();
let stored = oneclient_cluster::profiles::get_profile_or_default(
&state.services.db,
&global,
Some(&profile_name),
)
.await
.unwrap();
assert_eq!(stored.mem_max, None);
assert_eq!(stored.force_fullscreen, None);
let resolved = state
.clusters
.resolve_settings(&global, &cluster)
.await
.unwrap();
assert_eq!(resolved.mem_max, Some(8192));
assert_eq!(resolved.force_fullscreen, Some(false));
}