This commit is contained in:
Mateusz Gruszczyński
2026-09-13 10:21:55 +02:00
parent a7fc1f2dc4
commit c3fbc5ccc6
14 changed files with 152 additions and 42 deletions
+62
View File
@@ -37,6 +37,7 @@ mod tests {
..DeviceCommand::default()
},
false,
1,
)
.expect("thermostat command payload");
@@ -49,4 +50,65 @@ mod tests {
Some(serde_json::json!([19, 1, 1, 1]))
);
}
#[test]
fn quiet_status_accepts_multistate_value_and_remembers_wire_mode() {
let client = GreeClient::new(
"test-controller".into(),
None,
None,
Arc::new(AtomicBool::new(false)),
);
let mut device = Device::simulated_default();
device.quiet = false;
device.quiet_wire_value = None;
let response = json!({
"cols": ["Pow", "Quiet"],
"dat": [1, 2]
});
client.apply_status(&mut device, &response).expect("Quiet=2 status");
assert!(device.power);
assert!(device.quiet);
assert_eq!(device.quiet_wire_value, Some(2));
assert_eq!(device.supports_quiet, Some(true));
}
#[test]
fn quiet_command_can_preserve_learned_wire_mode() {
let payload = GreeClient::command_payload(
&DeviceCommand {
quiet: Some(true),
..DeviceCommand::default()
},
false,
2,
)
.expect("quiet command payload");
assert_eq!(payload.get("opt").cloned(), Some(serde_json::json!(["Quiet"])));
assert_eq!(payload.get("p").cloned(), Some(serde_json::json!([2])));
}
#[test]
fn optional_multistate_feature_does_not_reject_whole_status() {
let client = GreeClient::new(
"test-controller".into(),
None,
None,
Arc::new(AtomicBool::new(false)),
);
let mut device = Device::simulated_default();
let response = json!({
"cols": ["Pow", "Air"],
"dat": [1, 3]
});
client.apply_status(&mut device, &response).expect("Air=3 status");
assert!(device.power);
assert!(device.air);
assert_eq!(device.supports_air, Some(true));
}
}