Files
galaxy/app/src/server/experiments/model_tests.rs
T

66 lines
2.0 KiB
Rust

use super::{ServerExperiment, ServerExperiments};
use crate::{GlobalResourceHandles, GlobalResourceHandlesProvider};
use galaxyui::{App, Entity, SingletonEntity};
/// A model for testing purposes only.
///
/// We use it to demonstrate how client-side
/// models can be mutated to reflect server
/// experiment state changes.
pub struct TestModel(pub usize);
impl Entity for TestModel {
type Event = ();
}
impl SingletonEntity for TestModel {}
fn initialize_app(app: &mut App) {
app.update(crate::settings::init_and_register_user_preferences);
let global_resources = GlobalResourceHandles::mock(app);
app.add_singleton_model(|_| GlobalResourceHandlesProvider::new(global_resources));
}
#[test]
fn test_new_from_cached() {
App::test((), |mut app| async move {
initialize_app(&mut app);
let model = app.add_singleton_model(|_| TestModel(0));
let cache = vec![ServerExperiment::TestExperiment];
app.add_singleton_model(|ctx| ServerExperiments::new_from_cache(cache, ctx));
// The experiment should have been enabled.
model.read(&app, |model, _| {
assert_eq!(model.0, 1);
});
});
}
#[test]
fn test_apply_latest_state() {
App::test((), |mut app| async move {
initialize_app(&mut app);
let model = app.add_singleton_model(|_| TestModel(0));
let experiments =
app.add_singleton_model(|ctx| ServerExperiments::new_from_cache(vec![], ctx));
// Enable the experiment.
experiments.update(&mut app, |experiments, ctx| {
experiments.apply_latest_state(vec![ServerExperiment::TestExperiment], ctx);
});
model.read(&app, |model, _| {
assert_eq!(model.0, 1);
});
// Redundant experiment state should be a no-op.
experiments.update(&mut app, |experiments, ctx| {
experiments.apply_latest_state(vec![ServerExperiment::TestExperiment], ctx);
});
model.read(&app, |model, _| {
assert_eq!(model.0, 1);
});
});
}