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 410046bd7e
commit a7a7e7ef18
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;
/// Controller error types for relay operations.
pub mod controler;
/// Relay entity representing the relay aggregate.
pub mod entity;

View File

@@ -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