diff --git a/src/cli/radarr/delete_command_handler.rs b/src/cli/radarr/delete_command_handler.rs index 21d138c..9fdb83c 100644 --- a/src/cli/radarr/delete_command_handler.rs +++ b/src/cli/radarr/delete_command_handler.rs @@ -126,7 +126,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrDeleteCommand> for RadarrDeleteComm RadarrDeleteCommand::RootFolder { root_folder_id } => { let resp = self .network - .handle_network_event(RadarrEvent::DeleteRootFolder(Some(root_folder_id)).into()) + .handle_network_event(RadarrEvent::DeleteRootFolder(root_folder_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 d1333e6..ad1580e 100644 --- a/src/cli/radarr/delete_command_handler_tests.rs +++ b/src/cli/radarr/delete_command_handler_tests.rs @@ -385,7 +385,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - RadarrEvent::DeleteRootFolder(Some(expected_root_folder_id)).into(), + RadarrEvent::DeleteRootFolder(expected_root_folder_id).into(), )) .times(1) .returning(|_| { diff --git a/src/handlers/radarr_handlers/root_folders/mod.rs b/src/handlers/radarr_handlers/root_folders/mod.rs index f77d5fd..a605645 100644 --- a/src/handlers/radarr_handlers/root_folders/mod.rs +++ b/src/handlers/radarr_handlers/root_folders/mod.rs @@ -43,6 +43,15 @@ impl<'a, 'b> RootFoldersHandler<'a, 'b> { AddRootFolderBody { path } } + + fn extract_root_folder_id(&mut self) -> i64 { + self.app + .data + .radarr_data + .root_folders + .current_selection() + .id + } } impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for RootFoldersHandler<'a, 'b> { @@ -139,7 +148,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for RootFoldersHandler<' ActiveRadarrBlock::DeleteRootFolderPrompt => { if self.app.data.radarr_data.prompt_confirm { self.app.data.radarr_data.prompt_confirm_action = - Some(RadarrEvent::DeleteRootFolder(None)); + Some(RadarrEvent::DeleteRootFolder(self.extract_root_folder_id())); } self.app.pop_navigation_stack(); @@ -207,7 +216,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for RootFoldersHandler<' if key == DEFAULT_KEYBINDINGS.confirm.key { self.app.data.radarr_data.prompt_confirm = true; self.app.data.radarr_data.prompt_confirm_action = - Some(RadarrEvent::DeleteRootFolder(None)); + Some(RadarrEvent::DeleteRootFolder(self.extract_root_folder_id())); self.app.pop_navigation_stack(); } diff --git a/src/handlers/radarr_handlers/root_folders/root_folders_handler_tests.rs b/src/handlers/radarr_handlers/root_folders/root_folders_handler_tests.rs index 7a38743..205b521 100644 --- a/src/handlers/radarr_handlers/root_folders/root_folders_handler_tests.rs +++ b/src/handlers/radarr_handlers/root_folders/root_folders_handler_tests.rs @@ -1,10 +1,12 @@ #[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::radarr_handler_test_utils::utils::root_folder; use crate::handlers::radarr_handlers::root_folders::RootFoldersHandler; use crate::handlers::KeyEventHandler; use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, ROOT_FOLDERS_BLOCKS}; @@ -315,7 +317,7 @@ mod tests { .data .radarr_data .root_folders - .set_items(vec![RootFolder::default()]); + .set_items(vec![root_folder()]); app.data.radarr_data.prompt_confirm = true; app.push_navigation_stack(ActiveRadarrBlock::RootFolders.into()); app.push_navigation_stack(ActiveRadarrBlock::DeleteRootFolderPrompt.into()); @@ -331,7 +333,7 @@ mod tests { assert!(app.data.radarr_data.prompt_confirm); assert_eq!( app.data.radarr_data.prompt_confirm_action, - Some(RadarrEvent::DeleteRootFolder(None)) + Some(RadarrEvent::DeleteRootFolder(1)) ); assert_eq!( app.get_current_route(), @@ -605,7 +607,7 @@ mod tests { .data .radarr_data .root_folders - .set_items(vec![RootFolder::default()]); + .set_items(vec![root_folder()]); app.push_navigation_stack(ActiveRadarrBlock::RootFolders.into()); app.push_navigation_stack(ActiveRadarrBlock::DeleteRootFolderPrompt.into()); @@ -620,7 +622,7 @@ mod tests { assert!(app.data.radarr_data.prompt_confirm); assert_eq!( app.data.radarr_data.prompt_confirm_action, - Some(RadarrEvent::DeleteRootFolder(None)) + Some(RadarrEvent::DeleteRootFolder(1)) ); assert_eq!( app.get_current_route(), @@ -639,7 +641,7 @@ mod tests { } }) } - + #[test] fn test_build_add_root_folder_body() { let mut app = App::default(); @@ -661,6 +663,21 @@ mod tests { .is_none()); } + #[test] + fn test_extract_root_folder_id() { + let mut app = App::default(); + app.data.radarr_data.root_folders.set_items(vec![root_folder()]); + + let root_folder_id = RootFoldersHandler::with( + DEFAULT_KEYBINDINGS.esc.key, + &mut app, + ActiveRadarrBlock::RootFolders, + None, + ).extract_root_folder_id(); + + assert_eq!(root_folder_id, 1); + } + #[test] fn test_root_folders_handler_not_ready_when_loading() { let mut app = App::default(); diff --git a/src/network/radarr_network.rs b/src/network/radarr_network.rs index 81b5608..8f58b09 100644 --- a/src/network/radarr_network.rs +++ b/src/network/radarr_network.rs @@ -43,7 +43,7 @@ pub enum RadarrEvent { DeleteDownload(i64), DeleteIndexer(i64), DeleteMovie(DeleteMovieParams), - DeleteRootFolder(Option), + DeleteRootFolder(i64), DeleteTag(i64), DownloadRelease(Option), EditAllIndexerSettings(Option), @@ -469,30 +469,16 @@ impl<'a, 'b> Network<'a, 'b> { resp } - async fn delete_radarr_root_folder(&mut self, root_folder_id: Option) -> Result<()> { - let event = RadarrEvent::DeleteRootFolder(None); - let id = if let Some(rf_id) = root_folder_id { - rf_id - } else { - self - .app - .lock() - .await - .data - .radarr_data - .root_folders - .current_selection() - .id - }; - - info!("Deleting Radarr root folder for folder with id: {id}"); + async fn delete_radarr_root_folder(&mut self, root_folder_id: i64) -> Result<()> { + let event = RadarrEvent::DeleteRootFolder(root_folder_id); + info!("Deleting Radarr root folder for folder with id: {root_folder_id}"); let request_props = self .request_props_from( event, RequestMethod::Delete, None::<()>, - Some(format!("/{id}")), + Some(format!("/{root_folder_id}")), None, ) .await; diff --git a/src/network/radarr_network_tests.rs b/src/network/radarr_network_tests.rs index 40dc436..777c0e3 100644 --- a/src/network/radarr_network_tests.rs +++ b/src/network/radarr_network_tests.rs @@ -158,7 +158,7 @@ mod test { #[values( RadarrEvent::AddRootFolder(AddRootFolderBody::default()), RadarrEvent::GetRootFolders, - RadarrEvent::DeleteRootFolder(None) + RadarrEvent::DeleteRootFolder(0) )] event: RadarrEvent, ) { @@ -3232,36 +3232,7 @@ mod test { None, None, None, - RadarrEvent::DeleteRootFolder(None), - Some("/1"), - None, - ) - .await; - app_arc - .lock() - .await - .data - .radarr_data - .root_folders - .set_items(vec![root_folder()]); - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - assert!(network - .handle_radarr_event(RadarrEvent::DeleteRootFolder(None)) - .await - .is_ok()); - - async_server.assert_async().await; - } - - #[tokio::test] - async fn test_handle_delete_radarr_root_folder_event_uses_provided_id() { - let (async_server, app_arc, _server) = mock_servarr_api( - RequestMethod::Delete, - None, - None, - None, - RadarrEvent::DeleteRootFolder(None), + RadarrEvent::DeleteRootFolder(1), Some("/1"), None, ) @@ -3269,7 +3240,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); assert!(network - .handle_radarr_event(RadarrEvent::DeleteRootFolder(Some(1))) + .handle_radarr_event(RadarrEvent::DeleteRootFolder(1)) .await .is_ok());