diff --git a/backend/src/domain/relay/entity.rs b/backend/src/domain/relay/entity.rs new file mode 100644 index 0000000..2307e96 --- /dev/null +++ b/backend/src/domain/relay/entity.rs @@ -0,0 +1,63 @@ +//! 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); + } +} diff --git a/backend/src/domain/relay/mod.rs b/backend/src/domain/relay/mod.rs index 4e63f39..26748e6 100644 --- a/backend/src/domain/relay/mod.rs +++ b/backend/src/domain/relay/mod.rs @@ -9,3 +9,5 @@ pub mod repository; pub mod types; /// Controller error types for relay operations. pub mod controler; +/// Relay entity representing the relay aggregate. +pub mod entity; diff --git a/specs/001-modbus-relay-control/tasks.md b/specs/001-modbus-relay-control/tasks.md index eda7f91..4d81a07 100644 --- a/specs/001-modbus-relay-control/tasks.md +++ b/specs/001-modbus-relay-control/tasks.md @@ -231,7 +231,7 @@ - **File**: src/domain/relay.rs - **Complexity**: Low | **Uncertainty**: Low -- [ ] **T021** [US1] [TDD] Write tests for Relay aggregate +- [x] **T021** [US1] [TDD] Write tests for Relay aggregate - Test: Relay::new(RelayId(1), RelayState::Off, None) creates relay - Test: relay.toggle() flips state - Test: relay.turn_on() sets state to On