Added tests for the movie_details handler and created some more test utilities and macros
This commit is contained in:
+109
-66
@@ -395,54 +395,20 @@ impl App {
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod radarr_data_tests {
|
||||
use pretty_assertions::assert_eq;
|
||||
#[macro_use]
|
||||
pub mod radarr_test_utils {
|
||||
use crate::app::radarr::RadarrData;
|
||||
use crate::models::radarr_models::{
|
||||
AddMovieSearchResult, Collection, CollectionMovie, Credit, MinimumAvailability, Monitor, Movie,
|
||||
MovieHistoryItem, Release,
|
||||
};
|
||||
use crate::models::ScrollableText;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_reset_movie_collection_table() {
|
||||
let mut radarr_data = RadarrData::default();
|
||||
radarr_data
|
||||
.collection_movies
|
||||
.set_items(vec![CollectionMovie::default()]);
|
||||
|
||||
radarr_data.reset_movie_collection_table();
|
||||
|
||||
assert!(radarr_data.collection_movies.items.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reset_search() {
|
||||
pub fn create_test_radarr_data() -> RadarrData {
|
||||
let mut radarr_data = RadarrData {
|
||||
is_searching: true,
|
||||
search: "test search".to_owned(),
|
||||
filter: "test filter".to_owned(),
|
||||
..RadarrData::default()
|
||||
};
|
||||
radarr_data
|
||||
.filtered_movies
|
||||
.set_items(vec![Movie::default()]);
|
||||
radarr_data
|
||||
.filtered_collections
|
||||
.set_items(vec![Collection::default()]);
|
||||
radarr_data
|
||||
.add_searched_movies
|
||||
.set_items(vec![AddMovieSearchResult::default()]);
|
||||
|
||||
radarr_data.reset_search();
|
||||
|
||||
assert!(!radarr_data.is_searching);
|
||||
assert!(radarr_data.search.is_empty());
|
||||
assert!(radarr_data.filter.is_empty());
|
||||
assert!(radarr_data.filtered_movies.items.is_empty());
|
||||
assert!(radarr_data.filtered_collections.items.is_empty());
|
||||
assert!(radarr_data.add_searched_movies.items.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reset_movie_info_tabs() {
|
||||
let mut radarr_data = RadarrData {
|
||||
file_details: "test file details".to_owned(),
|
||||
audio_details: "test audio details".to_owned(),
|
||||
video_details: "test video details".to_owned(),
|
||||
@@ -458,23 +424,6 @@ mod radarr_data_tests {
|
||||
.movie_releases
|
||||
.set_items(vec![Release::default()]);
|
||||
radarr_data.movie_info_tabs.index = 1;
|
||||
|
||||
radarr_data.reset_movie_info_tabs();
|
||||
|
||||
assert!(radarr_data.file_details.is_empty());
|
||||
assert!(radarr_data.audio_details.is_empty());
|
||||
assert!(radarr_data.video_details.is_empty());
|
||||
assert!(radarr_data.movie_details.get_text().is_empty());
|
||||
assert!(radarr_data.movie_history.items.is_empty());
|
||||
assert!(radarr_data.movie_cast.items.is_empty());
|
||||
assert!(radarr_data.movie_crew.items.is_empty());
|
||||
assert!(radarr_data.movie_releases.items.is_empty());
|
||||
assert_eq!(radarr_data.movie_info_tabs.index, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reset_add_movie_selections() {
|
||||
let mut radarr_data = RadarrData::default();
|
||||
radarr_data
|
||||
.add_movie_monitor_list
|
||||
.set_items(vec![Monitor::default()]);
|
||||
@@ -484,15 +433,109 @@ mod radarr_data_tests {
|
||||
radarr_data
|
||||
.add_movie_quality_profile_list
|
||||
.set_items(vec![String::default()]);
|
||||
radarr_data
|
||||
.filtered_movies
|
||||
.set_items(vec![Movie::default()]);
|
||||
radarr_data
|
||||
.filtered_collections
|
||||
.set_items(vec![Collection::default()]);
|
||||
radarr_data
|
||||
.add_searched_movies
|
||||
.set_items(vec![AddMovieSearchResult::default()]);
|
||||
radarr_data
|
||||
.collection_movies
|
||||
.set_items(vec![CollectionMovie::default()]);
|
||||
|
||||
radarr_data
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! assert_movie_collection_table_reset {
|
||||
($radarr_data:expr) => {
|
||||
assert!($radarr_data.collection_movies.items.is_empty());
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! assert_search_reset {
|
||||
($radarr_data:expr) => {
|
||||
assert!(!$radarr_data.is_searching);
|
||||
assert!($radarr_data.search.is_empty());
|
||||
assert!($radarr_data.filter.is_empty());
|
||||
assert!($radarr_data.filtered_movies.items.is_empty());
|
||||
assert!($radarr_data.filtered_collections.items.is_empty());
|
||||
assert!($radarr_data.add_searched_movies.items.is_empty());
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! assert_movie_info_tabs_reset {
|
||||
($radarr_data:expr) => {
|
||||
assert!($radarr_data.file_details.is_empty());
|
||||
assert!($radarr_data.audio_details.is_empty());
|
||||
assert!($radarr_data.video_details.is_empty());
|
||||
assert!($radarr_data.movie_details.get_text().is_empty());
|
||||
assert!($radarr_data.movie_history.items.is_empty());
|
||||
assert!($radarr_data.movie_cast.items.is_empty());
|
||||
assert!($radarr_data.movie_crew.items.is_empty());
|
||||
assert!($radarr_data.movie_releases.items.is_empty());
|
||||
assert_eq!($radarr_data.movie_info_tabs.index, 0);
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! assert_add_movie_selections_reset {
|
||||
($radarr_data:expr) => {
|
||||
assert!($radarr_data.add_movie_monitor_list.items.is_empty());
|
||||
assert!($radarr_data
|
||||
.add_movie_minimum_availability_list
|
||||
.items
|
||||
.is_empty());
|
||||
assert!($radarr_data.add_movie_quality_profile_list.items.is_empty());
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod radarr_data_tests {
|
||||
use pretty_assertions::assert_eq;
|
||||
|
||||
use crate::app::radarr::radarr_test_utils::create_test_radarr_data;
|
||||
|
||||
#[test]
|
||||
fn test_reset_movie_collection_table() {
|
||||
let mut radarr_data = create_test_radarr_data();
|
||||
|
||||
radarr_data.reset_movie_collection_table();
|
||||
|
||||
assert_movie_collection_table_reset!(radarr_data);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reset_search() {
|
||||
let mut radarr_data = create_test_radarr_data();
|
||||
|
||||
radarr_data.reset_search();
|
||||
|
||||
assert_search_reset!(radarr_data);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reset_movie_info_tabs() {
|
||||
let mut radarr_data = create_test_radarr_data();
|
||||
|
||||
radarr_data.reset_movie_info_tabs();
|
||||
|
||||
assert_movie_info_tabs_reset!(radarr_data);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reset_add_movie_selections() {
|
||||
let mut radarr_data = create_test_radarr_data();
|
||||
|
||||
radarr_data.reset_add_movie_selections();
|
||||
|
||||
assert!(radarr_data.add_movie_monitor_list.items.is_empty());
|
||||
assert!(radarr_data
|
||||
.add_movie_minimum_availability_list
|
||||
.items
|
||||
.is_empty());
|
||||
assert!(radarr_data.add_movie_quality_profile_list.items.is_empty());
|
||||
assert_add_movie_selections_reset!(radarr_data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,6 +109,18 @@ mod test_utils {
|
||||
},
|
||||
]
|
||||
};
|
||||
($name:ident, $title_ident:ident, $field:ident) => {
|
||||
vec![
|
||||
$name {
|
||||
$field: $title_ident::from("Test 1".to_owned()),
|
||||
..$name::default()
|
||||
},
|
||||
$name {
|
||||
$field: $title_ident::from("Test 2".to_owned()),
|
||||
..$name::default()
|
||||
},
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
@@ -145,6 +157,22 @@ mod test_utils {
|
||||
},
|
||||
]
|
||||
};
|
||||
($name:ident, $title_ident:ident, $field:ident) => {
|
||||
vec![
|
||||
$name {
|
||||
$field: $title_ident::from("Test 1".to_owned()),
|
||||
..$name::default()
|
||||
},
|
||||
$name {
|
||||
$field: $title_ident::from("Test 2".to_owned()),
|
||||
..$name::default()
|
||||
},
|
||||
$name {
|
||||
$field: $title_ident::from("Test 3".to_owned()),
|
||||
..$name::default()
|
||||
},
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
|
||||
@@ -551,9 +551,10 @@ mod tests {
|
||||
use pretty_assertions::assert_eq;
|
||||
use rstest::rstest;
|
||||
|
||||
use crate::app::radarr::RadarrData;
|
||||
use crate::models::radarr_models::{Collection, Movie};
|
||||
use crate::simple_stateful_iterable_vec;
|
||||
use crate::app::radarr::radarr_test_utils::create_test_radarr_data;
|
||||
use crate::{
|
||||
assert_add_movie_selections_reset, assert_search_reset, simple_stateful_iterable_vec,
|
||||
};
|
||||
|
||||
use super::*;
|
||||
|
||||
@@ -561,23 +562,8 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_add_movie_search_input_esc() {
|
||||
let mut radarr_data = RadarrData {
|
||||
is_searching: true,
|
||||
search: "test search".to_owned(),
|
||||
filter: "test filter".to_owned(),
|
||||
..RadarrData::default()
|
||||
};
|
||||
radarr_data
|
||||
.filtered_movies
|
||||
.set_items(vec![Movie::default()]);
|
||||
radarr_data
|
||||
.filtered_collections
|
||||
.set_items(vec![Collection::default()]);
|
||||
radarr_data
|
||||
.add_searched_movies
|
||||
.set_items(vec![AddMovieSearchResult::default()]);
|
||||
let mut app = App::default();
|
||||
app.data.radarr_data = radarr_data;
|
||||
app.data.radarr_data = create_test_radarr_data();
|
||||
app.should_ignore_quit_key = true;
|
||||
app.push_navigation_stack(ActiveRadarrBlock::AddMovieSearchInput.into());
|
||||
|
||||
@@ -585,12 +571,7 @@ mod tests {
|
||||
|
||||
assert!(!app.should_ignore_quit_key);
|
||||
assert_eq!(app.get_current_route(), &ActiveRadarrBlock::Movies.into());
|
||||
assert!(!app.data.radarr_data.is_searching);
|
||||
assert!(app.data.radarr_data.search.is_empty());
|
||||
assert!(app.data.radarr_data.filter.is_empty());
|
||||
assert!(app.data.radarr_data.filtered_movies.items.is_empty());
|
||||
assert!(app.data.radarr_data.filtered_collections.items.is_empty());
|
||||
assert!(app.data.radarr_data.add_searched_movies.items.is_empty());
|
||||
assert_search_reset!(app.data.radarr_data);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -624,19 +605,8 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_add_movie_prompt_esc() {
|
||||
let mut radarr_data = RadarrData::default();
|
||||
radarr_data
|
||||
.add_movie_monitor_list
|
||||
.set_items(vec![Monitor::default()]);
|
||||
radarr_data
|
||||
.add_movie_minimum_availability_list
|
||||
.set_items(vec![MinimumAvailability::default()]);
|
||||
radarr_data
|
||||
.add_movie_quality_profile_list
|
||||
.set_items(vec![String::default()]);
|
||||
radarr_data.prompt_confirm = true;
|
||||
let mut app = App::default();
|
||||
app.data.radarr_data = radarr_data;
|
||||
app.data.radarr_data = create_test_radarr_data();
|
||||
app.push_navigation_stack(ActiveRadarrBlock::AddMovieSearchResults.into());
|
||||
app.push_navigation_stack(ActiveRadarrBlock::AddMoviePrompt.into());
|
||||
|
||||
@@ -647,19 +617,7 @@ mod tests {
|
||||
app.get_current_route(),
|
||||
&ActiveRadarrBlock::AddMovieSearchResults.into()
|
||||
);
|
||||
assert!(app.data.radarr_data.add_movie_monitor_list.items.is_empty());
|
||||
assert!(app
|
||||
.data
|
||||
.radarr_data
|
||||
.add_movie_minimum_availability_list
|
||||
.items
|
||||
.is_empty());
|
||||
assert!(app
|
||||
.data
|
||||
.radarr_data
|
||||
.add_movie_quality_profile_list
|
||||
.items
|
||||
.is_empty());
|
||||
assert_add_movie_selections_reset!(app.data.radarr_data);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
|
||||
@@ -914,8 +914,8 @@ mod tests {
|
||||
use pretty_assertions::assert_eq;
|
||||
use rstest::rstest;
|
||||
|
||||
use crate::app::radarr::RadarrData;
|
||||
use crate::models::radarr_models::AddMovieSearchResult;
|
||||
use crate::app::radarr::radarr_test_utils::create_test_radarr_data;
|
||||
use crate::assert_search_reset;
|
||||
|
||||
use super::*;
|
||||
|
||||
@@ -934,33 +934,13 @@ mod tests {
|
||||
app.should_ignore_quit_key = true;
|
||||
app.push_navigation_stack(base_block.clone().into());
|
||||
app.push_navigation_stack(search_block.clone().into());
|
||||
let mut radarr_data = RadarrData {
|
||||
is_searching: true,
|
||||
search: "test search".to_owned(),
|
||||
filter: "test filter".to_owned(),
|
||||
..RadarrData::default()
|
||||
};
|
||||
radarr_data
|
||||
.filtered_movies
|
||||
.set_items(vec![Movie::default()]);
|
||||
radarr_data
|
||||
.filtered_collections
|
||||
.set_items(vec![Collection::default()]);
|
||||
radarr_data
|
||||
.add_searched_movies
|
||||
.set_items(vec![AddMovieSearchResult::default()]);
|
||||
app.data.radarr_data = radarr_data;
|
||||
app.data.radarr_data = create_test_radarr_data();
|
||||
|
||||
RadarrHandler::with(&ESC_KEY, &mut app, &search_block).handle();
|
||||
|
||||
assert_eq!(app.get_current_route(), &base_block.into());
|
||||
assert!(!app.should_ignore_quit_key);
|
||||
assert!(!app.data.radarr_data.is_searching);
|
||||
assert!(app.data.radarr_data.search.is_empty());
|
||||
assert!(app.data.radarr_data.filter.is_empty());
|
||||
assert!(app.data.radarr_data.filtered_movies.items.is_empty());
|
||||
assert!(app.data.radarr_data.filtered_collections.items.is_empty());
|
||||
assert!(app.data.radarr_data.add_searched_movies.items.is_empty());
|
||||
assert_search_reset!(app.data.radarr_data);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
@@ -996,22 +976,7 @@ mod tests {
|
||||
app.error = "test error".to_owned().into();
|
||||
app.push_navigation_stack(ActiveRadarrBlock::Downloads.into());
|
||||
app.push_navigation_stack(ActiveRadarrBlock::Downloads.into());
|
||||
let mut radarr_data = RadarrData {
|
||||
is_searching: true,
|
||||
search: "test search".to_owned(),
|
||||
filter: "test filter".to_owned(),
|
||||
..RadarrData::default()
|
||||
};
|
||||
radarr_data
|
||||
.filtered_movies
|
||||
.set_items(vec![Movie::default()]);
|
||||
radarr_data
|
||||
.filtered_collections
|
||||
.set_items(vec![Collection::default()]);
|
||||
radarr_data
|
||||
.add_searched_movies
|
||||
.set_items(vec![AddMovieSearchResult::default()]);
|
||||
app.data.radarr_data = radarr_data;
|
||||
app.data.radarr_data = create_test_radarr_data();
|
||||
|
||||
RadarrHandler::with(&ESC_KEY, &mut app, &ActiveRadarrBlock::Downloads).handle();
|
||||
|
||||
@@ -1020,12 +985,7 @@ mod tests {
|
||||
&ActiveRadarrBlock::Downloads.into()
|
||||
);
|
||||
assert!(app.error.text.is_empty());
|
||||
assert!(!app.data.radarr_data.is_searching);
|
||||
assert!(app.data.radarr_data.search.is_empty());
|
||||
assert!(app.data.radarr_data.filter.is_empty());
|
||||
assert!(app.data.radarr_data.filtered_movies.items.is_empty());
|
||||
assert!(app.data.radarr_data.filtered_collections.items.is_empty());
|
||||
assert!(app.data.radarr_data.add_searched_movies.items.is_empty());
|
||||
assert_search_reset!(app.data.radarr_data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1332,4 +1292,22 @@ mod tests {
|
||||
) {
|
||||
test_handler_delegation!(ActiveRadarrBlock::Collections, active_radarr_block);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_delegate_movie_details_blocks_to_movie_details_handler(
|
||||
#[values(
|
||||
ActiveRadarrBlock::MovieDetails,
|
||||
ActiveRadarrBlock::MovieHistory,
|
||||
ActiveRadarrBlock::FileInfo,
|
||||
ActiveRadarrBlock::Cast,
|
||||
ActiveRadarrBlock::Crew,
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt,
|
||||
ActiveRadarrBlock::RefreshAndScanPrompt,
|
||||
ActiveRadarrBlock::ManualSearch,
|
||||
ActiveRadarrBlock::ManualSearchConfirmPrompt
|
||||
)]
|
||||
active_radarr_block: ActiveRadarrBlock,
|
||||
) {
|
||||
test_handler_delegation!(ActiveRadarrBlock::Movies, active_radarr_block);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,3 +197,422 @@ impl<'a> KeyEventHandler<'a, ActiveRadarrBlock> for MovieDetailsHandler<'a> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[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::movie_details_handler::MovieDetailsHandler;
|
||||
use crate::handlers::KeyEventHandler;
|
||||
use crate::models::radarr_models::{Credit, MovieHistoryItem, Release};
|
||||
use crate::models::{HorizontallyScrollableText, ScrollableText};
|
||||
|
||||
mod test_handle_scroll_up_and_down {
|
||||
use pretty_assertions::assert_eq;
|
||||
use rstest::rstest;
|
||||
|
||||
use crate::{simple_stateful_iterable_vec, test_iterable_scroll};
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_movie_details_scroll() {
|
||||
let mut app = App::default();
|
||||
app.data.radarr_data.movie_details = ScrollableText::with_string("Test 1\nTest 2".to_owned());
|
||||
|
||||
MovieDetailsHandler::with(
|
||||
&DEFAULT_KEYBINDINGS.up.key,
|
||||
&mut app,
|
||||
&ActiveRadarrBlock::MovieDetails,
|
||||
)
|
||||
.handle();
|
||||
|
||||
assert_eq!(app.data.radarr_data.movie_details.offset, 0);
|
||||
|
||||
MovieDetailsHandler::with(
|
||||
&DEFAULT_KEYBINDINGS.down.key,
|
||||
&mut app,
|
||||
&ActiveRadarrBlock::MovieDetails,
|
||||
)
|
||||
.handle();
|
||||
|
||||
assert_eq!(app.data.radarr_data.movie_details.offset, 1);
|
||||
}
|
||||
|
||||
test_iterable_scroll!(
|
||||
test_movie_history_scroll,
|
||||
MovieDetailsHandler,
|
||||
movie_history,
|
||||
simple_stateful_iterable_vec!(MovieHistoryItem, HorizontallyScrollableText, source_title),
|
||||
ActiveRadarrBlock::MovieHistory,
|
||||
source_title,
|
||||
stationary_style
|
||||
);
|
||||
|
||||
test_iterable_scroll!(
|
||||
test_cast_scroll,
|
||||
MovieDetailsHandler,
|
||||
movie_cast,
|
||||
simple_stateful_iterable_vec!(Credit, String, person_name),
|
||||
ActiveRadarrBlock::Cast,
|
||||
person_name,
|
||||
to_owned
|
||||
);
|
||||
|
||||
test_iterable_scroll!(
|
||||
test_crew_scroll,
|
||||
MovieDetailsHandler,
|
||||
movie_crew,
|
||||
simple_stateful_iterable_vec!(Credit, String, person_name),
|
||||
ActiveRadarrBlock::Crew,
|
||||
person_name,
|
||||
to_owned
|
||||
);
|
||||
|
||||
test_iterable_scroll!(
|
||||
test_manual_search_scroll,
|
||||
MovieDetailsHandler,
|
||||
movie_releases,
|
||||
simple_stateful_iterable_vec!(Release, HorizontallyScrollableText),
|
||||
ActiveRadarrBlock::ManualSearch,
|
||||
title,
|
||||
stationary_style
|
||||
);
|
||||
}
|
||||
|
||||
mod test_handle_home_end {
|
||||
use crate::{extended_stateful_iterable_vec, test_iterable_home_and_end};
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_movie_details_home_end() {
|
||||
let mut app = App::default();
|
||||
app.data.radarr_data.movie_details = ScrollableText::with_string("Test 1\nTest 2".to_owned());
|
||||
|
||||
MovieDetailsHandler::with(
|
||||
&DEFAULT_KEYBINDINGS.end.key,
|
||||
&mut app,
|
||||
&ActiveRadarrBlock::MovieDetails,
|
||||
)
|
||||
.handle();
|
||||
|
||||
assert_eq!(app.data.radarr_data.movie_details.offset, 1);
|
||||
|
||||
MovieDetailsHandler::with(
|
||||
&DEFAULT_KEYBINDINGS.home.key,
|
||||
&mut app,
|
||||
&ActiveRadarrBlock::MovieDetails,
|
||||
)
|
||||
.handle();
|
||||
|
||||
assert_eq!(app.data.radarr_data.movie_details.offset, 0);
|
||||
}
|
||||
|
||||
test_iterable_home_and_end!(
|
||||
test_movie_history_home_end,
|
||||
MovieDetailsHandler,
|
||||
movie_history,
|
||||
extended_stateful_iterable_vec!(MovieHistoryItem, HorizontallyScrollableText, source_title),
|
||||
ActiveRadarrBlock::MovieHistory,
|
||||
source_title,
|
||||
stationary_style
|
||||
);
|
||||
|
||||
test_iterable_home_and_end!(
|
||||
test_cast_home_end,
|
||||
MovieDetailsHandler,
|
||||
movie_cast,
|
||||
extended_stateful_iterable_vec!(Credit, String, person_name),
|
||||
ActiveRadarrBlock::Cast,
|
||||
person_name,
|
||||
to_owned
|
||||
);
|
||||
|
||||
test_iterable_home_and_end!(
|
||||
test_crew_home_end,
|
||||
MovieDetailsHandler,
|
||||
movie_crew,
|
||||
extended_stateful_iterable_vec!(Credit, String, person_name),
|
||||
ActiveRadarrBlock::Crew,
|
||||
person_name,
|
||||
to_owned
|
||||
);
|
||||
|
||||
test_iterable_home_and_end!(
|
||||
test_manual_search_home_end,
|
||||
MovieDetailsHandler,
|
||||
movie_releases,
|
||||
extended_stateful_iterable_vec!(Release, HorizontallyScrollableText),
|
||||
ActiveRadarrBlock::ManualSearch,
|
||||
title,
|
||||
stationary_style
|
||||
);
|
||||
}
|
||||
|
||||
mod test_handle_left_right_action {
|
||||
use pretty_assertions::assert_eq;
|
||||
use rstest::rstest;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[rstest]
|
||||
fn test_left_right_prompt_toggle(
|
||||
#[values(
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt,
|
||||
ActiveRadarrBlock::RefreshAndScanPrompt,
|
||||
ActiveRadarrBlock::ManualSearchConfirmPrompt
|
||||
)]
|
||||
active_radarr_block: ActiveRadarrBlock,
|
||||
#[values(Key::Left, Key::Right)] key: Key,
|
||||
) {
|
||||
let mut app = App::default();
|
||||
|
||||
MovieDetailsHandler::with(&key, &mut app, &active_radarr_block).handle();
|
||||
|
||||
assert!(app.data.radarr_data.prompt_confirm);
|
||||
|
||||
MovieDetailsHandler::with(&key, &mut app, &active_radarr_block).handle();
|
||||
|
||||
assert!(!app.data.radarr_data.prompt_confirm);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(ActiveRadarrBlock::MovieDetails, ActiveRadarrBlock::MovieHistory)]
|
||||
#[case(ActiveRadarrBlock::MovieHistory, ActiveRadarrBlock::FileInfo)]
|
||||
#[case(ActiveRadarrBlock::FileInfo, ActiveRadarrBlock::Cast)]
|
||||
#[case(ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew)]
|
||||
#[case(ActiveRadarrBlock::Crew, ActiveRadarrBlock::ManualSearch)]
|
||||
#[case(ActiveRadarrBlock::ManualSearch, ActiveRadarrBlock::MovieDetails)]
|
||||
fn test_movie_info_tabs_left_right_action(
|
||||
#[case] left_block: ActiveRadarrBlock,
|
||||
#[case] right_block: ActiveRadarrBlock,
|
||||
) {
|
||||
let mut app = App::default();
|
||||
app.push_navigation_stack(right_block.clone().into());
|
||||
app.data.radarr_data.movie_info_tabs.index = app
|
||||
.data
|
||||
.radarr_data
|
||||
.movie_info_tabs
|
||||
.tabs
|
||||
.iter()
|
||||
.position(|tab_route| tab_route.route == right_block.clone().into())
|
||||
.unwrap_or_default();
|
||||
|
||||
MovieDetailsHandler::with(&DEFAULT_KEYBINDINGS.left.key, &mut app, &right_block).handle();
|
||||
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
app.data.radarr_data.movie_info_tabs.get_active_route()
|
||||
);
|
||||
assert_eq!(app.get_current_route(), &left_block.clone().into());
|
||||
|
||||
MovieDetailsHandler::with(&DEFAULT_KEYBINDINGS.right.key, &mut app, &left_block).handle();
|
||||
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
app.data.radarr_data.movie_info_tabs.get_active_route()
|
||||
);
|
||||
assert_eq!(app.get_current_route(), &right_block.into());
|
||||
}
|
||||
}
|
||||
|
||||
mod test_handle_submit {
|
||||
use pretty_assertions::assert_eq;
|
||||
use rstest::rstest;
|
||||
|
||||
use crate::network::radarr_network::RadarrEvent;
|
||||
|
||||
use super::*;
|
||||
|
||||
const SUBMIT_KEY: Key = DEFAULT_KEYBINDINGS.submit.key;
|
||||
|
||||
#[test]
|
||||
fn test_manual_search_submit() {
|
||||
let mut app = App::default();
|
||||
app.push_navigation_stack(ActiveRadarrBlock::ManualSearch.into());
|
||||
|
||||
MovieDetailsHandler::with(&SUBMIT_KEY, &mut app, &ActiveRadarrBlock::ManualSearch).handle();
|
||||
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
&ActiveRadarrBlock::ManualSearchConfirmPrompt.into()
|
||||
);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt,
|
||||
RadarrEvent::TriggerAutomaticSearch
|
||||
)]
|
||||
#[case(ActiveRadarrBlock::RefreshAndScanPrompt, RadarrEvent::RefreshAndScan)]
|
||||
#[case(
|
||||
ActiveRadarrBlock::ManualSearchConfirmPrompt,
|
||||
RadarrEvent::DownloadRelease
|
||||
)]
|
||||
fn test_movie_info_prompt_confirm_submit(
|
||||
#[case] prompt_block: ActiveRadarrBlock,
|
||||
#[case] expected_action: RadarrEvent,
|
||||
) {
|
||||
let mut app = App::default();
|
||||
app.data.radarr_data.prompt_confirm = true;
|
||||
app.push_navigation_stack(ActiveRadarrBlock::MovieDetails.into());
|
||||
app.push_navigation_stack(prompt_block.clone().into());
|
||||
|
||||
MovieDetailsHandler::with(&SUBMIT_KEY, &mut app, &prompt_block).handle();
|
||||
|
||||
assert!(app.data.radarr_data.prompt_confirm);
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
&ActiveRadarrBlock::MovieDetails.into()
|
||||
);
|
||||
assert_eq!(
|
||||
app.data.radarr_data.prompt_confirm_action,
|
||||
Some(expected_action)
|
||||
);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_movie_info_prompt_decline_submit(
|
||||
#[values(
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt,
|
||||
ActiveRadarrBlock::RefreshAndScanPrompt,
|
||||
ActiveRadarrBlock::ManualSearchConfirmPrompt
|
||||
)]
|
||||
prompt_block: ActiveRadarrBlock,
|
||||
) {
|
||||
let mut app = App::default();
|
||||
app.push_navigation_stack(ActiveRadarrBlock::MovieDetails.into());
|
||||
app.push_navigation_stack(prompt_block.clone().into());
|
||||
|
||||
MovieDetailsHandler::with(&SUBMIT_KEY, &mut app, &prompt_block).handle();
|
||||
|
||||
assert!(!app.data.radarr_data.prompt_confirm);
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
&ActiveRadarrBlock::MovieDetails.into()
|
||||
);
|
||||
assert_eq!(app.data.radarr_data.prompt_confirm_action, None);
|
||||
}
|
||||
}
|
||||
|
||||
mod test_handle_esc {
|
||||
use pretty_assertions::assert_eq;
|
||||
use rstest::rstest;
|
||||
|
||||
use crate::app::radarr::radarr_test_utils::create_test_radarr_data;
|
||||
use crate::assert_movie_info_tabs_reset;
|
||||
|
||||
use super::*;
|
||||
|
||||
const ESC_KEY: Key = DEFAULT_KEYBINDINGS.esc.key;
|
||||
|
||||
#[rstest]
|
||||
fn test_movie_info_tabs_esc(
|
||||
#[values(
|
||||
ActiveRadarrBlock::MovieDetails,
|
||||
ActiveRadarrBlock::MovieHistory,
|
||||
ActiveRadarrBlock::FileInfo,
|
||||
ActiveRadarrBlock::Cast,
|
||||
ActiveRadarrBlock::Crew,
|
||||
ActiveRadarrBlock::ManualSearch
|
||||
)]
|
||||
active_radarr_block: ActiveRadarrBlock,
|
||||
) {
|
||||
let mut app = App::default();
|
||||
app.data.radarr_data = create_test_radarr_data();
|
||||
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
|
||||
app.push_navigation_stack(active_radarr_block.clone().into());
|
||||
|
||||
MovieDetailsHandler::with(&ESC_KEY, &mut app, &active_radarr_block).handle();
|
||||
|
||||
assert_eq!(app.get_current_route(), &ActiveRadarrBlock::Movies.into());
|
||||
assert_movie_info_tabs_reset!(app.data.radarr_data);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_movie_info_prompts_esc(
|
||||
#[values(
|
||||
ActiveRadarrBlock::AutomaticallySearchMoviePrompt,
|
||||
ActiveRadarrBlock::RefreshAndScanPrompt,
|
||||
ActiveRadarrBlock::ManualSearchConfirmPrompt
|
||||
)]
|
||||
prompt_block: ActiveRadarrBlock,
|
||||
) {
|
||||
let mut app = App::default();
|
||||
app.data.radarr_data.prompt_confirm = true;
|
||||
app.push_navigation_stack(ActiveRadarrBlock::Movies.into());
|
||||
app.push_navigation_stack(prompt_block.clone().into());
|
||||
|
||||
MovieDetailsHandler::with(&ESC_KEY, &mut app, &prompt_block).handle();
|
||||
|
||||
assert!(!app.data.radarr_data.prompt_confirm);
|
||||
assert_eq!(app.get_current_route(), &ActiveRadarrBlock::Movies.into());
|
||||
}
|
||||
}
|
||||
|
||||
mod test_handle_key_char {
|
||||
use pretty_assertions::assert_eq;
|
||||
use rstest::rstest;
|
||||
|
||||
use super::*;
|
||||
|
||||
#[rstest]
|
||||
fn test_search_key(
|
||||
#[values(
|
||||
ActiveRadarrBlock::MovieDetails,
|
||||
ActiveRadarrBlock::MovieHistory,
|
||||
ActiveRadarrBlock::FileInfo,
|
||||
ActiveRadarrBlock::Cast,
|
||||
ActiveRadarrBlock::Crew,
|
||||
ActiveRadarrBlock::ManualSearch
|
||||
)]
|
||||
active_radarr_block: ActiveRadarrBlock,
|
||||
) {
|
||||
let mut app = App::default();
|
||||
|
||||
MovieDetailsHandler::with(
|
||||
&DEFAULT_KEYBINDINGS.search.key,
|
||||
&mut app,
|
||||
&active_radarr_block,
|
||||
)
|
||||
.handle();
|
||||
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
&ActiveRadarrBlock::AutomaticallySearchMoviePrompt.into()
|
||||
);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_refresh_key(
|
||||
#[values(
|
||||
ActiveRadarrBlock::MovieDetails,
|
||||
ActiveRadarrBlock::MovieHistory,
|
||||
ActiveRadarrBlock::FileInfo,
|
||||
ActiveRadarrBlock::Cast,
|
||||
ActiveRadarrBlock::Crew,
|
||||
ActiveRadarrBlock::ManualSearch
|
||||
)]
|
||||
active_radarr_block: ActiveRadarrBlock,
|
||||
) {
|
||||
let mut app = App::default();
|
||||
|
||||
MovieDetailsHandler::with(
|
||||
&DEFAULT_KEYBINDINGS.refresh.key,
|
||||
&mut app,
|
||||
&active_radarr_block,
|
||||
)
|
||||
.handle();
|
||||
|
||||
assert_eq!(
|
||||
app.get_current_route(),
|
||||
&ActiveRadarrBlock::RefreshAndScanPrompt.into()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user