diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 312ae4a..5bb1983 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -374,6 +374,19 @@ mod test_utils { } }; } + + #[macro_export] + macro_rules! test_handler_delegation { + ($base:expr, $active_block:expr) => { + let mut app = App::default(); + app.push_navigation_stack($base.clone().into()); + app.push_navigation_stack($active_block.clone().into()); + + RadarrHandler::with(&DEFAULT_KEYBINDINGS.esc.key, &mut app, &$active_block).handle(); + + assert_eq!(app.get_current_route(), &$base.into()); + }; + } } #[cfg(test)] mod tests { diff --git a/src/handlers/radarr_handlers/add_movie_handler.rs b/src/handlers/radarr_handlers/add_movie_handler.rs index 281e609..7cb5dba 100644 --- a/src/handlers/radarr_handlers/add_movie_handler.rs +++ b/src/handlers/radarr_handlers/add_movie_handler.rs @@ -385,7 +385,7 @@ mod tests { ); } - mod test_left_right_action { + mod test_handle_left_right_action { use rstest::rstest; use super::*; @@ -404,7 +404,7 @@ mod tests { } } - mod test_submit { + mod test_handle_submit { use std::collections::HashMap; use pretty_assertions::{assert_eq, assert_str_eq}; @@ -547,7 +547,7 @@ mod tests { } } - mod test_esc { + mod test_handle_esc { use pretty_assertions::assert_eq; use rstest::rstest; @@ -560,7 +560,7 @@ mod tests { const ESC_KEY: Key = DEFAULT_KEYBINDINGS.esc.key; #[test] - fn test_esc_add_movie_search_input() { + fn test_add_movie_search_input_esc() { let mut radarr_data = RadarrData { is_searching: true, search: "test search".to_owned(), @@ -594,7 +594,7 @@ mod tests { } #[test] - fn test_esc_add_movie_search_results() { + fn test_add_movie_search_results_esc() { let mut app = App::default(); app.push_navigation_stack(ActiveRadarrBlock::AddMovieSearchInput.into()); app.push_navigation_stack(ActiveRadarrBlock::AddMovieSearchResults.into()); @@ -623,7 +623,7 @@ mod tests { } #[test] - fn test_esc_add_movie_prompt() { + fn test_add_movie_prompt_esc() { let mut radarr_data = RadarrData::default(); radarr_data .add_movie_monitor_list @@ -663,7 +663,7 @@ mod tests { } #[rstest] - fn test_esc_selecting_preferences_blocks( + fn test_selecting_preferences_blocks_esc( #[values( ActiveRadarrBlock::AddMovieSelectMonitor, ActiveRadarrBlock::AddMovieSelectMinimumAvailability, @@ -684,11 +684,11 @@ mod tests { } } - mod test_key_char { + mod test_handle_key_char { use super::*; #[test] - fn test_backspace_add_movie_search_input() { + fn test_add_movie_search_input_backspace() { let mut app = App::default(); app.data.radarr_data.search = "Test".to_owned(); @@ -703,7 +703,7 @@ mod tests { } #[test] - fn test_char_key_add_movie_search_input() { + fn test_add_movie_search_input_char_key() { let mut app = App::default(); AddMovieHandler::with( diff --git a/src/handlers/radarr_handlers/collection_details_handler.rs b/src/handlers/radarr_handlers/collection_details_handler.rs index ac153d0..fbc246b 100644 --- a/src/handlers/radarr_handlers/collection_details_handler.rs +++ b/src/handlers/radarr_handlers/collection_details_handler.rs @@ -81,3 +81,114 @@ impl<'a> KeyEventHandler<'a, ActiveRadarrBlock> for CollectionDetailsHandler<'a> fn handle_char_key_event(&mut self) {} } + +#[cfg(test)] +mod tests { + use pretty_assertions::assert_str_eq; + + use crate::app::key_binding::DEFAULT_KEYBINDINGS; + use crate::app::radarr::ActiveRadarrBlock; + use crate::app::App; + use crate::event::Key; + use crate::handlers::radarr_handlers::collection_details_handler::CollectionDetailsHandler; + use crate::handlers::KeyEventHandler; + use crate::models::radarr_models::CollectionMovie; + + mod test_handle_scroll_up_and_down { + use rstest::rstest; + + use crate::{simple_stateful_iterable_vec, test_iterable_scroll}; + + use super::*; + + test_iterable_scroll!( + test_collection_details_scroll, + CollectionDetailsHandler, + collection_movies, + CollectionMovie, + ActiveRadarrBlock::CollectionDetails, + title + ); + } + + mod test_handle_home_end { + use crate::{extended_stateful_iterable_vec, test_iterable_home_and_end}; + + use super::*; + + test_iterable_home_and_end!( + test_collection_details_home_end, + CollectionDetailsHandler, + collection_movies, + CollectionMovie, + ActiveRadarrBlock::CollectionDetails, + title + ); + } + + mod test_handle_submit { + use pretty_assertions::assert_eq; + + use super::*; + + const SUBMIT_KEY: Key = DEFAULT_KEYBINDINGS.submit.key; + + #[test] + fn test_collection_details_submit() { + let mut app = App::default(); + app.push_navigation_stack(ActiveRadarrBlock::CollectionDetails.into()); + + CollectionDetailsHandler::with(&SUBMIT_KEY, &mut app, &ActiveRadarrBlock::CollectionDetails) + .handle(); + + assert_eq!( + app.get_current_route(), + &ActiveRadarrBlock::ViewMovieOverview.into() + ); + } + } + + mod test_handle_esc { + use pretty_assertions::assert_eq; + + use super::*; + + const ESC_KEY: Key = DEFAULT_KEYBINDINGS.esc.key; + + #[test] + fn test_esc_collection_details() { + let mut app = App::default(); + app.push_navigation_stack(ActiveRadarrBlock::Collections.into()); + app.push_navigation_stack(ActiveRadarrBlock::CollectionDetails.into()); + app + .data + .radarr_data + .collection_movies + .set_items(vec![CollectionMovie::default()]); + + CollectionDetailsHandler::with(&ESC_KEY, &mut app, &ActiveRadarrBlock::CollectionDetails) + .handle(); + + assert_eq!( + app.get_current_route(), + &ActiveRadarrBlock::Collections.into() + ); + assert!(app.data.radarr_data.collection_movies.items.is_empty()); + } + + #[test] + fn test_esc_view_movie_overview() { + let mut app = App::default(); + app.push_navigation_stack(ActiveRadarrBlock::CollectionDetails.into()); + app.push_navigation_stack(ActiveRadarrBlock::ViewMovieOverview.into()); + + CollectionDetailsHandler::with(&ESC_KEY, &mut app, &ActiveRadarrBlock::ViewMovieOverview) + .handle(); + + assert_eq!( + app.get_current_route(), + &ActiveRadarrBlock::CollectionDetails.into() + ); + } + } +} diff --git a/src/handlers/radarr_handlers/mod.rs b/src/handlers/radarr_handlers/mod.rs index 8b95005..a572348 100644 --- a/src/handlers/radarr_handlers/mod.rs +++ b/src/handlers/radarr_handlers/mod.rs @@ -503,10 +503,10 @@ mod tests { use crate::app::radarr::ActiveRadarrBlock; use crate::app::App; use crate::event::Key; - use crate::extended_stateful_iterable_vec; use crate::handlers::radarr_handlers::RadarrHandler; use crate::handlers::KeyEventHandler; use crate::models::radarr_models::{Collection, Movie}; + use crate::{extended_stateful_iterable_vec, test_handler_delegation}; mod test_handle_scroll_up_and_down { use rstest::rstest; @@ -614,7 +614,7 @@ mod tests { ); } - mod test_delete { + mod test_handle_delete { use pretty_assertions::assert_eq; use super::*; @@ -646,7 +646,7 @@ mod tests { } } - mod test_left_right_action { + mod test_handle_left_right_action { use pretty_assertions::assert_eq; use rstest::rstest; @@ -656,7 +656,7 @@ mod tests { #[case(ActiveRadarrBlock::Movies, 0, ActiveRadarrBlock::Collections)] #[case(ActiveRadarrBlock::Downloads, 1, ActiveRadarrBlock::Movies)] #[case(ActiveRadarrBlock::Collections, 2, ActiveRadarrBlock::Downloads)] - fn test_left_movies_downloads_collections( + fn test_movies_downloads_collections_left( #[case] active_radarr_block: ActiveRadarrBlock, #[case] index: usize, #[case] expected_radarr_block: ActiveRadarrBlock, @@ -682,7 +682,7 @@ mod tests { #[case(ActiveRadarrBlock::Movies, 0, ActiveRadarrBlock::Downloads)] #[case(ActiveRadarrBlock::Downloads, 1, ActiveRadarrBlock::Collections)] #[case(ActiveRadarrBlock::Collections, 2, ActiveRadarrBlock::Movies)] - fn test_right_movie_downloads_collections( + fn test_movie_downloads_collections_right( #[case] active_radarr_block: ActiveRadarrBlock, #[case] index: usize, #[case] expected_radarr_block: ActiveRadarrBlock, @@ -728,7 +728,7 @@ mod tests { } } - mod test_submit { + mod test_handle_submit { use pretty_assertions::assert_eq; use rstest::rstest; @@ -741,7 +741,7 @@ mod tests { #[rstest] #[case(ActiveRadarrBlock::Movies, ActiveRadarrBlock::MovieDetails)] #[case(ActiveRadarrBlock::Collections, ActiveRadarrBlock::CollectionDetails)] - fn test_submit_movies_collections_details( + fn test_movies_collections_details_submit( #[case] active_radarr_block: ActiveRadarrBlock, #[case] expected_radarr_block: ActiveRadarrBlock, ) { @@ -753,7 +753,7 @@ mod tests { } #[test] - fn test_submit_search_movie() { + fn test_search_movie_submit() { let mut app = App::default(); app .data @@ -771,7 +771,7 @@ mod tests { } #[test] - fn test_submit_search_collections() { + fn test_search_collections_submit() { let mut app = App::default(); app .data @@ -789,7 +789,7 @@ mod tests { } #[test] - fn test_submit_filter_movies() { + fn test_filter_movies_submit() { let mut app = App::default(); app .data @@ -813,7 +813,7 @@ mod tests { } #[test] - fn test_submit_filter_collections() { + fn test_filter_collections_submit() { let mut app = App::default(); app .data @@ -862,7 +862,7 @@ mod tests { ActiveRadarrBlock::RefreshAllCollectionsPrompt, RadarrEvent::RefreshCollections )] - fn test_submit_prompt_confirm( + fn test_prompt_confirm_submit( #[case] base_route: ActiveRadarrBlock, #[case] prompt_block: ActiveRadarrBlock, #[case] expected_action: RadarrEvent, @@ -894,7 +894,7 @@ mod tests { ActiveRadarrBlock::Collections, ActiveRadarrBlock::RefreshAllCollectionsPrompt )] - fn test_submit_prompt_decline( + fn test_prompt_decline_submit( #[case] base_route: ActiveRadarrBlock, #[case] prompt_block: ActiveRadarrBlock, ) { @@ -910,7 +910,7 @@ mod tests { } } - mod test_esc { + mod test_handle_esc { use pretty_assertions::assert_eq; use rstest::rstest; @@ -926,7 +926,7 @@ mod tests { #[case(ActiveRadarrBlock::Movies, ActiveRadarrBlock::FilterMovies)] #[case(ActiveRadarrBlock::Collections, ActiveRadarrBlock::SearchCollection)] #[case(ActiveRadarrBlock::Collections, ActiveRadarrBlock::FilterCollections)] - fn test_esc_search_and_filter_blocks( + fn test_search_and_filter_blocks_esc( #[case] base_block: ActiveRadarrBlock, #[case] search_block: ActiveRadarrBlock, ) { @@ -975,7 +975,7 @@ mod tests { ActiveRadarrBlock::Collections, ActiveRadarrBlock::RefreshAllCollectionsPrompt )] - fn test_esc_prompt_blocks( + fn test_prompt_blocks_esc( #[case] base_block: ActiveRadarrBlock, #[case] prompt_block: ActiveRadarrBlock, ) { @@ -991,7 +991,7 @@ mod tests { } #[test] - fn test_esc_default() { + fn test_default_esc() { let mut app = App::default(); app.error = "test error".to_owned().into(); app.push_navigation_stack(ActiveRadarrBlock::Downloads.into()); @@ -1029,7 +1029,7 @@ mod tests { } } - mod test_key_char { + mod test_handle_key_char { use pretty_assertions::assert_eq; use rstest::rstest; @@ -1124,7 +1124,7 @@ mod tests { } #[rstest] - fn test_backspace_key_search_boxes( + fn test_search_boxes_backspace_key( #[values(ActiveRadarrBlock::SearchMovie, ActiveRadarrBlock::SearchCollection)] active_radarr_block: ActiveRadarrBlock, ) { @@ -1142,7 +1142,7 @@ mod tests { } #[rstest] - fn test_backspace_key_filter_boxes( + fn test_filter_boxes_backspace_key( #[values(ActiveRadarrBlock::FilterMovies, ActiveRadarrBlock::FilterCollections)] active_radarr_block: ActiveRadarrBlock, ) { @@ -1160,7 +1160,7 @@ mod tests { } #[rstest] - fn test_char_key_search_boxes( + fn test_search_boxes_char_key( #[values(ActiveRadarrBlock::SearchMovie, ActiveRadarrBlock::SearchCollection)] active_radarr_block: ActiveRadarrBlock, ) { @@ -1172,7 +1172,7 @@ mod tests { } #[rstest] - fn test_char_key_filter_boxes( + fn test_filter_boxes_char_key( #[values(ActiveRadarrBlock::FilterMovies, ActiveRadarrBlock::FilterCollections)] active_radarr_block: ActiveRadarrBlock, ) { @@ -1319,11 +1319,17 @@ mod tests { )] active_radarr_block: ActiveRadarrBlock, ) { - let mut app = App::default(); - app.push_navigation_stack(active_radarr_block.clone().into()); + test_handler_delegation!(ActiveRadarrBlock::Movies, active_radarr_block); + } - RadarrHandler::with(&DEFAULT_KEYBINDINGS.esc.key, &mut app, &active_radarr_block).handle(); - - assert_eq!(app.get_current_route(), &ActiveRadarrBlock::Movies.into()); + #[rstest] + fn test_delegate_collection_details_blocks_to_collection_details_handler( + #[values( + ActiveRadarrBlock::CollectionDetails, + ActiveRadarrBlock::ViewMovieOverview + )] + active_radarr_block: ActiveRadarrBlock, + ) { + test_handler_delegation!(ActiveRadarrBlock::Collections, active_radarr_block); } }