From 280e691a9430704658ea365674f1b6c8f27b077a Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Thu, 3 Sep 2026 12:18:56 -0600 Subject: [PATCH] feat(readarr): render the edition details popup Draw the edition details popup over the book details view. The popup body is the scrollable text the book details handler builds from the already loaded edition row, so it needs no tabs and no network call. The text styling is extracted into a named function so both branches are unit tested, and the shared test fixture now holds the real field lines instead of a placeholder, which exercises the scroll offset and the values that themselves contain a colon. --- .../servarr_data/readarr/readarr_data.rs | 15 +- .../library/author_details_ui_tests.rs | 3 +- src/ui/readarr_ui/library/book_details_ui.rs | 8 +- .../library/book_details_ui_tests.rs | 19 +- .../readarr_ui/library/edition_details_ui.rs | 102 ++++++++++ .../library/edition_details_ui_tests.rs | 176 ++++++++++++++++++ src/ui/readarr_ui/library/library_ui_tests.rs | 4 +- src/ui/readarr_ui/library/mod.rs | 1 + ...ers_edition_details_over_book_details.snap | 50 +++++ ...hot_tests__edition_details_ui_renders.snap | 48 +++++ ...sts__edition_details_ui_renders_empty.snap | 48 +++++ ...s__edition_details_ui_renders_loading.snap | 48 +++++ ...n_the_book_details_modal_is_undefined.snap | 5 + ...he_edition_details_modal_is_undefined.snap | 5 + ...__edition_details_ui_renders_scrolled.snap | 48 +++++ ...details_ui_renders_with_zero_editions.snap | 48 +++++ 16 files changed, 622 insertions(+), 6 deletions(-) create mode 100644 src/ui/readarr_ui/library/edition_details_ui.rs create mode 100644 src/ui/readarr_ui/library/edition_details_ui_tests.rs create mode 100644 src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__book_details_ui__book_details_ui_tests__tests__snapshot_tests__book_details_ui_renders_edition_details_over_book_details.snap create mode 100644 src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders.snap create mode 100644 src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_empty.snap create mode 100644 src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_loading.snap create mode 100644 src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_nothing_when_the_book_details_modal_is_undefined.snap create mode 100644 src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_nothing_when_the_edition_details_modal_is_undefined.snap create mode 100644 src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_scrolled.snap create mode 100644 src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_with_zero_editions.snap diff --git a/src/models/servarr_data/readarr/readarr_data.rs b/src/models/servarr_data/readarr/readarr_data.rs index 95d11212..3a1cb8ef 100644 --- a/src/models/servarr_data/readarr/readarr_data.rs +++ b/src/models/servarr_data/readarr/readarr_data.rs @@ -447,7 +447,20 @@ impl ReadarrData<'_> { .set_items(vec!["Standard".to_owned()]); let edition_details_modal = EditionDetailsModal { - edition_details: ScrollableText::with_string("Some details".to_owned()), + edition_details: ScrollableText::with_string( + "Title: Test Edition +Format: Hardcover +Language: English +Publisher: DAW Books +Page Count: 288 +Release Date: 2023-05-20 00:00:00 UTC +ISBN13: 9780756404079 +ASIN: B0043RSJ9S +Ratings: 4.5 (1000 votes) +Monitored: true +Overview: A test edition overview." + .to_owned(), + ), }; let mut book_details_modal = BookDetailsModal { diff --git a/src/ui/readarr_ui/library/author_details_ui_tests.rs b/src/ui/readarr_ui/library/author_details_ui_tests.rs index 7abb83b7..2358f45b 100644 --- a/src/ui/readarr_ui/library/author_details_ui_tests.rs +++ b/src/ui/readarr_ui/library/author_details_ui_tests.rs @@ -7,7 +7,7 @@ mod tests { use crate::models::readarr_models::{Book, BookStatistics}; use crate::models::servarr_data::readarr::readarr_data::{ - AUTHOR_DETAILS_BLOCKS, ActiveReadarrBlock, BOOK_DETAILS_BLOCKS, + AUTHOR_DETAILS_BLOCKS, ActiveReadarrBlock, BOOK_DETAILS_BLOCKS, EDITION_DETAILS_BLOCKS, }; use crate::ui::DrawUi; use crate::ui::readarr_ui::library::author_details_ui::{ @@ -19,6 +19,7 @@ mod tests { fn test_author_details_ui_accepts() { let mut author_details_blocks = AUTHOR_DETAILS_BLOCKS.to_vec(); author_details_blocks.extend(BOOK_DETAILS_BLOCKS); + author_details_blocks.extend(EDITION_DETAILS_BLOCKS); ActiveReadarrBlock::iter().for_each(|active_readarr_block| { if author_details_blocks.contains(&active_readarr_block) { diff --git a/src/ui/readarr_ui/library/book_details_ui.rs b/src/ui/readarr_ui/library/book_details_ui.rs index 335a65f1..a2b3b714 100644 --- a/src/ui/readarr_ui/library/book_details_ui.rs +++ b/src/ui/readarr_ui/library/book_details_ui.rs @@ -2,6 +2,7 @@ use crate::app::App; use crate::models::Route; use crate::models::readarr_models::{BookFile, Edition, ReadarrHistoryItem, ReadarrRelease}; use crate::models::servarr_data::readarr::readarr_data::{ActiveReadarrBlock, BOOK_DETAILS_BLOCKS}; +use crate::ui::readarr_ui::library::edition_details_ui::EditionDetailsUi; use crate::ui::readarr_ui::readarr_ui_utils::create_history_event_details; use crate::ui::styles::{ManagarrStyle, secondary_style}; use crate::ui::utils::{ @@ -31,10 +32,11 @@ impl DrawUi for BookDetailsUi { let Route::Readarr(active_readarr_block, _) = route else { return false; }; - BOOK_DETAILS_BLOCKS.contains(&active_readarr_block) + EditionDetailsUi::accepts(route) || BOOK_DETAILS_BLOCKS.contains(&active_readarr_block) } fn draw(f: &mut Frame<'_>, app: &mut App<'_>, _area: Rect) { + let route = app.get_current_route(); if app.data.readarr_data.book_details_modal.is_some() && let Route::Readarr(active_readarr_block, _) = app.get_current_route() { @@ -98,6 +100,10 @@ impl DrawUi for BookDetailsUi { }; draw_popup(f, app, draw_book_details_popup, Size::XLarge); + + if EditionDetailsUi::accepts(route) { + EditionDetailsUi::draw(f, app, _area); + } } } } diff --git a/src/ui/readarr_ui/library/book_details_ui_tests.rs b/src/ui/readarr_ui/library/book_details_ui_tests.rs index 1b5a21d3..8ed9a024 100644 --- a/src/ui/readarr_ui/library/book_details_ui_tests.rs +++ b/src/ui/readarr_ui/library/book_details_ui_tests.rs @@ -7,7 +7,7 @@ mod tests { use crate::app::App; use crate::models::readarr_models::Edition; use crate::models::servarr_data::readarr::readarr_data::{ - ActiveReadarrBlock, BOOK_DETAILS_BLOCKS, + ActiveReadarrBlock, BOOK_DETAILS_BLOCKS, EDITION_DETAILS_BLOCKS, }; use crate::ui::DrawUi; use crate::ui::readarr_ui::library::book_details_ui::{ @@ -18,8 +18,11 @@ mod tests { #[test] fn test_book_details_ui_accepts() { + let mut book_details_blocks = BOOK_DETAILS_BLOCKS.to_vec(); + book_details_blocks.extend(EDITION_DETAILS_BLOCKS); + ActiveReadarrBlock::iter().for_each(|active_readarr_block| { - if BOOK_DETAILS_BLOCKS.contains(&active_readarr_block) { + if book_details_blocks.contains(&active_readarr_block) { assert!(BookDetailsUi::accepts(active_readarr_block.into())); } else { assert!(!BookDetailsUi::accepts(active_readarr_block.into())); @@ -238,5 +241,17 @@ mod tests { insta::assert_snapshot!(output); } + + #[test] + fn test_book_details_ui_renders_edition_details_over_book_details() { + let mut app = App::test_default_fully_populated(); + app.push_navigation_stack(ActiveReadarrBlock::BookEditionDetails.into()); + + let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| { + BookDetailsUi::draw(f, app, f.area()); + }); + + insta::assert_snapshot!(output); + } } } diff --git a/src/ui/readarr_ui/library/edition_details_ui.rs b/src/ui/readarr_ui/library/edition_details_ui.rs new file mode 100644 index 00000000..811bd1e6 --- /dev/null +++ b/src/ui/readarr_ui/library/edition_details_ui.rs @@ -0,0 +1,102 @@ +use crate::app::App; +use crate::models::Route; +use crate::models::readarr_models::Edition; +use crate::models::servarr_data::readarr::readarr_data::EDITION_DETAILS_BLOCKS; +use crate::ui::styles::{primary_style, unmonitored_style}; +use crate::ui::utils::title_block_centered; +use crate::ui::widgets::loading_block::LoadingBlock; +use crate::ui::widgets::popup::Size; +use crate::ui::{DrawUi, draw_popup}; +use ratatui::Frame; +use ratatui::layout::Rect; +use ratatui::style::{Style, Stylize}; +use ratatui::text::{Line, Span, Text}; +use ratatui::widgets::{Paragraph, Wrap}; + +#[cfg(test)] +#[path = "edition_details_ui_tests.rs"] +mod edition_details_ui_tests; + +pub(super) struct EditionDetailsUi; + +impl DrawUi for EditionDetailsUi { + fn accepts(route: Route) -> bool { + let Route::Readarr(active_readarr_block, _) = route else { + return false; + }; + EDITION_DETAILS_BLOCKS.contains(&active_readarr_block) + } + + fn draw(f: &mut Frame<'_>, app: &mut App<'_>, _area: Rect) { + if let Some(book_details_modal) = app.data.readarr_data.book_details_modal.as_ref() + && book_details_modal.edition_details_modal.is_some() + { + let draw_edition_details_popup = |f: &mut Frame<'_>, app: &mut App<'_>, popup_area: Rect| { + draw_edition_details(f, app, popup_area); + }; + + draw_popup(f, app, draw_edition_details_popup, Size::Large); + } + } +} + +fn draw_edition_details(f: &mut Frame<'_>, app: &App<'_>, area: Rect) { + let block = title_block_centered("Edition Details"); + + match app.data.readarr_data.book_details_modal.as_ref() { + Some(book_details_modal) if !app.is_loading => { + if let Some(edition_details_modal) = book_details_modal.edition_details_modal.as_ref() { + let style = if book_details_modal.editions.is_empty() { + primary_style() + } else { + style_from_edition(book_details_modal.editions.current_selection()) + }; + let edition_details = &edition_details_modal.edition_details; + let text = Text::from( + edition_details + .items + .iter() + .filter(|line| !line.is_empty()) + .map(|line| { + let split = line.split(':').collect::>(); + let title = format!("{}:", split[0]); + + Line::from(vec![ + title.bold().style(style), + Span::styled(split[1..].join(":"), style), + ]) + }) + .collect::>>(), + ); + + let paragraph = Paragraph::new(text) + .block(block) + .wrap(Wrap { trim: false }) + .scroll((edition_details.offset, 0)); + + f.render_widget(paragraph, area); + } + } + _ => f.render_widget( + LoadingBlock::new( + app.is_loading + || app + .data + .readarr_data + .book_details_modal + .as_ref() + .is_none_or(|book_details_modal| book_details_modal.edition_details_modal.is_none()), + block, + ), + area, + ), + } +} + +fn style_from_edition(edition: &Edition) -> Style { + if !edition.monitored { + return unmonitored_style(); + } + + primary_style() +} diff --git a/src/ui/readarr_ui/library/edition_details_ui_tests.rs b/src/ui/readarr_ui/library/edition_details_ui_tests.rs new file mode 100644 index 00000000..7d7c6add --- /dev/null +++ b/src/ui/readarr_ui/library/edition_details_ui_tests.rs @@ -0,0 +1,176 @@ +#[cfg(test)] +mod tests { + use pretty_assertions::assert_eq; + use strum::IntoEnumIterator; + + use crate::app::App; + use crate::models::readarr_models::Edition; + use crate::models::servarr_data::readarr::readarr_data::{ + ActiveReadarrBlock, EDITION_DETAILS_BLOCKS, + }; + use crate::ui::DrawUi; + use crate::ui::readarr_ui::library::edition_details_ui::{EditionDetailsUi, style_from_edition}; + use crate::ui::styles::{primary_style, unmonitored_style}; + use crate::ui::ui_test_utils::test_utils::render_to_string_with_app; + + #[test] + fn test_edition_details_ui_accepts() { + ActiveReadarrBlock::iter().for_each(|active_readarr_block| { + if EDITION_DETAILS_BLOCKS.contains(&active_readarr_block) { + assert!(EditionDetailsUi::accepts(active_readarr_block.into())); + } else { + assert!(!EditionDetailsUi::accepts(active_readarr_block.into())); + } + }); + } + + #[test] + fn test_style_from_edition_monitored() { + let edition = Edition { + monitored: true, + ..Edition::default() + }; + + let style = style_from_edition(&edition); + + assert_eq!(style, primary_style()); + } + + #[test] + fn test_style_from_edition_unmonitored() { + let edition = Edition { + monitored: false, + ..Edition::default() + }; + + let style = style_from_edition(&edition); + + assert_eq!(style, unmonitored_style()); + } + + mod snapshot_tests { + use crate::models::servarr_data::readarr::modals::EditionDetailsModal; + use crate::models::stateful_table::StatefulTable; + use crate::ui::ui_test_utils::test_utils::TerminalSize; + + use super::*; + + #[test] + fn test_edition_details_ui_renders() { + let mut app = App::test_default_fully_populated(); + app.push_navigation_stack(ActiveReadarrBlock::BookEditionDetails.into()); + + let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| { + EditionDetailsUi::draw(f, app, f.area()); + }); + + insta::assert_snapshot!(output); + } + + #[test] + fn test_edition_details_ui_renders_loading() { + let mut app = App::test_default_fully_populated(); + app.is_loading = true; + app.push_navigation_stack(ActiveReadarrBlock::BookEditionDetails.into()); + + let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| { + EditionDetailsUi::draw(f, app, f.area()); + }); + + insta::assert_snapshot!(output); + } + + #[test] + fn test_edition_details_ui_renders_empty() { + let mut app = App::test_default_fully_populated(); + app.push_navigation_stack(ActiveReadarrBlock::BookEditionDetails.into()); + app + .data + .readarr_data + .book_details_modal + .as_mut() + .unwrap() + .edition_details_modal = Some(EditionDetailsModal::default()); + + let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| { + EditionDetailsUi::draw(f, app, f.area()); + }); + + insta::assert_snapshot!(output); + } + + #[test] + fn test_edition_details_ui_renders_with_zero_editions() { + let mut app = App::test_default_fully_populated(); + app.push_navigation_stack(ActiveReadarrBlock::BookEditionDetails.into()); + app + .data + .readarr_data + .book_details_modal + .as_mut() + .unwrap() + .editions = StatefulTable::default(); + + let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| { + EditionDetailsUi::draw(f, app, f.area()); + }); + + insta::assert_snapshot!(output); + } + + #[test] + fn test_edition_details_ui_renders_scrolled() { + let mut app = App::test_default_fully_populated(); + app.push_navigation_stack(ActiveReadarrBlock::BookEditionDetails.into()); + app + .data + .readarr_data + .book_details_modal + .as_mut() + .unwrap() + .edition_details_modal + .as_mut() + .unwrap() + .edition_details + .offset = 2; + + let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| { + EditionDetailsUi::draw(f, app, f.area()); + }); + + insta::assert_snapshot!(output); + } + + #[test] + fn test_edition_details_ui_renders_nothing_when_the_edition_details_modal_is_undefined() { + let mut app = App::test_default_fully_populated(); + app.push_navigation_stack(ActiveReadarrBlock::BookEditionDetails.into()); + app + .data + .readarr_data + .book_details_modal + .as_mut() + .unwrap() + .edition_details_modal = None; + + let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| { + EditionDetailsUi::draw(f, app, f.area()); + }); + + insta::assert_snapshot!(output); + } + + #[test] + fn test_edition_details_ui_renders_nothing_when_the_book_details_modal_is_undefined() { + let mut app = App::test_default_fully_populated(); + app.push_navigation_stack(ActiveReadarrBlock::BookEditionDetails.into()); + app.data.readarr_data.book_details_modal = None; + + let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| { + EditionDetailsUi::draw(f, app, f.area()); + }); + + insta::assert_snapshot!(output); + } + } +} diff --git a/src/ui/readarr_ui/library/library_ui_tests.rs b/src/ui/readarr_ui/library/library_ui_tests.rs index 30585818..757ffde3 100644 --- a/src/ui/readarr_ui/library/library_ui_tests.rs +++ b/src/ui/readarr_ui/library/library_ui_tests.rs @@ -4,7 +4,8 @@ mod tests { use crate::models::readarr_models::{Author, AuthorStatistics, AuthorStatus}; use crate::models::servarr_data::readarr::readarr_data::{ - AUTHOR_DETAILS_BLOCKS, ActiveReadarrBlock, BOOK_DETAILS_BLOCKS, LIBRARY_BLOCKS, + AUTHOR_DETAILS_BLOCKS, ActiveReadarrBlock, BOOK_DETAILS_BLOCKS, EDITION_DETAILS_BLOCKS, + LIBRARY_BLOCKS, }; use crate::ui::DrawUi; use crate::ui::readarr_ui::library::{LibraryUi, decorate_author_row_with_style}; @@ -17,6 +18,7 @@ mod tests { let mut blocks = LIBRARY_BLOCKS.to_vec(); blocks.extend(AUTHOR_DETAILS_BLOCKS); blocks.extend(BOOK_DETAILS_BLOCKS); + blocks.extend(EDITION_DETAILS_BLOCKS); for active_readarr_block in ActiveReadarrBlock::iter() { if blocks.contains(&active_readarr_block) { diff --git a/src/ui/readarr_ui/library/mod.rs b/src/ui/readarr_ui/library/mod.rs index 62ec5f9e..865576af 100644 --- a/src/ui/readarr_ui/library/mod.rs +++ b/src/ui/readarr_ui/library/mod.rs @@ -27,6 +27,7 @@ use crate::{ mod author_details_ui; mod book_details_ui; +mod edition_details_ui; #[cfg(test)] #[path = "library_ui_tests.rs"] diff --git a/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__book_details_ui__book_details_ui_tests__tests__snapshot_tests__book_details_ui_renders_edition_details_over_book_details.snap b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__book_details_ui__book_details_ui_tests__tests__snapshot_tests__book_details_ui_renders_edition_details_over_book_details.snap new file mode 100644 index 00000000..2c0295dd --- /dev/null +++ b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__book_details_ui__book_details_ui_tests__tests__snapshot_tests__book_details_ui_renders_edition_details_over_book_details.snap @@ -0,0 +1,50 @@ +--- +source: src/ui/readarr_ui/library/book_details_ui_tests.rs +expression: output +--- + + + + + ╭ Test Book Details ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ + │ Editions │ History │ File │ Manual Search │ + │──────╭─────────────────────────────────────────────────── Edition Details ────────────────────────────────────────────────────╮─────│ + │ For│Title: Test Edition │d │ + │=> Har│Format: Hardcover │ │ + │ │Language: English │ │ + │ │Publisher: DAW Books │ │ + │ │Page Count: 288 │ │ + │ │Release Date: 2023-05-20 00:00:00 UTC │ │ + │ │ISBN13: 9780756404079 │ │ + │ │ASIN: B0043RSJ9S │ │ + │ │Ratings: 4.5 (1000 votes) │ │ + │ │Monitored: true │ │ + │ │Overview: A test edition overview. │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │ + │ │ + ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders.snap b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders.snap new file mode 100644 index 00000000..1e44dfb2 --- /dev/null +++ b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders.snap @@ -0,0 +1,48 @@ +--- +source: src/ui/readarr_ui/library/edition_details_ui_tests.rs +expression: output +--- + + + + + + + ╭─────────────────────────────────────────────────── Edition Details ────────────────────────────────────────────────────╮ + │Title: Test Edition │ + │Format: Hardcover │ + │Language: English │ + │Publisher: DAW Books │ + │Page Count: 288 │ + │Release Date: 2023-05-20 00:00:00 UTC │ + │ISBN13: 9780756404079 │ + │ASIN: B0043RSJ9S │ + │Ratings: 4.5 (1000 votes) │ + │Monitored: true │ + │Overview: A test edition overview. │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_empty.snap b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_empty.snap new file mode 100644 index 00000000..2c3e7f2d --- /dev/null +++ b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_empty.snap @@ -0,0 +1,48 @@ +--- +source: src/ui/readarr_ui/library/edition_details_ui_tests.rs +expression: output +--- + + + + + + + ╭─────────────────────────────────────────────────── Edition Details ────────────────────────────────────────────────────╮ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_loading.snap b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_loading.snap new file mode 100644 index 00000000..6f99c2ff --- /dev/null +++ b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_loading.snap @@ -0,0 +1,48 @@ +--- +source: src/ui/readarr_ui/library/edition_details_ui_tests.rs +expression: output +--- + + + + + + + ╭─────────────────────────────────────────────────── Edition Details ────────────────────────────────────────────────────╮ + │ │ + │ │ + │ Loading ... │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_nothing_when_the_book_details_modal_is_undefined.snap b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_nothing_when_the_book_details_modal_is_undefined.snap new file mode 100644 index 00000000..8e88fe26 --- /dev/null +++ b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_nothing_when_the_book_details_modal_is_undefined.snap @@ -0,0 +1,5 @@ +--- +source: src/ui/readarr_ui/library/edition_details_ui_tests.rs +expression: output +--- + diff --git a/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_nothing_when_the_edition_details_modal_is_undefined.snap b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_nothing_when_the_edition_details_modal_is_undefined.snap new file mode 100644 index 00000000..8e88fe26 --- /dev/null +++ b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_nothing_when_the_edition_details_modal_is_undefined.snap @@ -0,0 +1,5 @@ +--- +source: src/ui/readarr_ui/library/edition_details_ui_tests.rs +expression: output +--- + diff --git a/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_scrolled.snap b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_scrolled.snap new file mode 100644 index 00000000..94901d82 --- /dev/null +++ b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_scrolled.snap @@ -0,0 +1,48 @@ +--- +source: src/ui/readarr_ui/library/edition_details_ui_tests.rs +expression: output +--- + + + + + + + ╭─────────────────────────────────────────────────── Edition Details ────────────────────────────────────────────────────╮ + │Language: English │ + │Publisher: DAW Books │ + │Page Count: 288 │ + │Release Date: 2023-05-20 00:00:00 UTC │ + │ISBN13: 9780756404079 │ + │ASIN: B0043RSJ9S │ + │Ratings: 4.5 (1000 votes) │ + │Monitored: true │ + │Overview: A test edition overview. │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_with_zero_editions.snap b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_with_zero_editions.snap new file mode 100644 index 00000000..1e44dfb2 --- /dev/null +++ b/src/ui/readarr_ui/library/snapshots/managarr__ui__readarr_ui__library__edition_details_ui__edition_details_ui_tests__tests__snapshot_tests__edition_details_ui_renders_with_zero_editions.snap @@ -0,0 +1,48 @@ +--- +source: src/ui/readarr_ui/library/edition_details_ui_tests.rs +expression: output +--- + + + + + + + ╭─────────────────────────────────────────────────── Edition Details ────────────────────────────────────────────────────╮ + │Title: Test Edition │ + │Format: Hardcover │ + │Language: English │ + │Publisher: DAW Books │ + │Page Count: 288 │ + │Release Date: 2023-05-20 00:00:00 UTC │ + │ISBN13: 9780756404079 │ + │ASIN: B0043RSJ9S │ + │Ratings: 4.5 (1000 votes) │ + │Monitored: true │ + │Overview: A test edition overview. │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + │ │ + ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯