This commit is contained in:
Mateusz Gruszczyński committed 2026-09-04 11:30:48 +02:00
1 parent 236540e0f0
commit 9b4fafdfa6
14 files changed
+262 -62

No files matched your search

+54
View File
@@ -233,6 +233,60 @@ mod tests {
}
}
#[test]
fn regulator_zone_event_dedup_ignores_only_updated_at_heartbeat() {
let zone = test_zone("device");
let mut heartbeat = zone.clone();
heartbeat.updated_at = zone.updated_at.clone() + chrono::Duration::seconds(5);
assert_eq!(
zone_event_semantic_value(&zone).unwrap(),
zone_event_semantic_value(&heartbeat).unwrap()
);
heartbeat.device_temperature = Some(24.5);
assert_ne!(
zone_event_semantic_value(&zone).unwrap(),
zone_event_semantic_value(&heartbeat).unwrap()
);
}
#[test]
fn regulator_zone_plan_invalidation_tracks_only_plan_inputs() {
let zone = test_zone("combined");
let mut diagnostics_only = zone.clone();
diagnostics_only.device_temperature = Some(24.0);
diagnostics_only.external_temperature = Some(23.0);
diagnostics_only.last_action_at = Some(Utc::now());
assert!(!zone_runtime_change_affects_control_plan(&zone, &diagnostics_only));
let mut temperature_changed = zone.clone();
temperature_changed.current_temperature = Some(23.5);
assert!(zone_runtime_change_affects_control_plan(&zone, &temperature_changed));
let mut demand_changed = zone.clone();
demand_changed.demand = !zone.demand;
assert!(zone_runtime_change_affects_control_plan(&zone, &demand_changed));
}
#[test]
fn device_poll_heartbeat_does_not_invalidate_control_plan() {
let device = Device::simulated_default();
let mut heartbeat = device.clone();
heartbeat.last_seen = Some(Utc::now() + chrono::Duration::seconds(15));
heartbeat.updated_at = Utc::now() + chrono::Duration::seconds(15);
heartbeat.response_time_ms = Some(42);
heartbeat.current_temperature = Some(25.1);
assert!(!device_runtime_change_affects_control_plan(&device, &heartbeat));
let mut power_changed = device.clone();
power_changed.power = !device.power;
assert!(device_runtime_change_affects_control_plan(&device, &power_changed));
let mut health_changed = device.clone();
health_changed.communication_failures = 1;
assert!(device_runtime_change_affects_control_plan(&device, &health_changed));
}
#[test]
fn zone_can_use_separate_heating_and_cooling_hysteresis() {
let mut zone = test_zone("device");