diff --git a/src/cli/sonarr/edit_command_handler.rs b/src/cli/sonarr/edit_command_handler.rs index cd2becf..05d3716 100644 --- a/src/cli/sonarr/edit_command_handler.rs +++ b/src/cli/sonarr/edit_command_handler.rs @@ -274,7 +274,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, SonarrEditCommand> for SonarrEditCommandH }; self .network - .handle_network_event(SonarrEvent::EditAllIndexerSettings(Some(params)).into()) + .handle_network_event(SonarrEvent::EditAllIndexerSettings(params).into()) .await?; "All indexer settings updated".to_owned() } else { diff --git a/src/cli/sonarr/edit_command_handler_tests.rs b/src/cli/sonarr/edit_command_handler_tests.rs index 4e146a3..9d2a429 100644 --- a/src/cli/sonarr/edit_command_handler_tests.rs +++ b/src/cli/sonarr/edit_command_handler_tests.rs @@ -650,7 +650,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - SonarrEvent::EditAllIndexerSettings(Some(expected_edit_all_indexer_settings)).into(), + SonarrEvent::EditAllIndexerSettings(expected_edit_all_indexer_settings).into(), )) .times(1) .returning(|_| { diff --git a/src/cli/sonarr/sonarr_command_tests.rs b/src/cli/sonarr/sonarr_command_tests.rs index e43ac3f..64e5a2c 100644 --- a/src/cli/sonarr/sonarr_command_tests.rs +++ b/src/cli/sonarr/sonarr_command_tests.rs @@ -434,7 +434,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - SonarrEvent::EditAllIndexerSettings(Some(expected_edit_all_indexer_settings)).into(), + SonarrEvent::EditAllIndexerSettings(expected_edit_all_indexer_settings).into(), )) .times(1) .returning(|_| { diff --git a/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler.rs b/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler.rs index 94afa1d..31ea228 100644 --- a/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler.rs +++ b/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler.rs @@ -6,6 +6,7 @@ use crate::handlers::{handle_prompt_toggle, KeyEventHandler}; use crate::models::servarr_data::sonarr::sonarr_data::{ ActiveSonarrBlock, INDEXER_SETTINGS_BLOCKS, }; +use crate::models::sonarr_models::IndexerSettings; use crate::network::sonarr_network::SonarrEvent; #[cfg(test)] @@ -19,6 +20,23 @@ pub(super) struct IndexerSettingsHandler<'a, 'b> { _context: Option, } +impl<'a, 'b> IndexerSettingsHandler<'a, 'b> { + fn build_edit_indexer_settings_params(&mut self) -> IndexerSettings { + let indexer_settings = self + .app + .data + .sonarr_data + .indexer_settings + .as_ref() + .unwrap() + .clone(); + + self.app.data.sonarr_data.indexer_settings = None; + + indexer_settings + } +} + impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for IndexerSettingsHandler<'a, 'b> { fn accepts(active_block: ActiveSonarrBlock) -> bool { INDEXER_SETTINGS_BLOCKS.contains(&active_block) @@ -119,12 +137,13 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for IndexerSettingsHandl ActiveSonarrBlock::AllIndexerSettingsPrompt => { match self.app.data.sonarr_data.selected_block.get_active_block() { ActiveSonarrBlock::IndexerSettingsConfirmPrompt => { - let sonarr_data = &mut self.app.data.sonarr_data; - if sonarr_data.prompt_confirm { - sonarr_data.prompt_confirm_action = Some(SonarrEvent::EditAllIndexerSettings(None)); + if self.app.data.sonarr_data.prompt_confirm { + self.app.data.sonarr_data.prompt_confirm_action = Some( + SonarrEvent::EditAllIndexerSettings(self.build_edit_indexer_settings_params()), + ); self.app.should_refresh = true; } else { - sonarr_data.indexer_settings = None; + self.app.data.sonarr_data.indexer_settings = None; } self.app.pop_navigation_stack(); @@ -172,8 +191,9 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for IndexerSettingsHandl && self.key == DEFAULT_KEYBINDINGS.confirm.key { self.app.data.sonarr_data.prompt_confirm = true; - self.app.data.sonarr_data.prompt_confirm_action = - Some(SonarrEvent::EditAllIndexerSettings(None)); + self.app.data.sonarr_data.prompt_confirm_action = Some(SonarrEvent::EditAllIndexerSettings( + self.build_edit_indexer_settings_params(), + )); self.app.should_refresh = true; self.app.pop_navigation_stack(); diff --git a/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler_tests.rs b/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler_tests.rs index 8301125..ef33b99 100644 --- a/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_handler_tests.rs +++ b/src/handlers/sonarr_handlers/indexers/edit_indexer_settings_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::sonarr_handlers::indexers::edit_indexer_settings_handler::IndexerSettingsHandler; + use crate::handlers::sonarr_handlers::sonarr_handler_test_utils::utils::indexer_settings; use crate::handlers::KeyEventHandler; use crate::models::servarr_data::sonarr::sonarr_data::{ ActiveSonarrBlock, INDEXER_SETTINGS_BLOCKS, @@ -285,7 +287,7 @@ mod tests { .sonarr_data .selected_block .set_index(0, INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1); - app.data.sonarr_data.indexer_settings = Some(IndexerSettings::default()); + app.data.sonarr_data.indexer_settings = Some(indexer_settings()); app.data.sonarr_data.prompt_confirm = true; IndexerSettingsHandler::with( @@ -299,9 +301,9 @@ mod tests { assert_eq!(app.get_current_route(), ActiveSonarrBlock::Indexers.into()); assert_eq!( app.data.sonarr_data.prompt_confirm_action, - Some(SonarrEvent::EditAllIndexerSettings(None)) + Some(SonarrEvent::EditAllIndexerSettings(indexer_settings())) ); - assert!(app.data.sonarr_data.indexer_settings.is_some()); + assert!(app.data.sonarr_data.indexer_settings.is_none()); assert!(app.should_refresh); } @@ -468,11 +470,11 @@ mod tests { mod test_handle_key_char { use crate::{ models::{ - servarr_data::sonarr::sonarr_data::INDEXER_SETTINGS_SELECTION_BLOCKS, - sonarr_models::IndexerSettings, BlockSelectionState, + servarr_data::sonarr::sonarr_data::INDEXER_SETTINGS_SELECTION_BLOCKS, BlockSelectionState, }, network::sonarr_network::SonarrEvent, }; + use pretty_assertions::assert_eq; use super::*; @@ -488,7 +490,7 @@ mod tests { .sonarr_data .selected_block .set_index(0, INDEXER_SETTINGS_SELECTION_BLOCKS.len() - 1); - app.data.sonarr_data.indexer_settings = Some(IndexerSettings::default()); + app.data.sonarr_data.indexer_settings = Some(indexer_settings()); IndexerSettingsHandler::with( DEFAULT_KEYBINDINGS.confirm.key, @@ -501,9 +503,9 @@ mod tests { assert_eq!(app.get_current_route(), ActiveSonarrBlock::Indexers.into()); assert_eq!( app.data.sonarr_data.prompt_confirm_action, - Some(SonarrEvent::EditAllIndexerSettings(None)) + Some(SonarrEvent::EditAllIndexerSettings(indexer_settings())) ); - assert!(app.data.sonarr_data.indexer_settings.is_some()); + assert!(app.data.sonarr_data.indexer_settings.is_none()); assert!(app.should_refresh); } } @@ -519,6 +521,23 @@ mod tests { }) } + #[test] + fn test_build_edit_indexer_settings_params() { + let mut app = App::default(); + app.data.sonarr_data.indexer_settings = Some(indexer_settings()); + + let actual_indexer_settings = IndexerSettingsHandler::with( + DEFAULT_KEYBINDINGS.esc.key, + &mut app, + ActiveSonarrBlock::AllIndexerSettingsPrompt, + None, + ) + .build_edit_indexer_settings_params(); + + assert_eq!(actual_indexer_settings, indexer_settings()); + assert!(app.data.sonarr_data.indexer_settings.is_none()); + } + #[test] fn test_edit_indexer_settings_handler_not_ready_when_loading() { let mut app = App::default(); diff --git a/src/network/sonarr_network.rs b/src/network/sonarr_network.rs index 80b6619..6be7dae 100644 --- a/src/network/sonarr_network.rs +++ b/src/network/sonarr_network.rs @@ -50,7 +50,7 @@ pub enum SonarrEvent { DeleteSeries(DeleteSeriesParams), DeleteTag(i64), DownloadRelease(SonarrReleaseDownloadBody), - EditAllIndexerSettings(Option), + EditAllIndexerSettings(IndexerSettings), EditIndexer(Option), EditSeries(Option), GetAllIndexerSettings, @@ -622,41 +622,18 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn edit_all_sonarr_indexer_settings( - &mut self, - params: Option, - ) -> Result { + async fn edit_all_sonarr_indexer_settings(&mut self, params: IndexerSettings) -> Result { info!("Updating Sonarr indexer settings"); - let event = SonarrEvent::EditAllIndexerSettings(None); - - let body = if let Some(indexer_settings) = params { - indexer_settings - } else { - self - .app - .lock() - .await - .data - .sonarr_data - .indexer_settings - .as_ref() - .unwrap() - .clone() - }; - - debug!("Indexer settings body: {body:?}"); + let event = SonarrEvent::EditAllIndexerSettings(params.clone()); + debug!("Indexer settings body: {params:?}"); let request_props = self - .request_props_from(event, RequestMethod::Put, Some(body), None, None) + .request_props_from(event, RequestMethod::Put, Some(params), None, None) .await; - let resp = self + self .handle_request::(request_props, |_, _| {}) - .await; - - self.app.lock().await.data.sonarr_data.indexer_settings = None; - - resp + .await } async fn edit_sonarr_indexer( diff --git a/src/network/sonarr_network_tests.rs b/src/network/sonarr_network_tests.rs index 7cc1dfc..638d576 100644 --- a/src/network/sonarr_network_tests.rs +++ b/src/network/sonarr_network_tests.rs @@ -141,7 +141,7 @@ mod test { fn test_resource_all_indexer_settings( #[values( SonarrEvent::GetAllIndexerSettings, - SonarrEvent::EditAllIndexerSettings(None) + SonarrEvent::EditAllIndexerSettings(IndexerSettings::default()) )] event: SonarrEvent, ) { @@ -758,45 +758,7 @@ mod test { Some(indexer_settings_json), None, None, - SonarrEvent::EditAllIndexerSettings(None), - None, - None, - ) - .await; - - app_arc.lock().await.data.sonarr_data.indexer_settings = Some(indexer_settings()); - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - assert!(network - .handle_sonarr_event(SonarrEvent::EditAllIndexerSettings(None)) - .await - .is_ok()); - - async_server.assert_async().await; - assert!(app_arc - .lock() - .await - .data - .sonarr_data - .indexer_settings - .is_none()); - } - - #[tokio::test] - async fn test_handle_edit_all_indexer_settings_event_uses_provided_settings() { - let indexer_settings_json = json!({ - "id": 1, - "minimumAge": 1, - "maximumSize": 12345, - "retention": 1, - "rssSyncInterval": 60 - }); - let (async_server, app_arc, _server) = mock_servarr_api( - RequestMethod::Put, - Some(indexer_settings_json), - None, - None, - SonarrEvent::EditAllIndexerSettings(None), + SonarrEvent::EditAllIndexerSettings(indexer_settings()), None, None, ) @@ -805,9 +767,7 @@ mod test { let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); assert!(network - .handle_sonarr_event(SonarrEvent::EditAllIndexerSettings( - Some(indexer_settings()) - )) + .handle_sonarr_event(SonarrEvent::EditAllIndexerSettings(indexer_settings())) .await .is_ok());