use pom::types::HealthStatus; #[derive(Debug, PartialEq, Eq)] pub(crate) enum IncidentAction { None, Open, Close, CloseAndOpen, } pub(crate) fn incident_action(prev: HealthStatus, curr: HealthStatus) -> IncidentAction { if prev == curr { return IncidentAction::None; } let prev_op = prev == HealthStatus::Operational; let curr_op = curr == HealthStatus::Operational; match (prev_op, curr_op) { (true, false) => IncidentAction::Open, (false, true) => IncidentAction::Close, (false, false) => IncidentAction::CloseAndOpen, (true, true) => IncidentAction::None, } } #[cfg(test)] mod tests { use super::*; #[test] fn incident_operational_to_error_opens() { assert_eq!( incident_action(HealthStatus::Operational, HealthStatus::Error), IncidentAction::Open, ); } #[test] fn incident_operational_to_degraded_opens() { assert_eq!( incident_action(HealthStatus::Operational, HealthStatus::Degraded), IncidentAction::Open, ); } #[test] fn incident_error_to_operational_closes() { assert_eq!( incident_action(HealthStatus::Error, HealthStatus::Operational), IncidentAction::Close, ); } #[test] fn incident_degraded_to_operational_closes() { assert_eq!( incident_action(HealthStatus::Degraded, HealthStatus::Operational), IncidentAction::Close, ); } #[test] fn incident_degraded_to_error_closes_and_opens() { assert_eq!( incident_action(HealthStatus::Degraded, HealthStatus::Error), IncidentAction::CloseAndOpen, ); } #[test] fn incident_error_to_degraded_closes_and_opens() { assert_eq!( incident_action(HealthStatus::Error, HealthStatus::Degraded), IncidentAction::CloseAndOpen, ); } #[test] fn incident_operational_to_operational_none() { assert_eq!( incident_action(HealthStatus::Operational, HealthStatus::Operational), IncidentAction::None, ); } #[test] fn incident_error_to_error_none() { assert_eq!( incident_action(HealthStatus::Error, HealthStatus::Error), IncidentAction::None, ); } }