//! Relay entity representing a relay aggregate in the domain model. use super::types::{RelayId, RelayState}; #[cfg(test)] mod tests { use super::*; use crate::domain::relay::controler::ControllerError; #[test] fn test_relay_new_creates_relay() { // Test: Relay::new(RelayId(1), RelayState::Off, None) creates relay let relay_id = RelayId::new(1).unwrap(); let relay = Relay::new(relay_id, RelayState::Off, None); assert_eq!(relay.id(), relay_id); assert_eq!(relay.state(), RelayState::Off); assert_eq!(relay.label(), None); } #[test] fn test_relay_toggle_flips_state() { // Test: relay.toggle() flips state let relay_id = RelayId::new(1).unwrap(); let mut relay = Relay::new(relay_id, RelayState::Off, None); // Toggle from Off to On relay.toggle(); assert_eq!(relay.state(), RelayState::On); // Toggle from On to Off relay.toggle(); assert_eq!(relay.state(), RelayState::Off); } #[test] fn test_relay_turn_on_sets_state_to_on() { // Test: relay.turn_on() sets state to On let relay_id = RelayId::new(1).unwrap(); let mut relay = Relay::new(relay_id, RelayState::Off, None); relay.turn_on(); assert_eq!(relay.state(), RelayState::On); // Calling turn_on when already on should keep it on relay.turn_on(); assert_eq!(relay.state(), RelayState::On); } #[test] fn test_relay_turn_off_sets_state_to_off() { // Test: relay.turn_off() sets state to Off let relay_id = RelayId::new(1).unwrap(); let mut relay = Relay::new(relay_id, RelayState::On, None); relay.turn_off(); assert_eq!(relay.state(), RelayState::Off); // Calling turn_off when already off should keep it off relay.turn_off(); assert_eq!(relay.state(), RelayState::Off); } }