feat(ui): Initial UI support for switching to Sonarr tabs

This commit is contained in:
2024-11-29 15:58:19 -07:00
parent 4d1b0fe301
commit 08f190fc6e
13 changed files with 537 additions and 19 deletions
@@ -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,
}
}