diff --git a/src/client/config.rs b/src/client/config.rs index 5f8c9b1..c7f0bea 100644 --- a/src/client/config.rs +++ b/src/client/config.rs @@ -15,6 +15,11 @@ pub struct ServerConfig { } impl ServerConfig { + #[cfg(test)] + pub fn default() -> ServerConfig { + ServerConfig { auto: true, ports: HashMap::new() } + } + pub fn contains_key(&self, port: u16) -> bool { self.ports.contains_key(&port) } diff --git a/src/client/ui.rs b/src/client/ui.rs index 8a6c9f6..c6e89bf 100644 --- a/src/client/ui.rs +++ b/src/client/ui.rs @@ -504,3 +504,30 @@ impl Drop for UI { _ = self.leave_alternate_screen(); } } + +#[cfg(test)] +mod tests { + use super::*; + use assert_matches::assert_matches; + + #[tokio::test] + async fn empty_ports() { + let (sender, receiver) = mpsc::channel(64); + let config = ServerConfig::default(); + let mut ui = UI::new(receiver, config); + + // There are ports... + ui.handle_internal_event(Some(UIEvent::Ports(vec![PortDesc { + port: 8080, + desc: "my-service".to_string(), + }]))); + ui.selection.select(Some(0)); + + // ...but now there are no ports! + ui.handle_internal_event(Some(UIEvent::Ports(vec![]))); + assert_eq!(ui.ports.len(), 0); + assert_matches!(ui.selection.selected(), None); + + drop(sender); + } +}