diff --git a/crates/bsk-protocol/src/frame.rs b/crates/bsk-protocol/src/frame.rs index 3e6ce37..996d487 100644 --- a/crates/bsk-protocol/src/frame.rs +++ b/crates/bsk-protocol/src/frame.rs @@ -238,6 +238,24 @@ impl<'de> Visitor<'de> for FrameVisitor { mod tests { use super::*; + #[test] + fn system_heartbeat_serialises_as_dotted_name() { + // The extension hardcodes the literal string "system.heartbeat" + // when it emits the keepalive event; this locks the daemon-side + // serde name to the same wire value so a rename cannot silently + // break liveness/keepalive. + let v = serde_json::to_value(EventKind::SystemHeartbeat).unwrap(); + assert_eq!(v, serde_json::json!("system.heartbeat")); + } + + #[test] + fn system_heartbeat_event_frame_round_trips_from_extension_shape() { + // Mirrors exactly what the extension sends: { event, payload: {} }. + let wire = serde_json::json!({ "event": "system.heartbeat", "payload": {} }); + let frame: EventFrame = serde_json::from_value(wire).unwrap(); + assert_eq!(frame.event, EventKind::SystemHeartbeat); + } + #[test] fn session_user_interrupt_serialises_as_snake_case() { let v = serde_json::to_value(EventKind::SessionUserInterrupt).unwrap();