testing
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
use serde_json::Number;
|
||||
|
||||
use crate::app::lidarr::lidarr_context_clues::ARTISTS_CONTEXT_CLUES;
|
||||
use crate::models::{
|
||||
BlockSelectionState, Route, TabRoute, TabState,
|
||||
@@ -8,9 +10,17 @@ use crate::models::{
|
||||
use crate::network::lidarr_network::LidarrEvent;
|
||||
use bimap::BiMap;
|
||||
use chrono::{DateTime, Utc};
|
||||
use strum::EnumIter;
|
||||
use strum::{EnumIter};
|
||||
use super::modals::EditArtistModal;
|
||||
#[cfg(test)]
|
||||
use strum::{Display, EnumString};
|
||||
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::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},
|
||||
};
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "lidarr_data_tests.rs"]
|
||||
@@ -22,6 +32,7 @@ pub struct LidarrData<'a> {
|
||||
pub delete_artist_files: bool,
|
||||
pub disk_space_vec: Vec<DiskSpace>,
|
||||
pub downloads: StatefulTable<DownloadRecord>,
|
||||
pub edit_artist_modal: Option<EditArtistModal>,
|
||||
pub main_tabs: TabState,
|
||||
pub metadata_profile_map: BiMap<i64, String>,
|
||||
pub prompt_confirm: bool,
|
||||
@@ -39,6 +50,31 @@ impl LidarrData<'_> {
|
||||
self.delete_artist_files = false;
|
||||
self.add_import_list_exclusion = false;
|
||||
}
|
||||
|
||||
pub fn tag_ids_to_display(&self, tag_ids: &[Number]) -> String {
|
||||
tag_ids
|
||||
.iter()
|
||||
.filter_map(|id| {
|
||||
let id = id.as_i64()?;
|
||||
self.tags_map.get_by_left(&id).cloned()
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ")
|
||||
}
|
||||
|
||||
pub fn sorted_quality_profile_names(&self) -> Vec<String> {
|
||||
let mut quality_profile_names: Vec<String> =
|
||||
self.quality_profile_map.right_values().cloned().collect();
|
||||
quality_profile_names.sort();
|
||||
quality_profile_names
|
||||
}
|
||||
|
||||
pub fn sorted_metadata_profile_names(&self) -> Vec<String> {
|
||||
let mut metadata_profile_names: Vec<String> =
|
||||
self.metadata_profile_map.right_values().cloned().collect();
|
||||
metadata_profile_names.sort();
|
||||
metadata_profile_names
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Default for LidarrData<'a> {
|
||||
@@ -49,6 +85,7 @@ impl<'a> Default for LidarrData<'a> {
|
||||
delete_artist_files: false,
|
||||
disk_space_vec: Vec::new(),
|
||||
downloads: StatefulTable::default(),
|
||||
edit_artist_modal: None,
|
||||
metadata_profile_map: BiMap::new(),
|
||||
prompt_confirm: false,
|
||||
prompt_confirm_action: None,
|
||||
@@ -71,11 +108,25 @@ impl<'a> Default for LidarrData<'a> {
|
||||
#[cfg(test)]
|
||||
impl LidarrData<'_> {
|
||||
pub fn test_default_fully_populated() -> Self {
|
||||
use crate::models::lidarr_models::{Artist, DownloadRecord};
|
||||
use crate::models::servarr_models::{DiskSpace, RootFolder};
|
||||
use crate::models::stateful_table::SortOption;
|
||||
let mut edit_artist_modal = EditArtistModal {
|
||||
monitored: Some(true),
|
||||
path: "/nfs/music".into(),
|
||||
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]);
|
||||
|
||||
let mut lidarr_data = LidarrData::default();
|
||||
let mut lidarr_data = LidarrData {
|
||||
delete_artist_files: true,
|
||||
disk_space_vec: vec![diskspace()],
|
||||
quality_profile_map: quality_profile_map(),
|
||||
metadata_profile_map: metadata_profile_map(),
|
||||
edit_artist_modal: Some(edit_artist_modal),
|
||||
tags_map: tags_map(),
|
||||
..LidarrData::default()
|
||||
};
|
||||
lidarr_data.artists.set_items(vec![Artist::default()]);
|
||||
lidarr_data.artists.sorting(vec![SortOption {
|
||||
name: "Name",
|
||||
@@ -83,19 +134,12 @@ impl LidarrData<'_> {
|
||||
}]);
|
||||
lidarr_data.artists.search = Some("artist search".into());
|
||||
lidarr_data.artists.filter = Some("artist filter".into());
|
||||
lidarr_data.quality_profile_map = BiMap::from_iter([(1i64, "Lossless".to_owned())]);
|
||||
lidarr_data.metadata_profile_map = BiMap::from_iter([(1i64, "Standard".to_owned())]);
|
||||
lidarr_data.tags_map = BiMap::from_iter([(1i64, "usenet".to_owned())]);
|
||||
lidarr_data.disk_space_vec = vec![DiskSpace {
|
||||
free_space: 50000000000,
|
||||
total_space: 100000000000,
|
||||
}];
|
||||
lidarr_data
|
||||
.downloads
|
||||
.set_items(vec![DownloadRecord::default()]);
|
||||
.set_items(vec![download_record()]);
|
||||
lidarr_data
|
||||
.root_folders
|
||||
.set_items(vec![RootFolder::default()]);
|
||||
.set_items(vec![root_folder()]);
|
||||
lidarr_data.version = "1.0.0".to_owned();
|
||||
|
||||
lidarr_data
|
||||
@@ -112,6 +156,14 @@ pub enum ActiveLidarrBlock {
|
||||
DeleteArtistConfirmPrompt,
|
||||
DeleteArtistToggleDeleteFile,
|
||||
DeleteArtistToggleAddListExclusion,
|
||||
EditArtistPrompt,
|
||||
EditArtistConfirmPrompt,
|
||||
EditArtistPathInput,
|
||||
EditArtistSelectMetadataProfile,
|
||||
EditArtistSelectMonitorNewItems,
|
||||
EditArtistSelectQualityProfile,
|
||||
EditArtistTagsInput,
|
||||
EditArtistToggleMonitored,
|
||||
FilterArtists,
|
||||
FilterArtistsError,
|
||||
SearchArtists,
|
||||
@@ -142,6 +194,27 @@ pub const DELETE_ARTIST_SELECTION_BLOCKS: &[&[ActiveLidarrBlock]] = &[
|
||||
&[ActiveLidarrBlock::DeleteArtistConfirmPrompt],
|
||||
];
|
||||
|
||||
pub static EDIT_ARTIST_BLOCKS: [ActiveLidarrBlock; 8] = [
|
||||
ActiveLidarrBlock::EditArtistPrompt,
|
||||
ActiveLidarrBlock::EditArtistConfirmPrompt,
|
||||
ActiveLidarrBlock::EditArtistPathInput,
|
||||
ActiveLidarrBlock::EditArtistSelectMetadataProfile,
|
||||
ActiveLidarrBlock::EditArtistSelectMonitorNewItems,
|
||||
ActiveLidarrBlock::EditArtistSelectQualityProfile,
|
||||
ActiveLidarrBlock::EditArtistTagsInput,
|
||||
ActiveLidarrBlock::EditArtistToggleMonitored,
|
||||
];
|
||||
|
||||
pub const EDIT_ARTIST_SELECTION_BLOCKS: &[&[ActiveLidarrBlock]] = &[
|
||||
&[ActiveLidarrBlock::EditArtistToggleMonitored],
|
||||
&[ActiveLidarrBlock::EditArtistSelectMonitorNewItems],
|
||||
&[ActiveLidarrBlock::EditArtistSelectQualityProfile],
|
||||
&[ActiveLidarrBlock::EditArtistSelectMetadataProfile],
|
||||
&[ActiveLidarrBlock::EditArtistPathInput],
|
||||
&[ActiveLidarrBlock::EditArtistTagsInput],
|
||||
&[ActiveLidarrBlock::EditArtistConfirmPrompt],
|
||||
];
|
||||
|
||||
impl From<ActiveLidarrBlock> for Route {
|
||||
fn from(active_lidarr_block: ActiveLidarrBlock) -> Route {
|
||||
Route::Lidarr(active_lidarr_block, None)
|
||||
|
||||
Reference in New Issue
Block a user