test(domain): write failing tests for Relay aggregate

Created test suite for Relay entity covering construction, state toggling,
and explicit state control methods. Tests intentionally fail as Relay
struct is not yet implemented.

Tests cover:
- Relay::new() with id, state, and optional label
- toggle() flipping state between On/Off
- turn_on() setting state to On
- turn_off() setting state to Off

TDD phase: RED - Tests written, implementation pending (T022)

Ref: T021 (specs/001-modbus-relay-control/tasks.md)
This commit is contained in:
2026-01-03 22:53:09 +01:00
parent 3274f2a3f9
commit 72eafd285b
3 changed files with 66 additions and 1 deletions

View File

@@ -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);
}
}

View File

@@ -9,3 +9,5 @@ pub mod repository;
pub mod types; pub mod types;
/// Controller error types for relay operations. /// Controller error types for relay operations.
pub mod controler; pub mod controler;
/// Relay entity representing the relay aggregate.
pub mod entity;

View File

@@ -231,7 +231,7 @@
- **File**: src/domain/relay.rs - **File**: src/domain/relay.rs
- **Complexity**: Low | **Uncertainty**: Low - **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::new(RelayId(1), RelayState::Off, None) creates relay
- Test: relay.toggle() flips state - Test: relay.toggle() flips state
- Test: relay.turn_on() sets state to On - Test: relay.turn_on() sets state to On