refactor(ui): all table search and filter functionality is now available directly through the ManagarrTable widget to make life easier moving forward

This commit is contained in:
2024-12-05 19:07:03 -07:00
parent 9d0948e124
commit 5abed23cf2
14 changed files with 609 additions and 346 deletions
+282 -1
View File
@@ -2,13 +2,14 @@
mod tests {
use crate::models::stateful_list::StatefulList;
use crate::models::stateful_table::{SortOption, StatefulTable};
use crate::models::Scrollable;
use crate::models::{HorizontallyScrollableText, Scrollable};
use crate::ui::utils::layout_block;
use crate::ui::widgets::managarr_table::ManagarrTable;
use pretty_assertions::assert_eq;
use ratatui::layout::{Alignment, Constraint};
use ratatui::text::Text;
use ratatui::widgets::{Block, Cell, Row};
use std::sync::atomic::AtomicUsize;
#[test]
fn test_managarr_table_new() {
@@ -31,6 +32,86 @@ mod tests {
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
fn test_managarr_table_new_search_box_populated() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let horizontally_scrollable_test = HorizontallyScrollableText {
text: "test".to_owned(),
offset: AtomicUsize::new(3),
};
stateful_table.search = Some(horizontally_scrollable_test);
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]));
let row_mapper = managarr_table.row_mapper;
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, Block::new());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 4);
assert_eq!(managarr_table.search_box_offset, 3);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
fn test_managarr_table_new_filter_box_populated() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let horizontally_scrollable_test = HorizontallyScrollableText {
text: "test".to_owned(),
offset: AtomicUsize::new(3),
};
stateful_table.filter = Some(horizontally_scrollable_test);
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]));
let row_mapper = managarr_table.row_mapper;
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, Block::new());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 4);
assert_eq!(managarr_table.filter_box_offset, 3);
}
#[test]
@@ -56,6 +137,14 @@ mod tests {
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
@@ -81,6 +170,14 @@ mod tests {
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
@@ -106,6 +203,14 @@ mod tests {
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
@@ -130,6 +235,14 @@ mod tests {
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
@@ -154,6 +267,14 @@ mod tests {
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
@@ -177,6 +298,14 @@ mod tests {
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
@@ -201,6 +330,14 @@ mod tests {
assert_eq!(managarr_table.margin, 0);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
@@ -225,6 +362,14 @@ mod tests {
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
@@ -249,6 +394,142 @@ mod tests {
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
fn test_managarr_table_is_searching() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]))
.searching(true);
let row_mapper = managarr_table.row_mapper;
assert!(managarr_table.is_searching);
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, Block::new());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
fn test_managarr_table_search_produced_empty_results() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]))
.search_produced_empty_results(true);
let row_mapper = managarr_table.row_mapper;
assert!(managarr_table.search_produced_empty_results);
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, Block::new());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.is_filtering);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
fn test_managarr_table_is_filtering() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]))
.filtering(true);
let row_mapper = managarr_table.row_mapper;
assert!(managarr_table.is_filtering);
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, Block::new());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]
fn test_managarr_table_filter_produced_empty_results() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]))
.filter_produced_empty_results(true);
let row_mapper = managarr_table.row_mapper;
assert!(managarr_table.filter_produced_empty_results);
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.footer, None);
assert_eq!(managarr_table.footer_alignment, Alignment::Left);
assert_eq!(managarr_table.block, Block::new());
assert_eq!(managarr_table.margin, 0);
assert!(!managarr_table.is_loading);
assert!(managarr_table.highlight_rows);
assert!(!managarr_table.is_sorting);
assert!(!managarr_table.is_searching);
assert!(!managarr_table.search_produced_empty_results);
assert!(!managarr_table.is_filtering);
assert_eq!(managarr_table.search_box_content_length, 0);
assert_eq!(managarr_table.search_box_offset, 0);
assert_eq!(managarr_table.filter_box_content_length, 0);
assert_eq!(managarr_table.filter_box_offset, 0);
}
#[test]