diff --git a/crates/lanparty-client-win/src/main.rs b/crates/lanparty-client-win/src/main.rs index ddc0d42..46188ee 100644 --- a/crates/lanparty-client-win/src/main.rs +++ b/crates/lanparty-client-win/src/main.rs @@ -1685,6 +1685,41 @@ mod tests { assert_eq!(relay_status.gateway_peer_id(), None); } + #[test] + fn tracks_gateway_replacement_after_disconnect() { + let first_gateway = + ControlMessage::PeerJoined(PeerInfo::new(1, Role::Gateway, None).unwrap()); + let first_gateway_left = ControlMessage::PeerLeft { + peer_id: 1, + reason: DisconnectReason::Normal, + }; + let replacement_gateway = + ControlMessage::PeerJoined(PeerInfo::new(3, Role::Gateway, None).unwrap()); + let mut formatter = ControlEventFormatter::default(); + let relay_status = ClientRelayStatus::new(false); + + assert_eq!( + formatter.format(&first_gateway, &relay_status), + "relay event: LAN gateway connected as peer 1" + ); + assert!(relay_status.gateway_connected()); + assert_eq!(relay_status.gateway_peer_id(), Some(1)); + + assert_eq!( + formatter.format(&first_gateway_left, &relay_status), + "relay event: LAN gateway disconnected (peer 1, Normal)" + ); + assert!(!relay_status.gateway_connected()); + assert_eq!(relay_status.gateway_peer_id(), None); + + assert_eq!( + formatter.format(&replacement_gateway, &relay_status), + "relay event: LAN gateway connected as peer 3" + ); + assert!(relay_status.gateway_connected()); + assert_eq!(relay_status.gateway_peer_id(), Some(3)); + } + const fn mac(last_octet: u8) -> MacAddr { MacAddr::new([0x02, 0, 0, 0, 0, last_octet]) }