diff --git a/apps/desktop-shell/scripts/check-config.mjs b/apps/desktop-shell/scripts/check-config.mjs index 5c98a742e..8fa76db41 100644 --- a/apps/desktop-shell/scripts/check-config.mjs +++ b/apps/desktop-shell/scripts/check-config.mjs @@ -1920,8 +1920,10 @@ if ( for (const snippet of [ 'resolve_desktop_host_bridge_network_status', 'resolve_desktop_host_bridge_network_status_payload', + 'network_status_unavailable_response', 'spawn_blocking(resolve_desktop_network_status)', - 'failed(request.id.clone(), "host_error", error)', + '"network status unavailable"', + 'network_status_unavailable_response_is_stable', ]) { if (!desktopHostBridgeNetworkSource.includes(snippet)) { throw new Error(`desktop shell network module is missing ${snippet}`); diff --git a/apps/desktop-shell/src-tauri/src/host_bridge/network.rs b/apps/desktop-shell/src-tauri/src/host_bridge/network.rs index 196bdd2df..0eab269bc 100644 --- a/apps/desktop-shell/src-tauri/src/host_bridge/network.rs +++ b/apps/desktop-shell/src-tauri/src/host_bridge/network.rs @@ -13,6 +13,26 @@ pub(crate) async fn resolve_desktop_host_bridge_network_status( ) -> HostBridgeResponse { match resolve_desktop_host_bridge_network_status_payload().await { Ok(status) => ok(request.id.clone(), status), - Err(error) => failed(request.id.clone(), "host_error", error), + Err(_) => network_status_unavailable_response(request), + } +} + +fn network_status_unavailable_response(request: &HostBridgeRequest) -> HostBridgeResponse { + failed(request.id.clone(), "host_error", "network status unavailable") +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::host_bridge::protocol::request; + + #[test] + fn network_status_unavailable_response_is_stable() { + let response = network_status_unavailable_response(&request("network.status")); + + assert!(!response.ok); + let error = response.error.expect("network status error"); + assert_eq!(error.code, "host_error"); + assert_eq!(error.message, "network status unavailable"); } }