diff --git a/src/app/sonarr/mod.rs b/src/app/sonarr/mod.rs index 8762ed9..3d96f94 100644 --- a/src/app/sonarr/mod.rs +++ b/src/app/sonarr/mod.rs @@ -88,7 +88,9 @@ impl<'a> App<'a> { if let Some(episode_details_modal) = season_details_modal.episode_details_modal.as_ref() { if episode_details_modal.episode_releases.is_empty() { self - .dispatch_network_event(SonarrEvent::GetEpisodeReleases(None).into()) + .dispatch_network_event( + SonarrEvent::GetEpisodeReleases(self.extract_episode_id().await).into(), + ) .await; } } diff --git a/src/app/sonarr/sonarr_tests.rs b/src/app/sonarr/sonarr_tests.rs index e09b20c..0f00a9e 100644 --- a/src/app/sonarr/sonarr_tests.rs +++ b/src/app/sonarr/sonarr_tests.rs @@ -239,10 +239,14 @@ mod tests { #[tokio::test] async fn test_dispatch_by_manual_episode_search_block() { let (mut app, mut sync_network_rx) = construct_app_unit(); - let season_details_modal = SeasonDetailsModal { + let mut season_details_modal = SeasonDetailsModal { episode_details_modal: Some(EpisodeDetailsModal::default()), ..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 @@ -252,7 +256,7 @@ mod tests { assert!(app.is_loading); assert_eq!( sync_network_rx.recv().await.unwrap(), - SonarrEvent::GetEpisodeReleases(None).into() + SonarrEvent::GetEpisodeReleases(1).into() ); assert!(!app.data.sonarr_data.prompt_confirm); assert_eq!(app.tick_count, 0); diff --git a/src/cli/sonarr/manual_search_command_handler.rs b/src/cli/sonarr/manual_search_command_handler.rs index e8e1ca3..0633856 100644 --- a/src/cli/sonarr/manual_search_command_handler.rs +++ b/src/cli/sonarr/manual_search_command_handler.rs @@ -75,7 +75,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrManualSearchCommand> println!("Searching for episode releases. This may take a minute..."); let resp = self .network - .handle_network_event(SonarrEvent::GetEpisodeReleases(Some(episode_id)).into()) + .handle_network_event(SonarrEvent::GetEpisodeReleases(episode_id).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/sonarr/manual_search_command_handler_tests.rs b/src/cli/sonarr/manual_search_command_handler_tests.rs index 53b26ad..14e4c46 100644 --- a/src/cli/sonarr/manual_search_command_handler_tests.rs +++ b/src/cli/sonarr/manual_search_command_handler_tests.rs @@ -130,7 +130,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - SonarrEvent::GetEpisodeReleases(Some(expected_episode_id)).into(), + SonarrEvent::GetEpisodeReleases(expected_episode_id).into(), )) .times(1) .returning(|_| { diff --git a/src/cli/sonarr/sonarr_command_tests.rs b/src/cli/sonarr/sonarr_command_tests.rs index 64e5a2c..c4fc0f1 100644 --- a/src/cli/sonarr/sonarr_command_tests.rs +++ b/src/cli/sonarr/sonarr_command_tests.rs @@ -470,7 +470,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - SonarrEvent::GetEpisodeReleases(Some(expected_episode_id)).into(), + SonarrEvent::GetEpisodeReleases(expected_episode_id).into(), )) .times(1) .returning(|_| { diff --git a/src/network/sonarr_network.rs b/src/network/sonarr_network.rs index 227474e..eb15f6f 100644 --- a/src/network/sonarr_network.rs +++ b/src/network/sonarr_network.rs @@ -69,7 +69,7 @@ pub enum SonarrEvent { GetQualityProfiles, GetQueuedEvents, GetRootFolders, - GetEpisodeReleases(Option), + GetEpisodeReleases(i64), GetSeasonHistory(Option<(i64, i64)>), GetSeasonReleases(Option<(i64, i64)>), GetSecurityConfig, @@ -1613,11 +1613,9 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn get_episode_releases(&mut self, episode_id: Option) -> Result> { - let event = SonarrEvent::GetEpisodeReleases(None); - let id = self.extract_episode_id(episode_id).await; - - info!("Fetching releases for episode with ID: {id}"); + async fn get_episode_releases(&mut self, episode_id: i64) -> Result> { + let event = SonarrEvent::GetEpisodeReleases(episode_id); + info!("Fetching releases for episode with ID: {episode_id}"); let request_props = self .request_props_from( @@ -1625,7 +1623,7 @@ impl<'a, 'b> Network<'a, 'b> { RequestMethod::Get, None::<()>, None, - Some(format!("episodeId={id}")), + Some(format!("episodeId={episode_id}")), ) .await; diff --git a/src/network/sonarr_network_tests.rs b/src/network/sonarr_network_tests.rs index f160072..b6f90cc 100644 --- a/src/network/sonarr_network_tests.rs +++ b/src/network/sonarr_network_tests.rs @@ -258,7 +258,7 @@ mod test { fn test_resource_release( #[values( SonarrEvent::GetSeasonReleases(None), - SonarrEvent::GetEpisodeReleases(None) + SonarrEvent::GetEpisodeReleases(0) )] event: SonarrEvent, ) { @@ -3360,7 +3360,7 @@ mod test { None, Some(release_json), None, - SonarrEvent::GetEpisodeReleases(None), + SonarrEvent::GetEpisodeReleases(1), None, Some("episodeId=1"), ) @@ -3380,7 +3380,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let SonarrSerdeable::Releases(releases_vec) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeReleases(None)) + .handle_sonarr_event(SonarrEvent::GetEpisodeReleases(1)) .await .unwrap() { @@ -3427,7 +3427,7 @@ mod test { None, Some(release_json), None, - SonarrEvent::GetEpisodeReleases(None), + SonarrEvent::GetEpisodeReleases(1), None, Some("episodeId=1"), ) @@ -3438,110 +3438,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let SonarrSerdeable::Releases(releases_vec) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeReleases(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_releases - .items, - vec![release()] - ); - assert_eq!(releases_vec, vec![release()]); - } - } - - #[tokio::test] - #[should_panic(expected = "Season details have not been loaded")] - async fn test_handle_get_episode_releases_event_empty_season_details_modal_panics() { - let release_json = json!([{ - "guid": "1234", - "protocol": "torrent", - "age": 1, - "title": "Test Release", - "indexer": "kickass torrents", - "indexerId": 2, - "size": 1234, - "rejected": true, - "rejections": [ "Unknown quality profile", "Release is already mapped" ], - "seeders": 2, - "leechers": 1, - "languages": [ { "id": 1, "name": "English" } ], - "quality": { "quality": { "name": "Bluray-1080p" }} - }]); - let (_async_server, app_arc, _server) = mock_servarr_api( - RequestMethod::Get, - None, - Some(release_json), - None, - SonarrEvent::GetEpisodeReleases(None), - None, - Some("episodeId=1"), - ) - .await; - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - network - .handle_sonarr_event(SonarrEvent::GetEpisodeReleases(None)) - .await - .unwrap(); - } - - #[tokio::test] - async fn test_handle_get_episode_releases_event_uses_provided_series_id() { - let release_json = json!([{ - "guid": "1234", - "protocol": "torrent", - "age": 1, - "title": "Test Release", - "indexer": "kickass torrents", - "indexerId": 2, - "size": 1234, - "rejected": true, - "rejections": [ "Unknown quality profile", "Release is already mapped" ], - "seeders": 2, - "leechers": 1, - "languages": [ { "id": 1, "name": "English" } ], - "quality": { "quality": { "name": "Bluray-1080p" }} - }]); - let (async_server, app_arc, _server) = mock_servarr_api( - RequestMethod::Get, - None, - Some(release_json), - None, - SonarrEvent::GetEpisodeReleases(None), - None, - Some("episodeId=2"), - ) - .await; - let mut season_details_modal = SeasonDetailsModal::default(); - season_details_modal.episodes.set_items(vec![episode()]); - app_arc.lock().await.data.sonarr_data.season_details_modal = Some(season_details_modal); - app_arc - .lock() - .await - .data - .sonarr_data - .season_details_modal - .as_mut() - .unwrap() - .episode_details_modal = Some(EpisodeDetailsModal::default()); - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - if let SonarrSerdeable::Releases(releases_vec) = network - .handle_sonarr_event(SonarrEvent::GetEpisodeReleases(Some(2))) + .handle_sonarr_event(SonarrEvent::GetEpisodeReleases(1)) .await .unwrap() {