Added 'Test All Indexers' table and functionality to the Indexers tab, and upgraded to Ratatui 0.24.0 and cleaned up code for newer Ratatui version

This commit is contained in:
2023-11-25 17:36:30 -07:00
parent d0ce98eb93
commit 76e21e7697
44 changed files with 1132 additions and 428 deletions
@@ -9,7 +9,7 @@ use crate::network::radarr_network::RadarrEvent;
use crate::{handle_text_box_keys, handle_text_box_left_right_keys};
#[cfg(test)]
#[path = "./edit_indexer_settings_handler_tests.rs"]
#[path = "edit_indexer_settings_handler_tests.rs"]
mod edit_indexer_settings_handler_tests;
pub(super) struct IndexerSettingsHandler<'a, 'b> {
@@ -7,7 +7,7 @@ mod tests {
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::app::App;
use crate::event::Key;
use crate::handlers::radarr_handlers::indexers::IndexersHandler;
use crate::handlers::radarr_handlers::indexers::{IndexersHandler, TestAllIndexersHandler};
use crate::handlers::KeyEventHandler;
use crate::models::servarr_data::radarr::radarr_data::{
ActiveRadarrBlock, INDEXERS_BLOCKS, INDEXER_SETTINGS_BLOCKS,
@@ -302,6 +302,24 @@ mod tests {
&INDEXER_SETTINGS_SELECTION_BLOCKS
);
}
#[test]
fn test_test_key() {
let mut app = App::default();
IndexersHandler::with(
&DEFAULT_KEYBINDINGS.test.key,
&mut app,
&ActiveRadarrBlock::Indexers,
&None,
)
.handle();
assert_eq!(
app.get_current_route(),
&ActiveRadarrBlock::TestAllIndexers.into()
);
}
}
#[rstest]
@@ -327,6 +345,15 @@ mod tests {
);
}
#[test]
fn test_delegates_test_all_indexers_block_to_test_all_indexers_handler() {
test_handler_delegation!(
TestAllIndexersHandler,
ActiveRadarrBlock::Indexers,
ActiveRadarrBlock::TestAllIndexers
);
}
#[test]
fn test_indexers_handler_accepts() {
let mut indexers_blocks = Vec::new();
@@ -3,6 +3,7 @@ use crate::app::App;
use crate::event::Key;
use crate::handlers::radarr_handlers::handle_change_tab_left_right_keys;
use crate::handlers::radarr_handlers::indexers::edit_indexer_settings_handler::IndexerSettingsHandler;
use crate::handlers::radarr_handlers::indexers::test_all_indexers_handler::TestAllIndexersHandler;
use crate::handlers::{handle_clear_errors, handle_prompt_toggle, KeyEventHandler};
use crate::models::servarr_data::radarr::radarr_data::{
ActiveRadarrBlock, INDEXERS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS,
@@ -11,6 +12,7 @@ use crate::models::{BlockSelectionState, Scrollable};
use crate::network::radarr_network::RadarrEvent;
mod edit_indexer_settings_handler;
mod test_all_indexers_handler;
#[cfg(test)]
#[path = "indexers_handler_tests.rs"]
@@ -30,6 +32,10 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexersHandler<'a,
IndexerSettingsHandler::with(self.key, self.app, self.active_radarr_block, self.context)
.handle()
}
_ if TestAllIndexersHandler::accepts(self.active_radarr_block) => {
TestAllIndexersHandler::with(self.key, self.app, self.active_radarr_block, self.context)
.handle()
}
_ => self.handle_key_event(),
}
}
@@ -137,6 +143,11 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for IndexersHandler<'a,
_ if *key == DEFAULT_KEYBINDINGS.refresh.key => {
self.app.should_refresh = true;
}
_ if *key == DEFAULT_KEYBINDINGS.test.key => {
self
.app
.push_navigation_stack(ActiveRadarrBlock::TestAllIndexers.into());
}
_ if *key == DEFAULT_KEYBINDINGS.settings.key => {
self
.app
@@ -0,0 +1,107 @@
use crate::app::App;
use crate::event::Key;
use crate::handlers::KeyEventHandler;
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
use crate::models::Scrollable;
#[cfg(test)]
#[path = "test_all_indexers_handler_tests.rs"]
mod test_all_indexers_handler_tests;
pub(super) struct TestAllIndexersHandler<'a, 'b> {
key: &'a Key,
app: &'a mut App<'b>,
active_radarr_block: &'a ActiveRadarrBlock,
_context: &'a Option<ActiveRadarrBlock>,
}
impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for TestAllIndexersHandler<'a, 'b> {
fn accepts(active_block: &'a ActiveRadarrBlock) -> bool {
active_block == &ActiveRadarrBlock::TestAllIndexers
}
fn with(
key: &'a Key,
app: &'a mut App<'b>,
active_block: &'a ActiveRadarrBlock,
_context: &'a Option<ActiveRadarrBlock>,
) -> TestAllIndexersHandler<'a, 'b> {
TestAllIndexersHandler {
key,
app,
active_radarr_block: active_block,
_context,
}
}
fn get_key(&self) -> &Key {
self.key
}
fn handle_scroll_up(&mut self) {
if self.active_radarr_block == &ActiveRadarrBlock::TestAllIndexers {
self
.app
.data
.radarr_data
.indexer_test_all_results
.as_mut()
.unwrap()
.scroll_up()
}
}
fn handle_scroll_down(&mut self) {
if self.active_radarr_block == &ActiveRadarrBlock::TestAllIndexers {
self
.app
.data
.radarr_data
.indexer_test_all_results
.as_mut()
.unwrap()
.scroll_down()
}
}
fn handle_home(&mut self) {
if self.active_radarr_block == &ActiveRadarrBlock::TestAllIndexers {
self
.app
.data
.radarr_data
.indexer_test_all_results
.as_mut()
.unwrap()
.scroll_to_top()
}
}
fn handle_end(&mut self) {
if self.active_radarr_block == &ActiveRadarrBlock::TestAllIndexers {
self
.app
.data
.radarr_data
.indexer_test_all_results
.as_mut()
.unwrap()
.scroll_to_bottom()
}
}
fn handle_delete(&mut self) {}
fn handle_left_right_action(&mut self) {}
fn handle_submit(&mut self) {}
fn handle_esc(&mut self) {
if self.active_radarr_block == &ActiveRadarrBlock::TestAllIndexers {
self.app.pop_navigation_stack();
self.app.data.radarr_data.indexer_test_all_results = None;
}
}
fn handle_char_key_event(&mut self) {}
}
@@ -0,0 +1,165 @@
#[cfg(test)]
mod tests {
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::app::App;
use crate::event::Key;
use crate::handlers::radarr_handlers::indexers::test_all_indexers_handler::TestAllIndexersHandler;
use crate::handlers::KeyEventHandler;
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
use strum::IntoEnumIterator;
mod test_handle_scroll_up_and_down {
use pretty_assertions::assert_str_eq;
use rstest::rstest;
use crate::models::servarr_data::radarr::modals::IndexerTestResultModalItem;
use crate::models::StatefulTable;
use crate::simple_stateful_iterable_vec;
use super::*;
#[rstest]
fn test_test_all_indexers_results_scroll(
#[values(DEFAULT_KEYBINDINGS.up.key, DEFAULT_KEYBINDINGS.down.key)] key: Key,
) {
let mut app = App::default();
let mut indexer_test_results = StatefulTable::default();
indexer_test_results.set_items(simple_stateful_iterable_vec!(
IndexerTestResultModalItem,
String,
name
));
app.data.radarr_data.indexer_test_all_results = Some(indexer_test_results);
TestAllIndexersHandler::with(&key, &mut app, &ActiveRadarrBlock::TestAllIndexers, &None)
.handle();
assert_str_eq!(
app
.data
.radarr_data
.indexer_test_all_results
.as_ref()
.unwrap()
.current_selection()
.name,
"Test 2"
);
TestAllIndexersHandler::with(&key, &mut app, &ActiveRadarrBlock::TestAllIndexers, &None)
.handle();
assert_str_eq!(
app
.data
.radarr_data
.indexer_test_all_results
.as_ref()
.unwrap()
.current_selection()
.name,
"Test 1"
);
}
}
mod test_handle_home_end {
use crate::extended_stateful_iterable_vec;
use crate::models::servarr_data::radarr::modals::IndexerTestResultModalItem;
use crate::models::StatefulTable;
use pretty_assertions::assert_str_eq;
use super::*;
#[test]
fn test_test_all_indexers_results_home_end() {
let mut app = App::default();
let mut indexer_test_results = StatefulTable::default();
indexer_test_results.set_items(extended_stateful_iterable_vec!(
IndexerTestResultModalItem,
String,
name
));
app.data.radarr_data.indexer_test_all_results = Some(indexer_test_results);
TestAllIndexersHandler::with(
&DEFAULT_KEYBINDINGS.end.key,
&mut app,
&ActiveRadarrBlock::TestAllIndexers,
&None,
)
.handle();
assert_str_eq!(
app
.data
.radarr_data
.indexer_test_all_results
.as_ref()
.unwrap()
.current_selection()
.name,
"Test 3"
);
TestAllIndexersHandler::with(
&DEFAULT_KEYBINDINGS.home.key,
&mut app,
&ActiveRadarrBlock::TestAllIndexers,
&None,
)
.handle();
assert_str_eq!(
app
.data
.radarr_data
.indexer_test_all_results
.as_ref()
.unwrap()
.current_selection()
.name,
"Test 1"
);
}
}
mod test_handle_esc {
use pretty_assertions::assert_eq;
use crate::models::StatefulTable;
use super::*;
#[test]
fn test_test_all_indexers_esc() {
let mut app = App::default();
app.push_navigation_stack(ActiveRadarrBlock::Indexers.into());
app.push_navigation_stack(ActiveRadarrBlock::TestAllIndexers.into());
app.data.radarr_data.indexer_test_all_results = Some(StatefulTable::default());
TestAllIndexersHandler::with(
&DEFAULT_KEYBINDINGS.esc.key,
&mut app,
&ActiveRadarrBlock::TestAllIndexers,
&None,
)
.handle();
assert_eq!(app.get_current_route(), &ActiveRadarrBlock::Indexers.into());
assert!(!app.data.radarr_data.prompt_confirm);
assert!(app.data.radarr_data.indexer_test_all_results.is_none());
}
}
#[test]
fn test_test_all_indexers_handler_accepts() {
ActiveRadarrBlock::iter().for_each(|active_radarr_block| {
if active_radarr_block == ActiveRadarrBlock::TestAllIndexers {
assert!(TestAllIndexersHandler::accepts(&active_radarr_block));
} else {
assert!(!TestAllIndexersHandler::accepts(&active_radarr_block));
}
});
}
}