blob: 4329aa7dac16c7e9777d0a6428b18a114f8df5a3 [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.
#[cfg(test)]
use {
crate::registry::device_storage::testing::*,
crate::switchboard::base::{NightModeInfo, SettingType},
crate::EnvironmentBuilder,
fidl_fuchsia_settings::*,
};
const ENV_NAME: &str = "settings_service_night_mode_test_environment";
const CONTEXT_ID: u64 = 0;
#[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 = InMemoryStorageFactory::create();
let store = factory
.lock()
.await
.get_device_storage::<NightModeInfo>(StorageAccessContext::Test, CONTEXT_ID);
let env = EnvironmentBuilder::new(factory)
.settings(&[SettingType::NightMode])
.spawn_and_get_nested_environment(ENV_NAME)
.await
.unwrap();
let night_mode_service = env.connect_to_service::<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");
// Verify the value we set is persisted in DeviceStorage.
let mut store_lock = store.lock().await;
let retrieved_struct = store_lock.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);
}