From d73dfb9fc757917463a75bef52a02dc3aa5cc99a Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Tue, 17 Dec 2024 15:21:34 -0700 Subject: [PATCH] fix: Pass the indexer ID in with the DeleteIndexer event when sending to the networking channel --- src/cli/radarr/delete_command_handler.rs | 2 +- .../radarr/delete_command_handler_tests.rs | 2 +- .../indexers/indexers_handler_tests.rs | 33 +++++++++++---- src/handlers/radarr_handlers/indexers/mod.rs | 15 ++++++- src/network/radarr_network.rs | 24 +++-------- src/network/radarr_network_tests.rs | 40 +++---------------- 6 files changed, 50 insertions(+), 66 deletions(-) diff --git a/src/cli/radarr/delete_command_handler.rs b/src/cli/radarr/delete_command_handler.rs index 3044a8e..769da06 100644 --- a/src/cli/radarr/delete_command_handler.rs +++ b/src/cli/radarr/delete_command_handler.rs @@ -103,7 +103,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrDeleteCommand> for RadarrDeleteComm RadarrDeleteCommand::Indexer { indexer_id } => { let resp = self .network - .handle_network_event(RadarrEvent::DeleteIndexer(Some(indexer_id)).into()) + .handle_network_event(RadarrEvent::DeleteIndexer(indexer_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 590a28c..184a9b9 100644 --- a/src/cli/radarr/delete_command_handler_tests.rs +++ b/src/cli/radarr/delete_command_handler_tests.rs @@ -325,7 +325,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - RadarrEvent::DeleteIndexer(Some(expected_indexer_id)).into(), + RadarrEvent::DeleteIndexer(expected_indexer_id).into(), )) .times(1) .returning(|_| { diff --git a/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs b/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs index 5f070a7..e441997 100644 --- a/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs +++ b/src/handlers/radarr_handlers/indexers/indexers_handler_tests.rs @@ -1,5 +1,6 @@ #[cfg(test)] mod tests { + use pretty_assertions::assert_eq; use rstest::rstest; use strum::IntoEnumIterator; @@ -7,6 +8,7 @@ mod tests { use crate::app::App; use crate::event::Key; use crate::handlers::radarr_handlers::indexers::IndexersHandler; + use crate::handlers::radarr_handlers::radarr_handler_test_utils::utils::indexer; use crate::handlers::KeyEventHandler; use crate::models::servarr_data::radarr::radarr_data::{ ActiveRadarrBlock, EDIT_INDEXER_BLOCKS, INDEXERS_BLOCKS, INDEXER_SETTINGS_BLOCKS, @@ -123,17 +125,17 @@ mod tests { } mod test_handle_submit { + use crate::handlers::radarr_handlers::radarr_handler_test_utils::utils::indexer; use crate::models::servarr_data::modals::EditIndexerModal; use crate::models::servarr_data::radarr::radarr_data::{ RadarrData, EDIT_INDEXER_NZB_SELECTION_BLOCKS, EDIT_INDEXER_TORRENT_SELECTION_BLOCKS, }; use crate::models::servarr_models::{Indexer, IndexerField}; + use crate::network::radarr_network::RadarrEvent; use bimap::BiMap; use pretty_assertions::assert_eq; use serde_json::{Number, Value}; - use crate::network::radarr_network::RadarrEvent; - use super::*; const SUBMIT_KEY: Key = DEFAULT_KEYBINDINGS.submit.key; @@ -243,7 +245,7 @@ mod tests { .data .radarr_data .indexers - .set_items(vec![Indexer::default()]); + .set_items(vec![indexer()]); app.data.radarr_data.prompt_confirm = true; app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::DeleteIndexerPrompt.into()); @@ -259,7 +261,7 @@ mod tests { assert!(app.data.radarr_data.prompt_confirm); assert_eq!( app.data.radarr_data.prompt_confirm_action, - Some(RadarrEvent::DeleteIndexer(None)) + Some(RadarrEvent::DeleteIndexer(1)) ); assert_eq!(app.get_current_route(), ActiveRadarrBlock::Indexers.into()); } @@ -348,13 +350,13 @@ mod tests { mod test_handle_key_char { use pretty_assertions::assert_eq; + use super::*; + use crate::handlers::radarr_handlers::radarr_handler_test_utils::utils::indexer; use crate::{ models::servarr_data::radarr::radarr_data::INDEXER_SETTINGS_SELECTION_BLOCKS, network::radarr_network::RadarrEvent, }; - use super::*; - #[test] fn test_refresh_indexers_key() { let mut app = App::default(); @@ -546,7 +548,7 @@ mod tests { .data .radarr_data .indexers - .set_items(vec![Indexer::default()]); + .set_items(vec![indexer()]); app.push_navigation_stack(ActiveRadarrBlock::Indexers.into()); app.push_navigation_stack(ActiveRadarrBlock::DeleteIndexerPrompt.into()); @@ -561,7 +563,7 @@ mod tests { assert!(app.data.radarr_data.prompt_confirm); assert_eq!( app.data.radarr_data.prompt_confirm_action, - Some(RadarrEvent::DeleteIndexer(None)) + Some(RadarrEvent::DeleteIndexer(1)) ); assert_eq!(app.get_current_route(), ActiveRadarrBlock::Indexers.into()); } @@ -639,6 +641,21 @@ mod tests { }) } + #[test] + fn test_extract_indexer_id() { + let mut app = App::default(); + app.data.radarr_data.indexers.set_items(vec![indexer()]); + + let indexer_id = IndexersHandler::with( + DEFAULT_KEYBINDINGS.esc.key, + &mut app, + ActiveRadarrBlock::Indexers, + None, + ).extract_indexer_id(); + + assert_eq!(indexer_id, 1); + } + #[test] fn test_indexers_handler_not_ready_when_loading() { let mut app = App::default(); diff --git a/src/handlers/radarr_handlers/indexers/mod.rs b/src/handlers/radarr_handlers/indexers/mod.rs index 282e80a..818d95a 100644 --- a/src/handlers/radarr_handlers/indexers/mod.rs +++ b/src/handlers/radarr_handlers/indexers/mod.rs @@ -33,6 +33,16 @@ pub(super) struct IndexersHandler<'a, 'b> { impl<'a, 'b> IndexersHandler<'a, 'b> { handle_table_events!(self, indexers, self.app.data.radarr_data.indexers, Indexer); + + fn extract_indexer_id(&self) -> i64 { + self + .app + .data + .radarr_data + .indexers + .current_selection() + .id + } } impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexersHandler<'a, 'b> { @@ -115,9 +125,10 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexersHandler<'a, fn handle_submit(&mut self) { match self.active_radarr_block { ActiveRadarrBlock::DeleteIndexerPrompt => { + let indexer_id = self.extract_indexer_id(); let radarr_data = &mut self.app.data.radarr_data; if radarr_data.prompt_confirm { - radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteIndexer(None)); + radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteIndexer(indexer_id)); } self.app.pop_navigation_stack(); @@ -189,7 +200,7 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexersHandler<'a, ActiveRadarrBlock::DeleteIndexerPrompt => { if key == DEFAULT_KEYBINDINGS.confirm.key { self.app.data.radarr_data.prompt_confirm = true; - self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteIndexer(None)); + self.app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::DeleteIndexer(self.extract_indexer_id())); self.app.pop_navigation_stack(); } diff --git a/src/network/radarr_network.rs b/src/network/radarr_network.rs index a3696be..8e40d66 100644 --- a/src/network/radarr_network.rs +++ b/src/network/radarr_network.rs @@ -41,7 +41,7 @@ pub enum RadarrEvent { ClearBlocklist, DeleteBlocklistItem(i64), DeleteDownload(i64), - DeleteIndexer(Option), + DeleteIndexer(i64), DeleteMovie(Option), DeleteRootFolder(Option), DeleteTag(i64), @@ -426,30 +426,16 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn delete_radarr_indexer(&mut self, indexer_id: Option) -> Result<()> { - let event = RadarrEvent::DeleteIndexer(None); - let id = if let Some(i_id) = indexer_id { - i_id - } else { - self - .app - .lock() - .await - .data - .radarr_data - .indexers - .current_selection() - .id - }; - - info!("Deleting Radarr indexer for indexer with id: {id}"); + async fn delete_radarr_indexer(&mut self, indexer_id: i64) -> Result<()> { + let event = RadarrEvent::DeleteIndexer(indexer_id); + info!("Deleting Radarr indexer for indexer with id: {indexer_id}"); let request_props = self .request_props_from( event, RequestMethod::Delete, None::<()>, - Some(format!("/{id}")), + Some(format!("/{indexer_id}")), None, ) .await; diff --git a/src/network/radarr_network_tests.rs b/src/network/radarr_network_tests.rs index c7459c6..61a0282 100644 --- a/src/network/radarr_network_tests.rs +++ b/src/network/radarr_network_tests.rs @@ -3,7 +3,7 @@ mod test { use std::sync::Arc; use bimap::BiMap; - use chrono::{DateTime, Utc}; + use chrono::DateTime; use mockito::{Matcher, Server}; use pretty_assertions::{assert_eq, assert_str_eq}; use reqwest::Client; @@ -137,7 +137,7 @@ mod test { #[rstest] fn test_resource_indexer( - #[values(RadarrEvent::GetIndexers, RadarrEvent::DeleteIndexer(None))] event: RadarrEvent, + #[values(RadarrEvent::GetIndexers, RadarrEvent::DeleteIndexer(0))] event: RadarrEvent, ) { assert_str_eq!(event.resource(), "/indexer"); } @@ -325,8 +325,7 @@ mod test { ) .await; let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - let date_time = DateTime::from(DateTime::parse_from_rfc3339("2023-02-25T20:16:43Z").unwrap()) - as DateTime; + let date_time = DateTime::from(DateTime::parse_from_rfc3339("2023-02-25T20:16:43Z").unwrap()); if let RadarrSerdeable::SystemStatus(status) = network .handle_radarr_event(RadarrEvent::GetStatus) @@ -3243,36 +3242,7 @@ mod test { None, None, None, - RadarrEvent::DeleteIndexer(None), - Some("/1"), - None, - ) - .await; - app_arc - .lock() - .await - .data - .radarr_data - .indexers - .set_items(vec![indexer()]); - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - assert!(network - .handle_radarr_event(RadarrEvent::DeleteIndexer(None)) - .await - .is_ok()); - - async_server.assert_async().await; - } - - #[tokio::test] - async fn test_handle_delete_radarr_indexer_event_uses_provided_id() { - let (async_server, app_arc, _server) = mock_servarr_api( - RequestMethod::Delete, - None, - None, - None, - RadarrEvent::DeleteIndexer(None), + RadarrEvent::DeleteIndexer(1), Some("/1"), None, ) @@ -3280,7 +3250,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); assert!(network - .handle_radarr_event(RadarrEvent::DeleteIndexer(Some(1))) + .handle_radarr_event(RadarrEvent::DeleteIndexer(1)) .await .is_ok());