diff --git a/src/handlers/sonarr_handlers/library/season_details_handler.rs b/src/handlers/sonarr_handlers/library/season_details_handler.rs index 6b159c9..a04d288 100644 --- a/src/handlers/sonarr_handlers/library/season_details_handler.rs +++ b/src/handlers/sonarr_handlers/library/season_details_handler.rs @@ -338,6 +338,13 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveSonarrBlock> for SeasonDetailsHandler fn handle_char_key_event(&mut self) { let key = self.key; match self.active_sonarr_block { + ActiveSonarrBlock::SeasonDetails if self.key == DEFAULT_KEYBINDINGS.toggle_monitoring.key => { + self.app.data.sonarr_data.prompt_confirm = true; + self.app.data.sonarr_data.prompt_confirm_action = + Some(SonarrEvent::ToggleEpisodeMonitoring(None)); + + self.app.pop_and_push_navigation_stack(self.active_sonarr_block.into()); + } ActiveSonarrBlock::SeasonDetails | ActiveSonarrBlock::SeasonHistory | ActiveSonarrBlock::ManualSeasonSearch => match self.key { diff --git a/src/handlers/sonarr_handlers/library/season_details_handler_tests.rs b/src/handlers/sonarr_handlers/library/season_details_handler_tests.rs index 8ad0954..aabf913 100644 --- a/src/handlers/sonarr_handlers/library/season_details_handler_tests.rs +++ b/src/handlers/sonarr_handlers/library/season_details_handler_tests.rs @@ -546,6 +546,54 @@ mod tests { use crate::network::sonarr_network::SonarrEvent; use pretty_assertions::assert_eq; + #[test] + fn test_toggle_monitoring_key() { + let mut app = App::default(); + app.data.sonarr_data = create_test_sonarr_data(); + app.push_navigation_stack(ActiveSonarrBlock::SeasonDetails.into()); + app.is_routing = false; + + SeasonDetailsHandler::with( + DEFAULT_KEYBINDINGS.toggle_monitoring.key, + &mut app, + ActiveSonarrBlock::SeasonDetails, + None, + ) + .handle(); + + assert_eq!( + app.get_current_route(), + ActiveSonarrBlock::SeasonDetails.into() + ); + assert!(app.data.sonarr_data.prompt_confirm); + assert!(app.is_routing); + assert_eq!( + app.data.sonarr_data.prompt_confirm_action, + Some(SonarrEvent::ToggleEpisodeMonitoring(None)) + ); + } + + #[test] + fn test_toggle_monitoring_key_no_op_when_not_ready() { + let mut app = App::default(); + app.is_loading = true; + app.push_navigation_stack(ActiveSonarrBlock::SeasonDetails.into()); + app.is_routing = false; + + SeasonDetailsHandler::with( + DEFAULT_KEYBINDINGS.toggle_monitoring.key, + &mut app, + ActiveSonarrBlock::SeasonDetails, + None, + ) + .handle(); + + assert_eq!(app.get_current_route(), ActiveSonarrBlock::SeasonDetails.into()); + assert!(!app.data.sonarr_data.prompt_confirm); + assert!(app.data.sonarr_data.prompt_confirm_action.is_none()); + assert!(!app.is_routing); + } + #[rstest] fn test_auto_search_key( #[values( diff --git a/src/handlers/sonarr_handlers/library/series_details_handler_tests.rs b/src/handlers/sonarr_handlers/library/series_details_handler_tests.rs index 20437ee..56210fb 100644 --- a/src/handlers/sonarr_handlers/library/series_details_handler_tests.rs +++ b/src/handlers/sonarr_handlers/library/series_details_handler_tests.rs @@ -378,9 +378,7 @@ mod tests { #[test] fn test_toggle_monitoring_key() { let mut app = App::default(); - let mut series_history = StatefulTable::default(); - series_history.set_items(vec![SonarrHistoryItem::default()]); - app.data.sonarr_data.series_history = Some(series_history); + app.data.sonarr_data = create_test_sonarr_data(); app.push_navigation_stack(ActiveSonarrBlock::SeriesDetails.into()); app.is_routing = false;