blob: 063f4c95e00e2f398e7bd3a5710088e5c75e19d1 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use {
crate::handler::device_storage::testing::InMemoryStorageFactory,
crate::ingress::fidl::Interface, crate::night_mode::types::NightModeInfo,
crate::EnvironmentBuilder, fidl_fuchsia_settings::NightModeMarker, std::sync::Arc,
};
const ENV_NAME: &str = "settings_service_night_mode_test_environment";
#[fuchsia_async::run_until_stalled(test)]
async fn test_night_mode() {
let initial_value = NightModeInfo { night_mode_enabled: None };
let changed_value = NightModeInfo { night_mode_enabled: Some(true) };
// Create and fetch a store from device storage so we can read stored value for testing.
let factory = Arc::new(InMemoryStorageFactory::new());
let env = EnvironmentBuilder::new(Arc::clone(&factory))
.fidl_interfaces(&[Interface::NightMode])
.spawn_and_get_nested_environment(ENV_NAME)
.await
.unwrap();
let night_mode_service = env.connect_to_protocol::<NightModeMarker>().unwrap();
// Ensure retrieved value matches set value
let settings = night_mode_service.watch().await.expect("watch completed");
assert_eq!(settings.night_mode_enabled, initial_value.night_mode_enabled);
// Ensure setting interface propagates correctly
let mut night_mode_settings = fidl_fuchsia_settings::NightModeSettings::EMPTY;
night_mode_settings.night_mode_enabled = Some(true);
night_mode_service
.set(night_mode_settings)
.await
.expect("set completed")
.expect("set successful");
let store = factory.get_device_storage().await;
// Verify the value we set is persisted in DeviceStorage.
let retrieved_struct = store.get().await;
assert_eq!(changed_value, retrieved_struct);
// Ensure retrieved value matches set value
let settings = night_mode_service.watch().await.expect("watch completed");
assert_eq!(settings.night_mode_enabled, changed_value.night_mode_enabled);
}