feat: Added CLI and TUI support for editing Lidarr artists

This commit is contained in:
2026-01-07 12:01:03 -07:00
parent 3c1634d1e3
commit b1afdaf541
49 changed files with 2338 additions and 296 deletions
+2 -2
View File
@@ -12,7 +12,7 @@ use crate::models::servarr_data::lidarr::modals::EditArtistModal;
use crate::render_selectable_input_box;
use crate::ui::styles::ManagarrStyle;
use crate::ui::utils::{title_block_centered};
use crate::ui::utils::title_block_centered;
use crate::ui::widgets::button::Button;
use crate::ui::widgets::checkbox::Checkbox;
use crate::ui::widgets::input_box::InputBox;
@@ -91,7 +91,7 @@ fn draw_edit_artist_confirmation_prompt(f: &mut Frame<'_>, app: &mut App<'_>, ar
let selected_metadata_profile = metadata_profile_list.current_selection();
let [
_,
_,
monitored_area,
monitor_new_items_area,
quality_profile_area,
@@ -1,22 +1,49 @@
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use strum::IntoEnumIterator;
use crate::models::Route;
use crate::models::servarr_data::lidarr::lidarr_data::{ActiveLidarrBlock, EDIT_ARTIST_BLOCKS};
use crate::app::App;
use crate::models::BlockSelectionState;
use crate::models::servarr_data::lidarr::lidarr_data::{
ActiveLidarrBlock, EDIT_ARTIST_BLOCKS, EDIT_ARTIST_SELECTION_BLOCKS,
};
use crate::ui::DrawUi;
use crate::ui::lidarr_ui::library::edit_artist_ui::EditArtistUi;
use crate::ui::ui_test_utils::test_utils::render_to_string_with_app;
#[test]
fn test_edit_artist_ui_accepts() {
let mut edit_artist_ui_blocks = Vec::new();
for block in ActiveLidarrBlock::iter() {
if EditArtistUi::accepts(Route::Lidarr(block, None)) {
edit_artist_ui_blocks.push(block);
ActiveLidarrBlock::iter().for_each(|active_lidarr_block| {
if EDIT_ARTIST_BLOCKS.contains(&active_lidarr_block) {
assert!(EditArtistUi::accepts(active_lidarr_block.into()));
} else {
assert!(!EditArtistUi::accepts(active_lidarr_block.into()));
}
}
});
}
assert_eq!(edit_artist_ui_blocks, EDIT_ARTIST_BLOCKS.to_vec());
mod snapshot_tests {
use crate::ui::ui_test_utils::test_utils::TerminalSize;
use rstest::rstest;
use super::*;
#[rstest]
#[case(ActiveLidarrBlock::EditArtistPrompt)]
#[case(ActiveLidarrBlock::EditArtistConfirmPrompt)]
#[case(ActiveLidarrBlock::EditArtistSelectMetadataProfile)]
#[case(ActiveLidarrBlock::EditArtistSelectMonitorNewItems)]
#[case(ActiveLidarrBlock::EditArtistSelectQualityProfile)]
fn test_edit_artist_ui_renders(#[case] active_lidarr_block: ActiveLidarrBlock) {
let mut app = App::test_default_fully_populated();
app.push_navigation_stack(active_lidarr_block.into());
app.data.lidarr_data.selected_block = BlockSelectionState::new(EDIT_ARTIST_SELECTION_BLOCKS);
let output = render_to_string_with_app(TerminalSize::Large, &mut app, |f, app| {
EditArtistUi::draw(f, app, f.area());
});
insta::assert_snapshot!(format!("edit_artist_{active_lidarr_block}"), output);
}
}
}
@@ -24,7 +24,7 @@ expression: output
│ │
│ │
│ ╭───╮ │
│ Delete Artist Files: │ │ │
│ Delete Artist Files: │ │ │
│ ╰───╯ │
│ ╭───╮ │
│ Add List Exclusion: │ │ │
@@ -0,0 +1,48 @@
---
source: src/ui/lidarr_ui/library/edit_artist_ui_tests.rs
expression: output
---
╭─────────────────────────────────────────────── Edit - ───────────────────────────────────────────────╮
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ ╭───╮ │
│ Monitored: │ ✔ │ │
│ ╰───╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Monitor New Albums: │All Albums ▼ │ │
│ ╰─────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Quality Profile: │Lossless ▼ │ │
│ ╰─────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Metadata Profile: │Standard ▼ │ │
│ ╰─────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Path: │/nfs/music │ │
│ ╰─────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Tags: │alex │ │
│ ╰─────────────────────────────────────────────────╯ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│╭───────────────────────────────────────────────────╮╭──────────────────────────────────────────────────╮│
││ Save ││ Cancel ││
│╰───────────────────────────────────────────────────╯╰──────────────────────────────────────────────────╯│
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -0,0 +1,48 @@
---
source: src/ui/lidarr_ui/library/edit_artist_ui_tests.rs
expression: output
---
╭─────────────────────────────────────────────── Edit - ───────────────────────────────────────────────╮
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ ╭───╮ │
│ Monitored: │ ✔ │ │
│ ╰───╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Monitor New Albums: │All Albums ▼ │ │
│ ╰─────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Quality Profile: │Lossless ▼ │ │
│ ╰─────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Metadata Profile: │Standard ▼ │ │
│ ╰─────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Path: │/nfs/music │ │
│ ╰─────────────────────────────────────────────────╯ │
│ ╭─────────────────────────────────────────────────╮ │
│ Tags: │alex │ │
│ ╰─────────────────────────────────────────────────╯ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│╭───────────────────────────────────────────────────╮╭──────────────────────────────────────────────────╮│
││ Save ││ Cancel ││
│╰───────────────────────────────────────────────────╯╰──────────────────────────────────────────────────╯│
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -0,0 +1,48 @@
---
source: src/ui/lidarr_ui/library/edit_artist_ui_tests.rs
expression: output
---
╭─────────────────────────────────────────────── Edit - ───────────────────────────────────────────────╮
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ ╭───╮ │
│ Monitored: │ ✔ │ │
│ ╰───╯ │
│ ╭───────────────────────────────╮──────────────────────────────╮ │
│ Monitor│Standard │ ▼ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ Qual│ │ ▼ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ Metad│ │ ▼ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ │ │ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ │ │ │ │
│ ╰───────────────────────────────╯──────────────────────────────╯ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│╭───────────────────────────────────────────────────╮╭──────────────────────────────────────────────────╮│
││ Save ││ Cancel ││
│╰───────────────────────────────────────────────────╯╰──────────────────────────────────────────────────╯│
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -0,0 +1,48 @@
---
source: src/ui/lidarr_ui/library/edit_artist_ui_tests.rs
expression: output
---
╭─────────────────────────────────────────────── Edit - ───────────────────────────────────────────────╮
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ ╭───╮ │
│ Monitored: │ ✔ │ │
│ ╰───╯ │
│ ╭───────────────────────────────╮──────────────────────────────╮ │
│ Monitor│All Albums │ ▼ │ │
│ │No New Albums │──────────────────────────────╯ │
│ │New Albums │──────────────────────────────╮ │
│ Qual│ │ ▼ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ Metad│ │ ▼ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ │ │ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ │ │ │ │
│ ╰───────────────────────────────╯──────────────────────────────╯ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│╭───────────────────────────────────────────────────╮╭──────────────────────────────────────────────────╮│
││ Save ││ Cancel ││
│╰───────────────────────────────────────────────────╯╰──────────────────────────────────────────────────╯│
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -0,0 +1,48 @@
---
source: src/ui/lidarr_ui/library/edit_artist_ui_tests.rs
expression: output
---
╭─────────────────────────────────────────────── Edit - ───────────────────────────────────────────────╮
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ ╭───╮ │
│ Monitored: │ ✔ │ │
│ ╰───╯ │
│ ╭───────────────────────────────╮──────────────────────────────╮ │
│ Monitor│Lossless │ ▼ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ Qual│ │ ▼ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ Metad│ │ ▼ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ │ │ │ │
│ │ │──────────────────────────────╯ │
│ │ │──────────────────────────────╮ │
│ │ │ │ │
│ ╰───────────────────────────────╯──────────────────────────────╯ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│╭───────────────────────────────────────────────────╮╭──────────────────────────────────────────────────╮│
││ Save ││ Cancel ││
│╰───────────────────────────────────────────────────╯╰──────────────────────────────────────────────────╯│
╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -24,7 +24,7 @@ expression: output
│ │
│ │
│ ╭───╮ │
│ Delete Artist Files: │ │ │
│ Delete Artist Files: │ │ │
│ ╰───╯ │
│ ╭───╮ │
│ Add List Exclusion: │ │ │