sdf_metadata/metadata/states/
system_state.rs

1use crate::wit::states::SystemState;
2
3impl SystemState {
4    pub fn validate(&self) -> Result<(), crate::util::validation_error::ValidationError> {
5        if self.name.is_empty() && self.system.is_empty() {
6            return Err(crate::util::validation_error::ValidationError::new(
7                "empty system state found. state name and system cannot be empty",
8            ));
9        }
10
11        if self.name.is_empty() {
12            return Err(crate::util::validation_error::ValidationError::new(
13                "Name must be specified for system state",
14            ));
15        }
16
17        if self.system.is_empty() {
18            return Err(crate::util::validation_error::ValidationError::new(
19                "System must be specified for system state `name`",
20            ));
21        }
22
23        Ok(())
24    }
25}
26
27#[cfg(test)]
28mod test {
29    use crate::{wit::states::SystemState, util::validation_error::ValidationError};
30
31    #[test]
32    fn test_validate_rejects_empty_system() {
33        let state = SystemState {
34            name: "my-state".to_string(),
35            system: "".to_string(),
36        };
37
38        assert_eq!(
39            state.validate(),
40            Err(ValidationError::new(
41                "System must be specified for system state `name`"
42            ))
43        );
44    }
45
46    #[test]
47    fn test_validate_rejects_empty_name() {
48        let state = SystemState {
49            name: "".to_string(),
50            system: "my-system".to_string(),
51        };
52
53        assert_eq!(
54            state.validate(),
55            Err(ValidationError::new(
56                "Name must be specified for system state"
57            ))
58        );
59    }
60
61    #[test]
62    fn test_validate_rejects_empty_system_state() {
63        let state = SystemState {
64            name: "".to_string(),
65            system: "".to_string(),
66        };
67
68        assert_eq!(
69            state.validate(),
70            Err(ValidationError::new(
71                "empty system state found. state name and system cannot be empty"
72            ))
73        );
74    }
75
76    #[test]
77    fn test_validate_accepts_valid_system_state() {
78        let state = SystemState {
79            name: "my-state".to_string(),
80            system: "my-system".to_string(),
81        };
82
83        assert_eq!(state.validate(), Ok(()));
84    }
85}