diff --git a/src/app/sonarr/mod.rs b/src/app/sonarr/mod.rs index 5edda06..74b912c 100644 --- a/src/app/sonarr/mod.rs +++ b/src/app/sonarr/mod.rs @@ -78,7 +78,9 @@ impl<'a> App<'a> { } ActiveSonarrBlock::EpisodeHistory => { self - .dispatch_network_event(SonarrEvent::GetEpisodeHistory(None).into()) + .dispatch_network_event( + SonarrEvent::GetEpisodeHistory(self.extract_episode_id().await).into(), + ) .await; } ActiveSonarrBlock::ManualEpisodeSearch => { diff --git a/src/app/sonarr/sonarr_tests.rs b/src/app/sonarr/sonarr_tests.rs index 91b7281..37227fa 100644 --- a/src/app/sonarr/sonarr_tests.rs +++ b/src/app/sonarr/sonarr_tests.rs @@ -5,6 +5,7 @@ mod tests { use tokio::sync::mpsc; use crate::models::servarr_data::sonarr::sonarr_data::sonarr_test_utils::utils::create_test_sonarr_data; + use crate::models::sonarr_models::Episode; use crate::{ app::App, models::{ @@ -215,6 +216,12 @@ mod tests { #[tokio::test] async fn test_dispatch_by_episode_history_block() { let (mut app, mut sync_network_rx) = construct_app_unit(); + let mut season_details_modal = SeasonDetailsModal::default(); + season_details_modal.episodes.set_items(vec![Episode { + id: 1, + ..Episode::default() + }]); + app.data.sonarr_data.season_details_modal = Some(season_details_modal); app .dispatch_by_sonarr_block(&ActiveSonarrBlock::EpisodeHistory) @@ -223,7 +230,7 @@ mod tests { assert!(app.is_loading); assert_eq!( sync_network_rx.recv().await.unwrap(), - SonarrEvent::GetEpisodeHistory(None).into() + SonarrEvent::GetEpisodeHistory(1).into() ); assert!(!app.data.sonarr_data.prompt_confirm); assert_eq!(app.tick_count, 0); @@ -737,9 +744,14 @@ mod tests { #[tokio::test] async fn test_extract_episode_id() { let mut app = App::default(); - app.data.sonarr_data = create_test_sonarr_data(); + let mut season_details_modal = SeasonDetailsModal::default(); + season_details_modal.episodes.set_items(vec![Episode { + id: 1, + ..Episode::default() + }]); + app.data.sonarr_data.season_details_modal = Some(season_details_modal); - assert_eq!(app.extract_episode_id().await, 0); + assert_eq!(app.extract_episode_id().await, 1); } #[tokio::test] diff --git a/src/cli/sonarr/list_command_handler.rs b/src/cli/sonarr/list_command_handler.rs index cabb616..46d4329 100644 --- a/src/cli/sonarr/list_command_handler.rs +++ b/src/cli/sonarr/list_command_handler.rs @@ -177,7 +177,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrListCommand> for SonarrListCommandH SonarrListCommand::EpisodeHistory { episode_id } => { let resp = self .network - .handle_network_event(SonarrEvent::GetEpisodeHistory(Some(episode_id)).into()) + .handle_network_event(SonarrEvent::GetEpisodeHistory(episode_id).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/sonarr/list_command_handler_tests.rs b/src/cli/sonarr/list_command_handler_tests.rs index 8958a84..edea5bd 100644 --- a/src/cli/sonarr/list_command_handler_tests.rs +++ b/src/cli/sonarr/list_command_handler_tests.rs @@ -461,7 +461,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - SonarrEvent::GetEpisodeHistory(Some(expected_episode_id)).into(), + SonarrEvent::GetEpisodeHistory(expected_episode_id).into(), )) .times(1) .returning(|_| { diff --git a/src/network/sonarr_network.rs b/src/network/sonarr_network.rs index 41d76d7..da2de2d 100644 --- a/src/network/sonarr_network.rs +++ b/src/network/sonarr_network.rs @@ -62,7 +62,7 @@ pub enum SonarrEvent { GetEpisodeDetails(i64), GetEpisodes(i64), GetEpisodeFiles(i64), - GetEpisodeHistory(Option), + GetEpisodeHistory(i64), GetLanguageProfiles, GetLogs(Option), GetDiskSpace, @@ -1238,15 +1238,12 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn get_sonarr_episode_history( - &mut self, - episode_id: Option, - ) -> Result { - let id = self.extract_episode_id(episode_id).await; - info!("Fetching Sonarr history for episode with ID: {id}"); + async fn get_sonarr_episode_history(&mut self, episode_id: i64) -> Result { + info!("Fetching Sonarr history for episode with ID: {episode_id}"); let event = SonarrEvent::GetEpisodeHistory(episode_id); - let params = format!("episodeId={id}&pageSize=1000&sortDirection=descending&sortKey=date",); + let params = + format!("episodeId={episode_id}&pageSize=1000&sortDirection=descending&sortKey=date"); let request_props = self .request_props_from(event, RequestMethod::Get, None::<()>, None, Some(params)) .await; diff --git a/src/network/sonarr_network_tests.rs b/src/network/sonarr_network_tests.rs index 2c922b1..cb7db2b 100644 --- a/src/network/sonarr_network_tests.rs +++ b/src/network/sonarr_network_tests.rs @@ -219,7 +219,7 @@ mod test { #[rstest] fn test_resource_history( - #[values(SonarrEvent::GetHistory(0), SonarrEvent::GetEpisodeHistory(None))] event: SonarrEvent, + #[values(SonarrEvent::GetHistory(0), SonarrEvent::GetEpisodeHistory(0))] event: SonarrEvent, ) { assert_str_eq!(event.resource(), "/history"); } @@ -2783,7 +2783,7 @@ mod test { None, Some(history_json), None, - SonarrEvent::GetEpisodeHistory(None), + SonarrEvent::GetEpisodeHistory(1), None, Some("episodeId=1&pageSize=1000&sortDirection=descending&sortKey=date"), ) @@ -2825,137 +2825,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let SonarrSerdeable::SonarrHistoryWrapper(history) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeHistory(None)) - .await - .unwrap() - { - async_server.assert_async().await; - assert_eq!( - app_arc - .lock() - .await - .data - .sonarr_data - .season_details_modal - .as_ref() - .unwrap() - .episode_details_modal - .as_ref() - .unwrap() - .episode_history - .items, - expected_history_items - ); - assert!( - app_arc - .lock() - .await - .data - .sonarr_data - .season_details_modal - .as_ref() - .unwrap() - .episode_details_modal - .as_ref() - .unwrap() - .episode_history - .sort_asc - ); - assert_eq!(history, response); - } - } - - #[tokio::test] - async fn test_handle_get_sonarr_episode_history_event_uses_provided_episode_id() { - let history_json = json!({"records": [{ - "id": 123, - "sourceTitle": "z episode", - "episodeId": 1007, - "quality": { "quality": { "name": "Bluray-1080p" } }, - "languages": [{ "id": 1, "name": "English" }], - "date": "2024-02-10T07:28:45Z", - "eventType": "grabbed", - "data": { - "droppedPath": "/nfs/nzbget/completed/series/Coolness/something.cool.mkv", - "importedPath": "/nfs/tv/Coolness/Season 1/Coolness - S01E01 - Something Cool Bluray-1080p.mkv" - } - }, - { - "id": 456, - "sourceTitle": "A Episode", - "episodeId": 2001, - "quality": { "quality": { "name": "Bluray-1080p" } }, - "languages": [{ "id": 1, "name": "English" }], - "date": "2024-02-10T07:28:45Z", - "eventType": "grabbed", - "data": { - "droppedPath": "/nfs/nzbget/completed/series/Coolness/something.cool.mkv", - "importedPath": "/nfs/tv/Coolness/Season 1/Coolness - S01E01 - Something Cool Bluray-1080p.mkv" - } - }]}); - let response: SonarrHistoryWrapper = serde_json::from_value(history_json.clone()).unwrap(); - let expected_history_items = vec![ - SonarrHistoryItem { - id: 123, - episode_id: 1007, - source_title: "z episode".into(), - ..history_item() - }, - SonarrHistoryItem { - id: 456, - episode_id: 2001, - source_title: "A Episode".into(), - ..history_item() - }, - ]; - let (async_server, app_arc, _server) = mock_servarr_api( - RequestMethod::Get, - None, - Some(history_json), - None, - SonarrEvent::GetEpisodeHistory(Some(2)), - None, - Some("episodeId=2&pageSize=1000&sortDirection=descending&sortKey=date"), - ) - .await; - app_arc.lock().await.data.sonarr_data.season_details_modal = - Some(SeasonDetailsModal::default()); - app_arc - .lock() - .await - .data - .sonarr_data - .season_details_modal - .as_mut() - .unwrap() - .episodes - .set_items(vec![episode()]); - app_arc - .lock() - .await - .data - .sonarr_data - .season_details_modal - .as_mut() - .unwrap() - .episode_details_modal = Some(EpisodeDetailsModal::default()); - app_arc - .lock() - .await - .data - .sonarr_data - .season_details_modal - .as_mut() - .unwrap() - .episode_details_modal - .as_mut() - .unwrap() - .episode_history - .sort_asc = true; - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - if let SonarrSerdeable::SonarrHistoryWrapper(history) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeHistory(Some(2))) + .handle_sonarr_event(SonarrEvent::GetEpisodeHistory(1)) .await .unwrap() { @@ -3043,7 +2913,7 @@ mod test { None, Some(history_json), None, - SonarrEvent::GetEpisodeHistory(None), + SonarrEvent::GetEpisodeHistory(1), None, Some("episodeId=1&pageSize=1000&sortDirection=descending&sortKey=date"), ) @@ -3063,7 +2933,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let SonarrSerdeable::SonarrHistoryWrapper(history) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeHistory(None)) + .handle_sonarr_event(SonarrEvent::GetEpisodeHistory(1)) .await .unwrap() { @@ -3151,7 +3021,7 @@ mod test { None, Some(history_json), None, - SonarrEvent::GetEpisodeHistory(Some(1)), + SonarrEvent::GetEpisodeHistory(1), None, Some("episodeId=1&pageSize=1000&sortDirection=descending&sortKey=date"), ) @@ -3159,7 +3029,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let SonarrSerdeable::SonarrHistoryWrapper(history) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeHistory(Some(1))) + .handle_sonarr_event(SonarrEvent::GetEpisodeHistory(1)) .await .unwrap() {