276 lines
8.4 KiB
Rust
276 lines
8.4 KiB
Rust
#[cfg(test)]
|
|
mod tests {
|
|
use crate::app::App;
|
|
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
|
|
use crate::handlers::KeyEventHandler;
|
|
use crate::handlers::lidarr_handlers::{LidarrHandler, handle_change_tab_left_right_keys};
|
|
use crate::models::servarr_data::lidarr::lidarr_data::ActiveLidarrBlock;
|
|
use crate::{assert_navigation_pushed, test_handler_delegation};
|
|
use pretty_assertions::assert_eq;
|
|
use rstest::rstest;
|
|
use strum::IntoEnumIterator;
|
|
|
|
#[rstest]
|
|
fn test_lidarr_handler_ignore_special_keys(
|
|
#[values(true, false)] ignore_special_keys_for_textbox_input: bool,
|
|
) {
|
|
let mut app = App::test_default();
|
|
app.ignore_special_keys_for_textbox_input = ignore_special_keys_for_textbox_input;
|
|
let handler = LidarrHandler::new(
|
|
DEFAULT_KEYBINDINGS.esc.key,
|
|
&mut app,
|
|
ActiveLidarrBlock::default(),
|
|
None,
|
|
);
|
|
|
|
assert_eq!(
|
|
handler.ignore_special_keys(),
|
|
ignore_special_keys_for_textbox_input
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_lidarr_handler_is_ready() {
|
|
let mut app = App::test_default();
|
|
app.is_loading = true;
|
|
|
|
let handler = LidarrHandler::new(
|
|
DEFAULT_KEYBINDINGS.esc.key,
|
|
&mut app,
|
|
ActiveLidarrBlock::default(),
|
|
None,
|
|
);
|
|
|
|
assert!(handler.is_ready());
|
|
}
|
|
|
|
#[test]
|
|
fn test_lidarr_handler_accepts() {
|
|
for lidarr_block in ActiveLidarrBlock::iter() {
|
|
assert!(LidarrHandler::accepts(lidarr_block));
|
|
}
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(0, ActiveLidarrBlock::System, ActiveLidarrBlock::Downloads)]
|
|
#[case(1, ActiveLidarrBlock::Artists, ActiveLidarrBlock::History)]
|
|
#[case(2, ActiveLidarrBlock::Downloads, ActiveLidarrBlock::RootFolders)]
|
|
#[case(3, ActiveLidarrBlock::History, ActiveLidarrBlock::Indexers)]
|
|
#[case(4, ActiveLidarrBlock::RootFolders, ActiveLidarrBlock::System)]
|
|
#[case(5, ActiveLidarrBlock::Indexers, ActiveLidarrBlock::Artists)]
|
|
fn test_lidarr_handler_change_tab_left_right_keys(
|
|
#[case] index: usize,
|
|
#[case] left_block: ActiveLidarrBlock,
|
|
#[case] right_block: ActiveLidarrBlock,
|
|
) {
|
|
let mut app = App::test_default();
|
|
app.data.lidarr_data.main_tabs.set_index(index);
|
|
|
|
handle_change_tab_left_right_keys(&mut app, DEFAULT_KEYBINDINGS.left.key);
|
|
|
|
assert_eq!(
|
|
app.data.lidarr_data.main_tabs.get_active_route(),
|
|
left_block.into()
|
|
);
|
|
assert_navigation_pushed!(app, left_block.into());
|
|
|
|
app.data.lidarr_data.main_tabs.set_index(index);
|
|
|
|
handle_change_tab_left_right_keys(&mut app, DEFAULT_KEYBINDINGS.right.key);
|
|
|
|
assert_eq!(
|
|
app.data.lidarr_data.main_tabs.get_active_route(),
|
|
right_block.into()
|
|
);
|
|
assert_navigation_pushed!(app, right_block.into());
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(0, ActiveLidarrBlock::System, ActiveLidarrBlock::Downloads)]
|
|
#[case(1, ActiveLidarrBlock::Artists, ActiveLidarrBlock::History)]
|
|
#[case(2, ActiveLidarrBlock::Downloads, ActiveLidarrBlock::RootFolders)]
|
|
#[case(3, ActiveLidarrBlock::History, ActiveLidarrBlock::Indexers)]
|
|
#[case(4, ActiveLidarrBlock::RootFolders, ActiveLidarrBlock::System)]
|
|
#[case(5, ActiveLidarrBlock::Indexers, ActiveLidarrBlock::Artists)]
|
|
fn test_lidarr_handler_change_tab_left_right_keys_alt_navigation(
|
|
#[case] index: usize,
|
|
#[case] left_block: ActiveLidarrBlock,
|
|
#[case] right_block: ActiveLidarrBlock,
|
|
) {
|
|
let mut app = App::test_default();
|
|
app.data.lidarr_data.main_tabs.set_index(index);
|
|
|
|
handle_change_tab_left_right_keys(&mut app, DEFAULT_KEYBINDINGS.left.alt.unwrap());
|
|
|
|
assert_eq!(
|
|
app.data.lidarr_data.main_tabs.get_active_route(),
|
|
left_block.into()
|
|
);
|
|
assert_navigation_pushed!(app, left_block.into());
|
|
|
|
app.data.lidarr_data.main_tabs.set_index(index);
|
|
|
|
handle_change_tab_left_right_keys(&mut app, DEFAULT_KEYBINDINGS.right.alt.unwrap());
|
|
|
|
assert_eq!(
|
|
app.data.lidarr_data.main_tabs.get_active_route(),
|
|
right_block.into()
|
|
);
|
|
assert_navigation_pushed!(app, right_block.into());
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(0, ActiveLidarrBlock::Artists)]
|
|
#[case(1, ActiveLidarrBlock::Downloads)]
|
|
#[case(2, ActiveLidarrBlock::History)]
|
|
#[case(3, ActiveLidarrBlock::RootFolders)]
|
|
#[case(4, ActiveLidarrBlock::Indexers)]
|
|
#[case(5, ActiveLidarrBlock::System)]
|
|
fn test_lidarr_handler_change_tab_left_right_keys_alt_navigation_no_op_when_ignoring_quit_key(
|
|
#[case] index: usize,
|
|
#[case] block: ActiveLidarrBlock,
|
|
) {
|
|
let mut app = App::test_default();
|
|
app.push_navigation_stack(block.into());
|
|
app.ignore_special_keys_for_textbox_input = true;
|
|
app.data.lidarr_data.main_tabs.set_index(index);
|
|
|
|
handle_change_tab_left_right_keys(&mut app, DEFAULT_KEYBINDINGS.left.alt.unwrap());
|
|
|
|
assert_eq!(
|
|
app.data.lidarr_data.main_tabs.get_active_route(),
|
|
block.into()
|
|
);
|
|
assert_eq!(app.get_current_route(), block.into());
|
|
|
|
app.data.lidarr_data.main_tabs.set_index(index);
|
|
|
|
handle_change_tab_left_right_keys(&mut app, DEFAULT_KEYBINDINGS.right.alt.unwrap());
|
|
|
|
assert_eq!(
|
|
app.data.lidarr_data.main_tabs.get_active_route(),
|
|
block.into()
|
|
);
|
|
assert_eq!(app.get_current_route(), block.into());
|
|
}
|
|
|
|
#[rstest]
|
|
fn test_delegates_library_blocks_to_library_handler(
|
|
#[values(
|
|
ActiveLidarrBlock::Artists,
|
|
ActiveLidarrBlock::ArtistsSortPrompt,
|
|
ActiveLidarrBlock::FilterArtists,
|
|
ActiveLidarrBlock::FilterArtistsError,
|
|
ActiveLidarrBlock::SearchArtists,
|
|
ActiveLidarrBlock::SearchArtistsError,
|
|
ActiveLidarrBlock::UpdateAllArtistsPrompt,
|
|
ActiveLidarrBlock::DeleteArtistPrompt,
|
|
ActiveLidarrBlock::EditArtistPrompt,
|
|
ActiveLidarrBlock::EditArtistPathInput,
|
|
ActiveLidarrBlock::EditArtistSelectMetadataProfile,
|
|
ActiveLidarrBlock::EditArtistSelectMonitorNewItems,
|
|
ActiveLidarrBlock::EditArtistSelectQualityProfile,
|
|
ActiveLidarrBlock::EditArtistTagsInput
|
|
)]
|
|
active_lidarr_block: ActiveLidarrBlock,
|
|
) {
|
|
test_handler_delegation!(
|
|
LidarrHandler,
|
|
ActiveLidarrBlock::Artists,
|
|
active_lidarr_block
|
|
);
|
|
}
|
|
|
|
#[rstest]
|
|
fn test_delegates_downloads_blocks_to_downloads_handler(
|
|
#[values(
|
|
ActiveLidarrBlock::Downloads,
|
|
ActiveLidarrBlock::DeleteDownloadPrompt,
|
|
ActiveLidarrBlock::UpdateDownloadsPrompt
|
|
)]
|
|
active_lidarr_block: ActiveLidarrBlock,
|
|
) {
|
|
test_handler_delegation!(
|
|
LidarrHandler,
|
|
ActiveLidarrBlock::Downloads,
|
|
active_lidarr_block
|
|
);
|
|
}
|
|
|
|
#[rstest]
|
|
fn test_delegates_history_blocks_to_history_handler(
|
|
#[values(
|
|
ActiveLidarrBlock::History,
|
|
ActiveLidarrBlock::HistoryItemDetails,
|
|
ActiveLidarrBlock::HistorySortPrompt,
|
|
ActiveLidarrBlock::FilterHistory,
|
|
ActiveLidarrBlock::FilterHistoryError,
|
|
ActiveLidarrBlock::SearchHistory,
|
|
ActiveLidarrBlock::SearchHistoryError
|
|
)]
|
|
active_lidarr_block: ActiveLidarrBlock,
|
|
) {
|
|
test_handler_delegation!(
|
|
LidarrHandler,
|
|
ActiveLidarrBlock::History,
|
|
active_lidarr_block
|
|
);
|
|
}
|
|
|
|
#[rstest]
|
|
fn test_delegates_root_folders_blocks_to_root_folders_handler(
|
|
#[values(
|
|
ActiveLidarrBlock::RootFolders,
|
|
ActiveLidarrBlock::AddRootFolderPrompt,
|
|
ActiveLidarrBlock::DeleteRootFolderPrompt
|
|
)]
|
|
active_lidarr_block: ActiveLidarrBlock,
|
|
) {
|
|
test_handler_delegation!(
|
|
LidarrHandler,
|
|
ActiveLidarrBlock::RootFolders,
|
|
active_lidarr_block
|
|
);
|
|
}
|
|
|
|
#[rstest]
|
|
fn test_delegates_indexers_blocks_to_indexers_handler(
|
|
#[values(
|
|
ActiveLidarrBlock::DeleteIndexerPrompt,
|
|
ActiveLidarrBlock::Indexers,
|
|
ActiveLidarrBlock::AllIndexerSettingsPrompt,
|
|
ActiveLidarrBlock::IndexerSettingsConfirmPrompt,
|
|
ActiveLidarrBlock::IndexerSettingsMaximumSizeInput,
|
|
ActiveLidarrBlock::IndexerSettingsMinimumAgeInput,
|
|
ActiveLidarrBlock::IndexerSettingsRetentionInput,
|
|
ActiveLidarrBlock::IndexerSettingsRssSyncIntervalInput
|
|
)]
|
|
active_sonarr_block: ActiveLidarrBlock,
|
|
) {
|
|
test_handler_delegation!(
|
|
LidarrHandler,
|
|
ActiveLidarrBlock::Indexers,
|
|
active_sonarr_block
|
|
);
|
|
}
|
|
|
|
#[rstest]
|
|
fn test_delegates_system_blocks_to_system_handler(
|
|
#[values(
|
|
ActiveLidarrBlock::System,
|
|
ActiveLidarrBlock::SystemLogs,
|
|
ActiveLidarrBlock::SystemQueuedEvents,
|
|
ActiveLidarrBlock::SystemTasks,
|
|
ActiveLidarrBlock::SystemTaskStartConfirmPrompt,
|
|
ActiveLidarrBlock::SystemUpdates
|
|
)]
|
|
active_sonarr_block: ActiveLidarrBlock,
|
|
) {
|
|
test_handler_delegation!(
|
|
LidarrHandler,
|
|
ActiveLidarrBlock::System,
|
|
active_sonarr_block
|
|
);
|
|
}
|
|
}
|