269 lines
10 KiB
Rust
269 lines
10 KiB
Rust
#[cfg(test)]
|
|
mod tests {
|
|
use crate::app::App;
|
|
use crate::models::stateful_list::StatefulList;
|
|
use crate::models::stateful_table::SortOption;
|
|
use crate::models::{HorizontallyScrollableText, Scrollable};
|
|
use crate::ui::utils::borderless_block;
|
|
use crate::ui::widgets::managarr_table::ManagarrTable;
|
|
use pretty_assertions::assert_eq;
|
|
use ratatui::layout::Constraint;
|
|
use ratatui::text::Text;
|
|
use ratatui::widgets::{Cell, Row};
|
|
use std::sync::atomic::AtomicUsize;
|
|
|
|
#[test]
|
|
fn test_managarr_table_new() {
|
|
let items = vec!["item1", "item2", "item3"];
|
|
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(
|
|
&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())]),
|
|
);
|
|
|
|
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
|
|
assert_eq!(managarr_table.constraints, Vec::new());
|
|
assert_eq!(managarr_table.block, borderless_block());
|
|
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, 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 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),
|
|
};
|
|
app.data.radarr_data.movies.search = Some(horizontally_scrollable_test);
|
|
|
|
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())]),
|
|
);
|
|
|
|
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
|
|
assert_eq!(managarr_table.constraints, Vec::new());
|
|
assert_eq!(managarr_table.block, borderless_block());
|
|
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 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),
|
|
};
|
|
app.data.radarr_data.movies.filter = Some(horizontally_scrollable_test);
|
|
|
|
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())]),
|
|
);
|
|
|
|
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
|
|
assert_eq!(managarr_table.constraints, Vec::new());
|
|
assert_eq!(managarr_table.block, borderless_block());
|
|
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]
|
|
fn test_managarr_table_headers() {
|
|
let items = vec!["item1", "item2", "item3"];
|
|
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(
|
|
&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.table_headers, headers);
|
|
assert_eq!(managarr_table.constraints, Vec::new());
|
|
assert_eq!(managarr_table.block, borderless_block());
|
|
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, 0);
|
|
assert_eq!(managarr_table.filter_box_offset, 0);
|
|
}
|
|
|
|
#[test]
|
|
fn test_managarr_table_constraints() {
|
|
let items = vec!["item1", "item2", "item3"];
|
|
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(
|
|
&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);
|
|
|
|
assert_eq!(managarr_table.constraints, constraints);
|
|
assert_eq!(managarr_table.table_headers, Vec::<String>::new());
|
|
assert_eq!(managarr_table.block, borderless_block());
|
|
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, 0);
|
|
assert_eq!(managarr_table.filter_box_offset, 0);
|
|
}
|
|
|
|
#[test]
|
|
fn test_managarr_table_parse_headers() {
|
|
let items = vec!["item1", "item2", "item3"];
|
|
let mut sort_list = StatefulList::default();
|
|
sort_list.set_items(vec![
|
|
SortOption {
|
|
name: "column 1",
|
|
cmp_fn: None,
|
|
},
|
|
SortOption {
|
|
name: "column 2",
|
|
cmp_fn: None,
|
|
},
|
|
]);
|
|
sort_list.scroll_down();
|
|
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(
|
|
&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(),
|
|
vec![Text::from("column 1"), Text::from("column 2 ▼")]
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_managarr_table_parse_headers_ascending() {
|
|
let items = vec!["item1", "item2", "item3"];
|
|
let mut sort_list = StatefulList::default();
|
|
sort_list.set_items(vec![
|
|
SortOption {
|
|
name: "column 1",
|
|
cmp_fn: None,
|
|
},
|
|
SortOption {
|
|
name: "column 2",
|
|
cmp_fn: None,
|
|
},
|
|
]);
|
|
sort_list.scroll_down();
|
|
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(
|
|
&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(),
|
|
vec![Text::from("column 1"), Text::from("column 2 ▲")]
|
|
);
|
|
}
|
|
}
|