feat(ui): Initial UI support for switching to Sonarr tabs
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::models::servarr_data::sonarr::sonarr_data::ActiveSonarrBlock;
|
||||
use crate::models::{
|
||||
servarr_data::sonarr::sonarr_data::SERIES_BLOCKS, sonarr_models::SeriesStatus,
|
||||
};
|
||||
use crate::ui::sonarr_ui::library::LibraryUi;
|
||||
use crate::ui::styles::ManagarrStyle;
|
||||
use crate::ui::DrawUi;
|
||||
use pretty_assertions::assert_eq;
|
||||
use ratatui::widgets::{Cell, Row};
|
||||
use rstest::rstest;
|
||||
use strum::IntoEnumIterator;
|
||||
|
||||
use crate::{
|
||||
models::sonarr_models::{Series, SeriesStatistics},
|
||||
ui::sonarr_ui::library::decorate_series_row_with_style,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn test_library_ui_accepts() {
|
||||
let mut library_ui_blocks = Vec::new();
|
||||
library_ui_blocks.extend(SERIES_BLOCKS);
|
||||
|
||||
ActiveSonarrBlock::iter().for_each(|active_radarr_block| {
|
||||
if library_ui_blocks.contains(&active_radarr_block) {
|
||||
assert!(LibraryUi::accepts(active_radarr_block.into()));
|
||||
} else {
|
||||
assert!(!LibraryUi::accepts(active_radarr_block.into()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case(SeriesStatus::Ended, None, RowStyle::Missing)]
|
||||
#[case(SeriesStatus::Ended, Some(59.0), RowStyle::Missing)]
|
||||
#[case(SeriesStatus::Ended, Some(100.0), RowStyle::Downloaded)]
|
||||
#[case(SeriesStatus::Continuing, None, RowStyle::Missing)]
|
||||
#[case(SeriesStatus::Continuing, Some(59.0), RowStyle::Missing)]
|
||||
#[case(SeriesStatus::Continuing, Some(100.0), RowStyle::Unreleased)]
|
||||
#[case(SeriesStatus::Upcoming, None, RowStyle::Unreleased)]
|
||||
#[case(SeriesStatus::Deleted, None, RowStyle::Missing)]
|
||||
fn test_decorate_series_row_with_style(
|
||||
#[case] series_status: SeriesStatus,
|
||||
#[case] percent_of_episodes: Option<f64>,
|
||||
#[case] expected_row_style: RowStyle,
|
||||
) {
|
||||
let mut series = Series {
|
||||
status: series_status,
|
||||
..Series::default()
|
||||
};
|
||||
if let Some(percentage) = percent_of_episodes {
|
||||
series.statistics = Some(SeriesStatistics {
|
||||
percent_of_episodes: percentage,
|
||||
..SeriesStatistics::default()
|
||||
});
|
||||
}
|
||||
|
||||
let row = Row::new(vec![Cell::from("test".to_owned())]);
|
||||
|
||||
let style = decorate_series_row_with_style(&series, row.clone());
|
||||
|
||||
match expected_row_style {
|
||||
RowStyle::Downloaded => assert_eq!(style, row.downloaded()),
|
||||
RowStyle::Missing => assert_eq!(style, row.missing()),
|
||||
RowStyle::Unreleased => assert_eq!(style, row.unreleased()),
|
||||
}
|
||||
}
|
||||
|
||||
enum RowStyle {
|
||||
Downloaded,
|
||||
Missing,
|
||||
Unreleased,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user