diff --git a/src/network/network_tests.rs b/src/network/network_tests.rs index 7672144d..98f31151 100644 --- a/src/network/network_tests.rs +++ b/src/network/network_tests.rs @@ -992,6 +992,7 @@ pub(in crate::network) mod test_utils { NetworkEvent::Radarr(_) => app.server_tabs.tabs[0].config = Some(servarr_config), NetworkEvent::Sonarr(_) => app.server_tabs.tabs[1].config = Some(servarr_config), NetworkEvent::Lidarr(_) => app.server_tabs.tabs[2].config = Some(servarr_config), + NetworkEvent::Readarr(_) => app.server_tabs.tabs[3].config = Some(servarr_config), } let app_arc = Arc::new(Mutex::new(app)); diff --git a/src/network/readarr_network/mod.rs b/src/network/readarr_network/mod.rs index 747f5a65..b47a0032 100644 --- a/src/network/readarr_network/mod.rs +++ b/src/network/readarr_network/mod.rs @@ -1,15 +1,24 @@ use anyhow::Result; +use log::info; use super::{NetworkEvent, NetworkResource}; use crate::models::readarr_models::ReadarrSerdeable; -use crate::network::Network; +use crate::network::{Network, RequestMethod}; + +#[cfg(test)] +#[path = "readarr_network_tests.rs"] +mod readarr_network_tests; #[derive(Debug, Eq, PartialEq, Clone)] -pub enum ReadarrEvent {} +pub enum ReadarrEvent { + HealthCheck, +} impl NetworkResource for ReadarrEvent { fn resource(&self) -> &'static str { - match *self {} + match &self { + ReadarrEvent::HealthCheck => "/health", + } } } @@ -24,6 +33,26 @@ impl Network<'_, '_> { &mut self, readarr_event: ReadarrEvent, ) -> Result { - match readarr_event {} + match readarr_event { + ReadarrEvent::HealthCheck => self + .get_readarr_healthcheck() + .await + .map(ReadarrSerdeable::from), + } + } + + pub(in crate::network::readarr_network) async fn get_readarr_healthcheck( + &mut self, + ) -> Result<()> { + info!("Performing Readarr health check"); + let event = ReadarrEvent::HealthCheck; + + let request_props = self + .request_props_from(event, RequestMethod::Get, None::<()>, None, None) + .await; + + self + .handle_request::<(), ()>(request_props, |_, _| ()) + .await } } diff --git a/src/network/readarr_network/readarr_network_tests.rs b/src/network/readarr_network/readarr_network_tests.rs new file mode 100644 index 00000000..699ebd89 --- /dev/null +++ b/src/network/readarr_network/readarr_network_tests.rs @@ -0,0 +1,53 @@ +#[cfg(test)] +mod tests { + use crate::network::network_tests::test_utils::{MockServarrApi, test_network}; + use crate::network::{NetworkEvent, NetworkResource, readarr_network::ReadarrEvent}; + use pretty_assertions::{assert_eq, assert_str_eq}; + use rstest::rstest; + + #[rstest] + #[case(ReadarrEvent::HealthCheck, "/health")] + fn test_resource(#[case] event: ReadarrEvent, #[case] expected_uri: &str) { + assert_str_eq!(event.resource(), expected_uri); + } + + #[test] + fn test_from_readarr_event() { + assert_eq!( + NetworkEvent::Readarr(ReadarrEvent::HealthCheck), + NetworkEvent::from(ReadarrEvent::HealthCheck) + ); + } + + #[tokio::test] + async fn test_handle_get_readarr_healthcheck_event() { + let (mock, app, _server) = MockServarrApi::get() + .build_for(ReadarrEvent::HealthCheck) + .await; + app.lock().await.server_tabs.set_index(3); + let mut network = test_network(&app); + + let _ = network + .handle_readarr_event(ReadarrEvent::HealthCheck) + .await; + + mock.assert_async().await; + } + + #[tokio::test] + async fn test_handle_get_readarr_healthcheck_event_failure() { + let (mock, app, _server) = MockServarrApi::get() + .status(500) + .build_for(ReadarrEvent::HealthCheck) + .await; + app.lock().await.server_tabs.set_index(3); + let mut network = test_network(&app); + + let result = network + .handle_readarr_event(ReadarrEvent::HealthCheck) + .await; + + mock.assert_async().await; + assert_err!(result); + } +}