feat: Added CLI and TUI support for editing Lidarr artists
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
use serde_json::Number;
|
||||
|
||||
use super::modals::EditArtistModal;
|
||||
use crate::app::lidarr::lidarr_context_clues::ARTISTS_CONTEXT_CLUES;
|
||||
use crate::models::{
|
||||
BlockSelectionState, Route, TabRoute, TabState,
|
||||
@@ -10,16 +11,17 @@ use crate::models::{
|
||||
use crate::network::lidarr_network::LidarrEvent;
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use strum::{EnumIter};
|
||||
use super::modals::EditArtistModal;
|
||||
use strum::EnumIter;
|
||||
#[cfg(test)]
|
||||
use {
|
||||
strum::{Display, EnumString, IntoEnumIterator},
|
||||
crate::models::lidarr_models::NewItemMonitorType,
|
||||
crate::models::stateful_table::SortOption,
|
||||
crate::network::lidarr_network::lidarr_network_test_utils::test_utils::quality_profile_map,
|
||||
crate::network::lidarr_network::lidarr_network_test_utils::test_utils::{
|
||||
download_record, metadata_profile, metadata_profile_map, quality_profile, root_folder, tags_map,
|
||||
},
|
||||
crate::network::servarr_test_utils::diskspace,
|
||||
crate::network::lidarr_network::lidarr_network_test_utils::test_utils::{download_record, metadata_profile, metadata_profile_map, quality_profile, root_folder, tags_map},
|
||||
strum::{Display, EnumString, IntoEnumIterator},
|
||||
};
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -114,9 +116,15 @@ impl LidarrData<'_> {
|
||||
tags: "alex".into(),
|
||||
..EditArtistModal::default()
|
||||
};
|
||||
edit_artist_modal.monitor_list.set_items(NewItemMonitorType::iter().collect());
|
||||
edit_artist_modal.quality_profile_list.set_items(vec![quality_profile().name]);
|
||||
edit_artist_modal.metadata_profile_list.set_items(vec![metadata_profile().name]);
|
||||
edit_artist_modal
|
||||
.monitor_list
|
||||
.set_items(NewItemMonitorType::iter().collect());
|
||||
edit_artist_modal
|
||||
.quality_profile_list
|
||||
.set_items(vec![quality_profile().name]);
|
||||
edit_artist_modal
|
||||
.metadata_profile_list
|
||||
.set_items(vec![metadata_profile().name]);
|
||||
|
||||
let mut lidarr_data = LidarrData {
|
||||
delete_artist_files: true,
|
||||
@@ -134,12 +142,8 @@ impl LidarrData<'_> {
|
||||
}]);
|
||||
lidarr_data.artists.search = Some("artist search".into());
|
||||
lidarr_data.artists.filter = Some("artist filter".into());
|
||||
lidarr_data
|
||||
.downloads
|
||||
.set_items(vec![download_record()]);
|
||||
lidarr_data
|
||||
.root_folders
|
||||
.set_items(vec![root_folder()]);
|
||||
lidarr_data.downloads.set_items(vec![download_record()]);
|
||||
lidarr_data.root_folders.set_items(vec![root_folder()]);
|
||||
lidarr_data.version = "1.0.0".to_owned();
|
||||
|
||||
lidarr_data
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use bimap::BiMap;
|
||||
use crate::app::lidarr::lidarr_context_clues::ARTISTS_CONTEXT_CLUES;
|
||||
use crate::models::servarr_data::lidarr::lidarr_data::{DELETE_ARTIST_BLOCKS, DELETE_ARTIST_SELECTION_BLOCKS, EDIT_ARTIST_BLOCKS, EDIT_ARTIST_SELECTION_BLOCKS};
|
||||
use crate::models::servarr_data::lidarr::lidarr_data::{
|
||||
DELETE_ARTIST_BLOCKS, DELETE_ARTIST_SELECTION_BLOCKS, EDIT_ARTIST_BLOCKS,
|
||||
EDIT_ARTIST_SELECTION_BLOCKS,
|
||||
};
|
||||
use crate::models::{
|
||||
BlockSelectionState, Route,
|
||||
servarr_data::lidarr::lidarr_data::{ActiveLidarrBlock, LIBRARY_BLOCKS, LidarrData},
|
||||
};
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use pretty_assertions::{assert_eq, assert_str_eq};
|
||||
use serde_json::Number;
|
||||
@@ -52,7 +55,10 @@ mod tests {
|
||||
..LidarrData::default()
|
||||
};
|
||||
|
||||
assert_str_eq!(lidarr_data.tag_ids_to_display(&[Number::from(1), Number::from(2)]), "test 1, test 2");
|
||||
assert_str_eq!(
|
||||
lidarr_data.tag_ids_to_display(&[Number::from(1), Number::from(2)]),
|
||||
"test 1, test 2"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -65,9 +71,16 @@ mod tests {
|
||||
quality_profile_map,
|
||||
..LidarrData::default()
|
||||
};
|
||||
let expected_quality_profile_vec = vec!["test 1".to_owned(), "test 2".to_owned(), "test 3".to_owned()];
|
||||
let expected_quality_profile_vec = vec![
|
||||
"test 1".to_owned(),
|
||||
"test 2".to_owned(),
|
||||
"test 3".to_owned(),
|
||||
];
|
||||
|
||||
assert_iter_eq!(lidarr_data.sorted_quality_profile_names(), expected_quality_profile_vec);
|
||||
assert_iter_eq!(
|
||||
lidarr_data.sorted_quality_profile_names(),
|
||||
expected_quality_profile_vec
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -80,9 +93,16 @@ mod tests {
|
||||
metadata_profile_map,
|
||||
..LidarrData::default()
|
||||
};
|
||||
let expected_metadata_profile_vec = vec!["test 1".to_owned(), "test 2".to_owned(), "test 3".to_owned()];
|
||||
let expected_metadata_profile_vec = vec![
|
||||
"test 1".to_owned(),
|
||||
"test 2".to_owned(),
|
||||
"test 3".to_owned(),
|
||||
];
|
||||
|
||||
assert_iter_eq!(lidarr_data.sorted_metadata_profile_names(), expected_metadata_profile_vec);
|
||||
assert_iter_eq!(
|
||||
lidarr_data.sorted_metadata_profile_names(),
|
||||
expected_metadata_profile_vec
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -176,13 +196,34 @@ mod tests {
|
||||
fn test_edit_artist_selection_blocks_ordering() {
|
||||
let mut edit_artist_block_iter = EDIT_ARTIST_SELECTION_BLOCKS.iter();
|
||||
|
||||
assert_eq!(edit_artist_block_iter.next().unwrap(), &[ActiveLidarrBlock::EditArtistToggleMonitored]);
|
||||
assert_eq!(edit_artist_block_iter.next().unwrap(), &[ActiveLidarrBlock::EditArtistSelectMonitorNewItems]);
|
||||
assert_eq!(edit_artist_block_iter.next().unwrap(), &[ActiveLidarrBlock::EditArtistSelectQualityProfile]);
|
||||
assert_eq!(edit_artist_block_iter.next().unwrap(), &[ActiveLidarrBlock::EditArtistSelectMetadataProfile]);
|
||||
assert_eq!(edit_artist_block_iter.next().unwrap(), &[ActiveLidarrBlock::EditArtistPathInput]);
|
||||
assert_eq!(edit_artist_block_iter.next().unwrap(), &[ActiveLidarrBlock::EditArtistTagsInput]);
|
||||
assert_eq!(edit_artist_block_iter.next().unwrap(), &[ActiveLidarrBlock::EditArtistConfirmPrompt]);
|
||||
assert_eq!(
|
||||
edit_artist_block_iter.next().unwrap(),
|
||||
&[ActiveLidarrBlock::EditArtistToggleMonitored]
|
||||
);
|
||||
assert_eq!(
|
||||
edit_artist_block_iter.next().unwrap(),
|
||||
&[ActiveLidarrBlock::EditArtistSelectMonitorNewItems]
|
||||
);
|
||||
assert_eq!(
|
||||
edit_artist_block_iter.next().unwrap(),
|
||||
&[ActiveLidarrBlock::EditArtistSelectQualityProfile]
|
||||
);
|
||||
assert_eq!(
|
||||
edit_artist_block_iter.next().unwrap(),
|
||||
&[ActiveLidarrBlock::EditArtistSelectMetadataProfile]
|
||||
);
|
||||
assert_eq!(
|
||||
edit_artist_block_iter.next().unwrap(),
|
||||
&[ActiveLidarrBlock::EditArtistPathInput]
|
||||
);
|
||||
assert_eq!(
|
||||
edit_artist_block_iter.next().unwrap(),
|
||||
&[ActiveLidarrBlock::EditArtistTagsInput]
|
||||
);
|
||||
assert_eq!(
|
||||
edit_artist_block_iter.next().unwrap(),
|
||||
&[ActiveLidarrBlock::EditArtistConfirmPrompt]
|
||||
);
|
||||
assert_none!(edit_artist_block_iter.next());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,10 +10,16 @@ mod tests {
|
||||
#[test]
|
||||
fn test_edit_artist_modal_from_lidarr_data() {
|
||||
let mut lidarr_data = LidarrData {
|
||||
quality_profile_map: BiMap::from_iter([(1i64, "HD - 1080p".to_owned()), (2i64, "Any".to_owned())]),
|
||||
metadata_profile_map: BiMap::from_iter([(1i64, "Standard".to_owned()), (2i64, "None".to_owned())]),
|
||||
quality_profile_map: BiMap::from_iter([
|
||||
(1i64, "HD - 1080p".to_owned()),
|
||||
(2i64, "Any".to_owned()),
|
||||
]),
|
||||
metadata_profile_map: BiMap::from_iter([
|
||||
(1i64, "Standard".to_owned()),
|
||||
(2i64, "None".to_owned()),
|
||||
]),
|
||||
tags_map: BiMap::from_iter([(1i64, "usenet".to_owned())]),
|
||||
..LidarrData::default()
|
||||
..LidarrData::default()
|
||||
};
|
||||
let artist = Artist {
|
||||
id: 1,
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
mod radarr_data_tests {
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use pretty_assertions::{assert_eq, assert_str_eq};
|
||||
use serde_json::Number;
|
||||
use crate::app::context_clues::{
|
||||
BLOCKLIST_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES,
|
||||
ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES,
|
||||
@@ -13,6 +9,10 @@ mod tests {
|
||||
COLLECTIONS_CONTEXT_CLUES, LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXT_CLUES,
|
||||
MOVIE_DETAILS_CONTEXT_CLUES,
|
||||
};
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use pretty_assertions::{assert_eq, assert_str_eq};
|
||||
use serde_json::Number;
|
||||
|
||||
use crate::models::Route;
|
||||
use crate::models::servarr_data::radarr::radarr_data::radarr_test_utils::utils;
|
||||
@@ -73,7 +73,10 @@ mod tests {
|
||||
..RadarrData::default()
|
||||
};
|
||||
|
||||
assert_str_eq!(radarr_data.tag_ids_to_display(&[Number::from(1), Number::from(2)]), "test 1, test 2");
|
||||
assert_str_eq!(
|
||||
radarr_data.tag_ids_to_display(&[Number::from(1), Number::from(2)]),
|
||||
"test 1, test 2"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -86,9 +89,16 @@ mod tests {
|
||||
quality_profile_map,
|
||||
..RadarrData::default()
|
||||
};
|
||||
let expected_quality_profile_vec = vec!["test 1".to_owned(), "test 2".to_owned(), "test 3".to_owned()];
|
||||
let expected_quality_profile_vec = vec![
|
||||
"test 1".to_owned(),
|
||||
"test 2".to_owned(),
|
||||
"test 3".to_owned(),
|
||||
];
|
||||
|
||||
assert_iter_eq!(radarr_data.sorted_quality_profile_names(), expected_quality_profile_vec);
|
||||
assert_iter_eq!(
|
||||
radarr_data.sorted_quality_profile_names(),
|
||||
expected_quality_profile_vec
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
mod sonarr_data_tests {
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use pretty_assertions::{assert_eq, assert_str_eq};
|
||||
use serde_json::Number;
|
||||
use crate::app::sonarr::sonarr_context_clues::SERIES_HISTORY_CONTEXT_CLUES;
|
||||
use crate::models::sonarr_models::{Season, SonarrHistoryItem};
|
||||
use crate::models::stateful_table::StatefulTable;
|
||||
@@ -23,6 +19,10 @@ mod tests {
|
||||
servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, SonarrData},
|
||||
},
|
||||
};
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use pretty_assertions::{assert_eq, assert_str_eq};
|
||||
use serde_json::Number;
|
||||
|
||||
#[test]
|
||||
fn test_from_active_sonarr_block_to_route() {
|
||||
@@ -89,7 +89,10 @@ mod tests {
|
||||
..SonarrData::default()
|
||||
};
|
||||
|
||||
assert_str_eq!(sonarr_data.tag_ids_to_display(&[Number::from(1), Number::from(2)]), "test 1, test 2");
|
||||
assert_str_eq!(
|
||||
sonarr_data.tag_ids_to_display(&[Number::from(1), Number::from(2)]),
|
||||
"test 1, test 2"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -102,9 +105,16 @@ mod tests {
|
||||
quality_profile_map,
|
||||
..SonarrData::default()
|
||||
};
|
||||
let expected_quality_profile_vec = vec!["test 1".to_owned(), "test 2".to_owned(), "test 3".to_owned()];
|
||||
let expected_quality_profile_vec = vec![
|
||||
"test 1".to_owned(),
|
||||
"test 2".to_owned(),
|
||||
"test 3".to_owned(),
|
||||
];
|
||||
|
||||
assert_iter_eq!(sonarr_data.sorted_quality_profile_names(), expected_quality_profile_vec);
|
||||
assert_iter_eq!(
|
||||
sonarr_data.sorted_quality_profile_names(),
|
||||
expected_quality_profile_vec
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -117,9 +127,16 @@ mod tests {
|
||||
language_profiles_map,
|
||||
..SonarrData::default()
|
||||
};
|
||||
let expected_language_profiles_vec = vec!["test 1".to_owned(), "test 2".to_owned(), "test 3".to_owned()];
|
||||
let expected_language_profiles_vec = vec![
|
||||
"test 1".to_owned(),
|
||||
"test 2".to_owned(),
|
||||
"test 3".to_owned(),
|
||||
];
|
||||
|
||||
assert_iter_eq!(sonarr_data.sorted_language_profile_names(), expected_language_profiles_vec);
|
||||
assert_iter_eq!(
|
||||
sonarr_data.sorted_language_profile_names(),
|
||||
expected_language_profiles_vec
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user