refactored managarr table initializer so a mutable app reference can be passed

This commit is contained in:
2026-01-05 09:49:03 -07:00
parent 50d4ddfa28
commit c8a06f3601
35 changed files with 955 additions and 775 deletions
+88 -53
View File
@@ -1,7 +1,8 @@
#[cfg(test)]
mod tests {
use crate::app::App;
use crate::models::stateful_list::StatefulList;
use crate::models::stateful_table::{SortOption, StatefulTable};
use crate::models::stateful_table::SortOption;
use crate::models::{HorizontallyScrollableText, Scrollable};
use crate::ui::utils::borderless_block;
use crate::ui::widgets::managarr_table::ManagarrTable;
@@ -14,15 +15,19 @@ mod tests {
#[test]
fn test_managarr_table_new() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let mut app = App::test_default();
app.data.radarr_data.movies.set_items(items.clone().into_iter().map(|s| {
let mut movie = crate::models::radarr_models::Movie::default();
movie.title = crate::models::HorizontallyScrollableText::from(s);
movie
}).collect());
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]));
let managarr_table = ManagarrTable::new(
&mut app,
|app| Some(&mut app.data.radarr_data.movies),
|movie: &crate::models::radarr_models::Movie| Row::new(vec![Cell::new(movie.title.to_string())]),
);
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.block, borderless_block());
@@ -43,20 +48,24 @@ mod tests {
#[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 mut app = App::test_default();
app.data.radarr_data.movies.set_items(items.clone().into_iter().map(|s| {
let mut movie = crate::models::radarr_models::Movie::default();
movie.title = crate::models::HorizontallyScrollableText::from(s);
movie
}).collect());
let horizontally_scrollable_test = HorizontallyScrollableText {
text: "test".to_owned(),
offset: AtomicUsize::new(3),
};
stateful_table.search = Some(horizontally_scrollable_test);
app.data.radarr_data.movies.search = Some(horizontally_scrollable_test);
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]));
let managarr_table = ManagarrTable::new(
&mut app,
|app| Some(&mut app.data.radarr_data.movies),
|movie: &crate::models::radarr_models::Movie| Row::new(vec![Cell::new(movie.title.to_string())]),
);
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.block, borderless_block());
@@ -77,20 +86,24 @@ mod tests {
#[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 mut app = App::test_default();
app.data.radarr_data.movies.set_items(items.clone().into_iter().map(|s| {
let mut movie = crate::models::radarr_models::Movie::default();
movie.title = crate::models::HorizontallyScrollableText::from(s);
movie
}).collect());
let horizontally_scrollable_test = HorizontallyScrollableText {
text: "test".to_owned(),
offset: AtomicUsize::new(3),
};
stateful_table.filter = Some(horizontally_scrollable_test);
app.data.radarr_data.movies.filter = Some(horizontally_scrollable_test);
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]));
let managarr_table = ManagarrTable::new(
&mut app,
|app| Some(&mut app.data.radarr_data.movies),
|movie: &crate::models::radarr_models::Movie| Row::new(vec![Cell::new(movie.title.to_string())]),
);
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.block, borderless_block());
@@ -111,18 +124,22 @@ mod tests {
#[test]
fn test_managarr_table_headers() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let mut app = App::test_default();
app.data.radarr_data.movies.set_items(items.clone().into_iter().map(|s| {
let mut movie = crate::models::radarr_models::Movie::default();
movie.title = crate::models::HorizontallyScrollableText::from(s);
movie
}).collect());
let headers = ["column 1", "column 2"];
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]))
.headers(headers);
let managarr_table = ManagarrTable::new(
&mut app,
|app| Some(&mut app.data.radarr_data.movies),
|movie: &crate::models::radarr_models::Movie| Row::new(vec![Cell::new(movie.title.to_string())]),
)
.headers(headers);
let row_mapper = managarr_table.row_mapper;
assert_eq!(managarr_table.table_headers, headers);
assert_eq!(managarr_table.content.unwrap().items, items);
assert_eq!(row_mapper(&"item1"), Row::new(vec![Cell::new("item1")]));
assert_eq!(managarr_table.constraints, Vec::new());
assert_eq!(managarr_table.block, borderless_block());
assert_eq!(managarr_table.margin, 0);
@@ -142,18 +159,22 @@ mod tests {
#[test]
fn test_managarr_table_constraints() {
let items = vec!["item1", "item2", "item3"];
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
let mut app = App::test_default();
app.data.radarr_data.movies.set_items(items.clone().into_iter().map(|s| {
let mut movie = crate::models::radarr_models::Movie::default();
movie.title = crate::models::HorizontallyScrollableText::from(s);
movie
}).collect());
let constraints = [Constraint::Length(1), Constraint::Fill(1)];
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]))
.constraints(constraints);
let managarr_table = ManagarrTable::new(
&mut app,
|app| Some(&mut app.data.radarr_data.movies),
|movie: &crate::models::radarr_models::Movie| Row::new(vec![Cell::new(movie.title.to_string())]),
)
.constraints(constraints);
let row_mapper = managarr_table.row_mapper;
assert_eq!(managarr_table.constraints, constraints);
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.block, borderless_block());
assert_eq!(managarr_table.margin, 0);
@@ -185,14 +206,21 @@ mod tests {
},
]);
sort_list.scroll_down();
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
stateful_table.sort = Some(sort_list);
let mut app = App::test_default();
app.data.radarr_data.movies.set_items(items.clone().into_iter().map(|s| {
let mut movie = crate::models::radarr_models::Movie::default();
movie.title = crate::models::HorizontallyScrollableText::from(s);
movie
}).collect());
app.data.radarr_data.movies.sort = Some(sort_list);
let headers = ["column 1", "column 2"];
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]))
.headers(headers);
let managarr_table = ManagarrTable::new(
&mut app,
|app| Some(&mut app.data.radarr_data.movies),
|movie: &crate::models::radarr_models::Movie| Row::new(vec![Cell::new(movie.title.to_string())]),
)
.headers(headers);
assert_eq!(
managarr_table.parse_headers(),
@@ -215,15 +243,22 @@ mod tests {
},
]);
sort_list.scroll_down();
let mut stateful_table = StatefulTable::default();
stateful_table.set_items(items.clone());
stateful_table.sort = Some(sort_list);
stateful_table.sort_asc = true;
let mut app = App::test_default();
app.data.radarr_data.movies.set_items(items.clone().into_iter().map(|s| {
let mut movie = crate::models::radarr_models::Movie::default();
movie.title = crate::models::HorizontallyScrollableText::from(s);
movie
}).collect());
app.data.radarr_data.movies.sort = Some(sort_list);
app.data.radarr_data.movies.sort_asc = true;
let headers = ["column 1", "column 2"];
let managarr_table =
ManagarrTable::new(Some(&mut stateful_table), |&s| Row::new(vec![Cell::new(s)]))
.headers(headers);
let managarr_table = ManagarrTable::new(
&mut app,
|app| Some(&mut app.data.radarr_data.movies),
|movie: &crate::models::radarr_models::Movie| Row::new(vec![Cell::new(movie.title.to_string())]),
)
.headers(headers);
assert_eq!(
managarr_table.parse_headers(),