Skip to content

Commit fae6faf

Browse files
authored
Merge pull request #1170 from multiplex55/codex/update-and-add-tests-in-multi_manager-and-settings
test: cover MultiManager reconnect settings compatibility
2 parents d91a1d6 + b62854b commit fae6faf

3 files changed

Lines changed: 81 additions & 2 deletions

File tree

src/gui/multi_manager_actions.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,7 @@ mod tests {
10931093
}
10941094

10951095
fn clear_toast_log() {
1096-
let _ = std::fs::remove_file(crate::toast_log::TOAST_LOG_FILE);
1096+
std::fs::write(crate::toast_log::TOAST_LOG_FILE, "").expect("clear toast log");
10971097
}
10981098

10991099
fn toast_log_contents() -> String {

src/multi_manager/settings.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,48 @@ mod tests {
5656
);
5757
assert_eq!(restored.multi_manager, updated);
5858
}
59+
60+
#[test]
61+
fn save_multi_manager_settings_omits_obsolete_periodic_reconnect_fields() {
62+
let dir = tempfile::tempdir().expect("tempdir");
63+
let settings_path = dir.path().join("settings.json");
64+
std::fs::write(
65+
&settings_path,
66+
r#"{
67+
"multi_manager": {
68+
"periodic_reconnect_enabled": true,
69+
"reconnect_interval_ms": 1000,
70+
"auto_reconnect_period_ms": 2500
71+
}
72+
}"#,
73+
)
74+
.expect("write legacy settings");
75+
let settings_path = settings_path.to_string_lossy().to_string();
76+
77+
let updated = MultiManagerSettings {
78+
auto_reconnect_on_load: false,
79+
..Default::default()
80+
};
81+
save_multi_manager_settings(&settings_path, updated.clone())
82+
.expect("save multi manager settings");
83+
84+
let saved: serde_json::Value =
85+
serde_json::from_str(&std::fs::read_to_string(&settings_path).expect("read settings"))
86+
.expect("parse saved settings");
87+
let multi_manager = saved
88+
.get("multi_manager")
89+
.and_then(serde_json::Value::as_object)
90+
.expect("multi manager object");
91+
assert_eq!(
92+
multi_manager.get("auto_reconnect_on_load"),
93+
Some(&serde_json::Value::Bool(false))
94+
);
95+
assert!(!multi_manager.contains_key("periodic_reconnect_enabled"));
96+
assert!(!multi_manager.contains_key("reconnect_interval_ms"));
97+
assert!(!multi_manager.contains_key("auto_reconnect_period_ms"));
98+
assert_eq!(
99+
Settings::load(&settings_path).unwrap().multi_manager,
100+
updated
101+
);
102+
}
59103
}

src/settings/model.rs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::gui::Panel;
22
use crate::hotkey::Key;
3-
use crate::hotkey::{Hotkey, parse_hotkey};
3+
use crate::hotkey::{parse_hotkey, Hotkey};
44
use crate::settings::defaults::*;
55
use serde::{Deserialize, Serialize};
66
use std::collections::HashSet;
@@ -781,6 +781,41 @@ mod tests {
781781
assert_eq!(restored.multi_manager, settings.multi_manager);
782782
}
783783

784+
#[test]
785+
fn multi_manager_old_json_defaults_auto_reconnect_and_ignores_obsolete_reconnect_fields() {
786+
let parsed: Settings = serde_json::from_str(
787+
r#"{
788+
"multi_manager": {
789+
"enabled": true,
790+
"periodic_reconnect_enabled": true,
791+
"reconnect_interval_ms": 1000,
792+
"auto_reconnect_period_ms": 2500
793+
}
794+
}"#,
795+
)
796+
.expect("old settings should deserialize");
797+
798+
assert!(parsed.multi_manager.auto_reconnect_on_load);
799+
assert_eq!(
800+
parsed.multi_manager.workspaces_path,
801+
MultiManagerSettings::default().workspaces_path
802+
);
803+
}
804+
805+
#[test]
806+
fn multi_manager_serialization_omits_obsolete_periodic_reconnect_fields() {
807+
let json = serde_json::to_value(Settings::default()).expect("serialize settings");
808+
let multi_manager = json
809+
.get("multi_manager")
810+
.and_then(serde_json::Value::as_object)
811+
.expect("multi manager object");
812+
813+
assert!(multi_manager.contains_key("auto_reconnect_on_load"));
814+
assert!(!multi_manager.contains_key("periodic_reconnect_enabled"));
815+
assert!(!multi_manager.contains_key("reconnect_interval_ms"));
816+
assert!(!multi_manager.contains_key("auto_reconnect_period_ms"));
817+
}
818+
784819
#[test]
785820
fn query_results_layout_defaults_are_backward_compatible() {
786821
let parsed: Settings = serde_json::from_str("{}").expect("settings should deserialize");

0 commit comments

Comments
 (0)