diff --git a/src/cli/radarr/delete_command_handler.rs b/src/cli/radarr/delete_command_handler.rs index 597a65b..3044a8e 100644 --- a/src/cli/radarr/delete_command_handler.rs +++ b/src/cli/radarr/delete_command_handler.rs @@ -96,7 +96,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrDeleteCommand> for RadarrDeleteComm RadarrDeleteCommand::Download { download_id } => { let resp = self .network - .handle_network_event(RadarrEvent::DeleteDownload(Some(download_id)).into()) + .handle_network_event(RadarrEvent::DeleteDownload(download_id).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/radarr/delete_command_handler_tests.rs b/src/cli/radarr/delete_command_handler_tests.rs index e7987bf..590a28c 100644 --- a/src/cli/radarr/delete_command_handler_tests.rs +++ b/src/cli/radarr/delete_command_handler_tests.rs @@ -299,7 +299,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - RadarrEvent::DeleteDownload(Some(expected_download_id)).into(), + RadarrEvent::DeleteDownload(expected_download_id).into(), )) .times(1) .returning(|_| { diff --git a/src/handlers/radarr_handlers/downloads/downloads_handler_tests.rs b/src/handlers/radarr_handlers/downloads/downloads_handler_tests.rs index e5e75bc..655b47b 100644 --- a/src/handlers/radarr_handlers/downloads/downloads_handler_tests.rs +++ b/src/handlers/radarr_handlers/downloads/downloads_handler_tests.rs @@ -1,11 +1,13 @@ #[cfg(test)] mod tests { + use pretty_assertions::assert_eq; use strum::IntoEnumIterator; use crate::app::key_binding::DEFAULT_KEYBINDINGS; use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::downloads::DownloadsHandler; + use crate::handlers::radarr_handlers::radarr_handler_test_utils::utils::download_record; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::DownloadRecord; use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, DOWNLOADS_BLOCKS}; @@ -137,7 +139,7 @@ mod tests { #[case( ActiveRadarrBlock::Downloads, ActiveRadarrBlock::DeleteDownloadPrompt, - RadarrEvent::DeleteDownload(None) + RadarrEvent::DeleteDownload(1) )] #[case( ActiveRadarrBlock::Downloads, @@ -154,7 +156,7 @@ mod tests { .data .radarr_data .downloads - .set_items(vec![DownloadRecord::default()]); + .set_items(vec![download_record()]); app.data.radarr_data.prompt_confirm = true; app.push_navigation_stack(base_route.into()); app.push_navigation_stack(prompt_block.into()); @@ -336,7 +338,7 @@ mod tests { #[case( ActiveRadarrBlock::Downloads, ActiveRadarrBlock::DeleteDownloadPrompt, - RadarrEvent::DeleteDownload(None) + RadarrEvent::DeleteDownload(1) )] #[case( ActiveRadarrBlock::Downloads, @@ -353,7 +355,7 @@ mod tests { .data .radarr_data .downloads - .set_items(vec![DownloadRecord::default()]); + .set_items(vec![download_record()]); app.push_navigation_stack(base_route.into()); app.push_navigation_stack(prompt_block.into()); @@ -385,6 +387,21 @@ mod tests { }) } + #[test] + fn test_extract_download_id() { + let mut app = App::default(); + app.data.radarr_data.downloads.set_items(vec![download_record()]); + + let download_id = DownloadsHandler::with( + DEFAULT_KEYBINDINGS.esc.key, + &mut app, + ActiveRadarrBlock::Downloads, + None, + ).extract_download_id(); + + assert_eq!(download_id, 1); + } + #[test] fn test_downloads_handler_not_ready_when_loading() { let mut app = App::default(); diff --git a/src/handlers/radarr_handlers/downloads/mod.rs b/src/handlers/radarr_handlers/downloads/mod.rs index a09966f..d97ce87 100644 --- a/src/handlers/radarr_handlers/downloads/mod.rs +++ b/src/handlers/radarr_handlers/downloads/mod.rs @@ -27,6 +27,16 @@ impl<'a, 'b> DownloadsHandler<'a, 'b> { self.app.data.radarr_data.downloads, DownloadRecord ); + + fn extract_download_id(&self) -> i64 { + self + .app + .data + .radarr_data + .downloads + .current_selection() + .id + } } impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for DownloadsHandler<'a, 'b> { @@ -95,7 +105,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for DownloadsHandler<'a, match self.active_radarr_block { ActiveRadarrBlock::DeleteDownloadPrompt => { if self.app.data.radarr_data.prompt_confirm { - self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteDownload(None)); + self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteDownload(self.extract_download_id())); } self.app.pop_navigation_stack(); @@ -138,7 +148,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for DownloadsHandler<'a, ActiveRadarrBlock::DeleteDownloadPrompt => { if key == DEFAULT_KEYBINDINGS.confirm.key { self.app.data.radarr_data.prompt_confirm = true; - self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteDownload(None)); + self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteDownload(self.extract_download_id())); self.app.pop_navigation_stack(); } diff --git a/src/network/radarr_network.rs b/src/network/radarr_network.rs index 8469b60..a3696be 100644 --- a/src/network/radarr_network.rs +++ b/src/network/radarr_network.rs @@ -40,7 +40,7 @@ pub enum RadarrEvent { AddTag(String), ClearBlocklist, DeleteBlocklistItem(i64), - DeleteDownload(Option), + DeleteDownload(i64), DeleteIndexer(Option), DeleteMovie(Option), DeleteRootFolder(Option), @@ -407,30 +407,16 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn delete_radarr_download(&mut self, download_id: Option) -> Result<()> { - let event = RadarrEvent::DeleteDownload(None); - let id = if let Some(dl_id) = download_id { - dl_id - } else { - self - .app - .lock() - .await - .data - .radarr_data - .downloads - .current_selection() - .id - }; - - info!("Deleting Radarr download for download with id: {id}"); + async fn delete_radarr_download(&mut self, download_id: i64) -> Result<()> { + let event = RadarrEvent::DeleteDownload(download_id); + info!("Deleting Radarr download for download with id: {download_id}"); let request_props = self .request_props_from( event, RequestMethod::Delete, None::<()>, - Some(format!("/{id}")), + Some(format!("/{download_id}")), None, ) .await; diff --git a/src/network/radarr_network_tests.rs b/src/network/radarr_network_tests.rs index a99298c..c7459c6 100644 --- a/src/network/radarr_network_tests.rs +++ b/src/network/radarr_network_tests.rs @@ -187,7 +187,7 @@ mod test { #[rstest] fn test_resource_queue( - #[values(RadarrEvent::GetDownloads, RadarrEvent::DeleteDownload(None))] event: RadarrEvent, + #[values(RadarrEvent::GetDownloads, RadarrEvent::DeleteDownload(0))] event: RadarrEvent, ) { assert_str_eq!(event.resource(), "/queue"); } @@ -3221,36 +3221,7 @@ mod test { None, None, None, - RadarrEvent::DeleteDownload(None), - Some("/1"), - None, - ) - .await; - app_arc - .lock() - .await - .data - .radarr_data - .downloads - .set_items(vec![download_record()]); - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - assert!(network - .handle_radarr_event(RadarrEvent::DeleteDownload(None)) - .await - .is_ok()); - - async_server.assert_async().await; - } - - #[tokio::test] - async fn test_handle_delete_radarr_download_event_uses_provided_id() { - let (async_server, app_arc, _server) = mock_servarr_api( - RequestMethod::Delete, - None, - None, - None, - RadarrEvent::DeleteDownload(None), + RadarrEvent::DeleteDownload(1), Some("/1"), None, ) @@ -3258,7 +3229,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); assert!(network - .handle_radarr_event(RadarrEvent::DeleteDownload(Some(1))) + .handle_radarr_event(RadarrEvent::DeleteDownload(1)) .await .is_ok());