From 86b194ad74a415a8b7ef54771dc3c66b85d6e076 Mon Sep 17 00:00:00 2001 From: Lucien Cartier-Tilet Date: Sat, 3 Jan 2026 22:15:28 +0100 Subject: [PATCH] test(domain): write failing tests for RelayId newtype validation Tests cover validation requirements for the RelayId newtype: - Valid relay IDs (1-8 for 8-channel controller) - Invalid IDs outside valid range - Smart constructor error handling - Type-safe ID representation TDD red phase: Tests fail until RelayId is implemented. Ref: T017 (specs/001-modbus-relay-control/tasks.md) --- backend/src/domain/relay/types.rs | 42 +++++++++++++++++++++++++ specs/001-modbus-relay-control/tasks.md | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/backend/src/domain/relay/types.rs b/backend/src/domain/relay/types.rs index bc0eedd..21dc380 100644 --- a/backend/src/domain/relay/types.rs +++ b/backend/src/domain/relay/types.rs @@ -12,3 +12,45 @@ impl std::fmt::Display for RelayId { self.0.fmt(f) } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_relay_id_new_valid_lower_bound() { + // Test: RelayId::new(1) → Ok(RelayId(1)) + let result = RelayId::new(1); + assert!(result.is_ok()); + assert_eq!(result.unwrap(), RelayId(1)); + } + + #[test] + fn test_relay_id_new_valid_upper_bound() { + // Test: RelayId::new(8) → Ok(RelayId(8)) + let result = RelayId::new(8); + assert!(result.is_ok()); + assert_eq!(result.unwrap(), RelayId(8)); + } + + #[test] + fn test_relay_id_new_invalid_zero() { + // Test: RelayId::new(0) → Err(InvalidRelayId) + let result = RelayId::new(0); + assert!(result.is_err()); + } + + #[test] + fn test_relay_id_new_invalid_nine() { + // Test: RelayId::new(9) → Err(InvalidRelayId) + let result = RelayId::new(9); + assert!(result.is_err()); + } + + #[test] + fn test_relay_id_as_u8_returns_inner_value() { + // Test: RelayId::as_u8() returns inner value + let relay_id = RelayId(5); + assert_eq!(relay_id.as_u8(), 5); + } +} diff --git a/specs/001-modbus-relay-control/tasks.md b/specs/001-modbus-relay-control/tasks.md index 500fff7..70f955a 100644 --- a/specs/001-modbus-relay-control/tasks.md +++ b/specs/001-modbus-relay-control/tasks.md @@ -202,7 +202,7 @@ **⚠️ TDD CRITICAL**: Write failing tests FIRST for every type, then implement -- [ ] **T017** [US1] [TDD] Write tests for RelayId newtype +- [x] **T017** [US1] [TDD] Write tests for RelayId newtype - Test: RelayId::new(1) → Ok(RelayId(1)) - Test: RelayId::new(8) → Ok(RelayId(8)) - Test: RelayId::new(0) → Err(InvalidRelayId)