From 44ff5ea6ce8fff08d8bc84c8d004962add79a283 Mon Sep 17 00:00:00 2001 From: Shiv Rossi Date: Tue, 8 Sep 2026 16:00:54 -0600 Subject: [PATCH] test: cover Uptime Kuma status matrix --- crates/rite-sources/src/uptime_kuma.rs | 45 ++++++++++++++++++-------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/crates/rite-sources/src/uptime_kuma.rs b/crates/rite-sources/src/uptime_kuma.rs index 4d961be..e4972be 100644 --- a/crates/rite-sources/src/uptime_kuma.rs +++ b/crates/rite-sources/src/uptime_kuma.rs @@ -145,21 +145,38 @@ mod tests { } #[tokio::test] - async fn verifies_and_normalizes_heartbeat() { + async fn verifies_and_normalizes_every_supported_heartbeat_status() { let source = UptimeKumaSource::new("secret").expect("source"); - let body = br#"{"monitor":{"id":4,"name":"API","url":"https://api.test"},"heartbeat":{"status":0,"msg":"connection refused","ping":12,"duration":5,"time":"2026-09-06 12:00:00"}}"#; - let headers = headers("secret", body); - source - .verify(&headers, body) - .await - .expect("signature accepted"); - let event = source.parse(&headers, body).await.expect("payload parses"); - assert_eq!(event.action.as_deref(), Some("down")); - assert_eq!(event.severity, Severity::Critical); - assert_eq!(event.metadata["monitor_name"], "API"); - assert_eq!(event.metadata["status"], "down"); - assert_eq!(event.metadata["ping_ms"], 12); - assert_eq!(event.metadata["duration_ms"], 5_000.0); + let cases = [ + (0, "down", Severity::Critical), + (1, "up", Severity::Info), + (2, "pending", Severity::Warning), + (3, "maintenance", Severity::Info), + ]; + + for (status, action, severity) in cases { + let body = format!( + r#"{{"monitor":{{"id":4,"name":"API","url":"https://api.test"}},"heartbeat":{{"status":{status},"msg":"connection refused","ping":12,"duration":5,"time":"2026-09-06 12:00:00"}}}}"# + ); + let headers = headers("secret", body.as_bytes()); + source + .verify(&headers, body.as_bytes()) + .await + .expect("signature accepted"); + let event = source + .parse(&headers, body.as_bytes()) + .await + .expect("payload parses"); + + assert_eq!(event.source, "uptime_kuma"); + assert_eq!(event.event_type, "heartbeat"); + assert_eq!(event.action.as_deref(), Some(action)); + assert_eq!(event.severity, severity); + assert_eq!(event.metadata["monitor_name"], "API"); + assert_eq!(event.metadata["status"], action); + assert_eq!(event.metadata["ping_ms"], 12); + assert_eq!(event.metadata["duration_ms"], 5_000.0); + } } #[tokio::test]