Files
shturman/crates/core/shturman-settings/tests/integration.rs
T
kk0t9 bfe490e899 refactor(review): shell current-thread runtime + единый дефолт; PowerClient parse_enum; тесты на ipc::names
- shell: new_current_thread рантайм (без пула на холодном старте, #11); единый Initial::default().
- PowerClient: generic parse_enum (убрал 3 копии map_err).
- ipc::names::power::MOCK_IFACE; интеграционные тесты — через ipc::names (не хардкод).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Alexander <akotenev2003@gmail.com>
2026-06-24 14:36:50 +03:00

46 lines
1.8 KiB
Rust

//! Интеграция `Settings1` на session-шине. `#[ignore]` — запуск: `just test-integration`
//! (под `dbus-run-session`). Проверяет server-стаб + `sdk::SettingsClient` по реальной шине.
use futures_util::StreamExt;
use shturman_common::Layout;
use shturman_ipc::names;
use shturman_sdk::SettingsClient;
use shturman_settings::{store::Store, SettingsService};
use zbus::zvariant::Value;
#[tokio::test]
#[ignore = "нужна session-шина: just test-integration"]
async fn settings_round_trip_and_changed() {
let tmp = tempfile::tempdir().unwrap();
let store = Store::load_or_seed(Layout::new(tmp.path())).unwrap();
// сервер на отдельном соединении (владеет ru.shturman.Settings)
let server = zbus::Connection::session().await.unwrap();
server
.object_server()
.at(names::settings::PATH, SettingsService::new(store))
.await
.unwrap();
server.request_name(names::settings::NAME).await.unwrap();
// клиент на отдельном соединении
let client_conn = zbus::Connection::session().await.unwrap();
let client = SettingsClient::new(&client_conn).await.unwrap();
// дефолт засеян
let theme: String = client.get("ui.theme").await.unwrap().try_into().unwrap();
assert_eq!(theme, "auto");
// подписка на Changed до изменения
let mut changed = client.proxy().receive_changed().await.unwrap();
client.set("ui.theme", &Value::from("night")).await.unwrap();
let got: String = client.get("ui.theme").await.unwrap().try_into().unwrap();
assert_eq!(got, "night");
// сигнал Changed пришёл с нужным ключом
let sig = changed.next().await.unwrap();
assert_eq!(sig.args().unwrap().key(), "ui.theme");
}