66 lines
2.0 KiB
Rust
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);
|
|
});
|
|
});
|
|
}
|