test(lidarr): pin table search, filter and selection behaviour

The search and filter blocks a table configures were asserted nowhere, so
transposing them was invisible. Selections were also left at index 0 in
every test, which made current_selection() and items[0] indistinguishable,
including for the profile lists inside the edit and add prompts.
This commit is contained in:
Dark-Alex-17 committed 2026-09-09 15:51:10 -06:00
1 parent 18a50ab97c
commit f141e53f30
8 files changed
+419 -80

No files matched your search

@@ -196,6 +196,40 @@ mod tests {
assert_eq!(app.get_current_route(), ActiveLidarrBlock::History.into()); assert_eq!(app.get_current_route(), ActiveLidarrBlock::History.into());
assert!(!app.should_refresh); assert!(!app.should_refresh);
} }
#[test]
fn test_search_history_key() {
let mut app = App::test_default();
app.data.lidarr_data.history.set_items(history_vec());
app.push_navigation_stack(ActiveLidarrBlock::History.into());
HistoryHandler::new(
DEFAULT_KEYBINDINGS.search.key,
&mut app,
ActiveLidarrBlock::History,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::SearchHistory.into());
}
#[test]
fn test_filter_history_key() {
let mut app = App::test_default();
app.data.lidarr_data.history.set_items(history_vec());
app.push_navigation_stack(ActiveLidarrBlock::History.into());
HistoryHandler::new(
DEFAULT_KEYBINDINGS.filter.key,
&mut app,
ActiveLidarrBlock::History,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::FilterHistory.into());
}
} }
#[test] #[test]
@@ -1076,10 +1076,16 @@ mod tests {
.set_index(0, ADD_ARTIST_SELECTION_BLOCKS.len() - 1); .set_index(0, ADD_ARTIST_SELECTION_BLOCKS.len() - 1);
app.data.lidarr_data.prompt_confirm = true; app.data.lidarr_data.prompt_confirm = true;
let mut add_searched_artists = StatefulTable::default(); let mut add_searched_artists = StatefulTable::default();
add_searched_artists.set_items(vec![add_artist_search_result()]); let mut decoy_search_result = add_artist_search_result();
decoy_search_result.foreign_artist_id = "decoy-foreign-id".to_owned();
decoy_search_result.artist_name = "Decoy Artist".into();
add_searched_artists.set_items(vec![decoy_search_result, add_artist_search_result()]);
add_searched_artists.select_index(Some(1));
app.data.lidarr_data.add_searched_artists = Some(add_searched_artists); app.data.lidarr_data.add_searched_artists = Some(add_searched_artists);
app.data.lidarr_data.quality_profile_map = BiMap::from_iter([(1, "Test".to_owned())]); app.data.lidarr_data.quality_profile_map =
app.data.lidarr_data.metadata_profile_map = BiMap::from_iter([(1, "Test".to_owned())]); BiMap::from_iter([(1111, "Any".to_owned()), (2222, "Lossless".to_owned())]);
app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(3333, "None".to_owned()), (4444, "Standard".to_owned())]);
app.data.lidarr_data.add_artist_modal = Some(AddArtistModal { app.data.lidarr_data.add_artist_modal = Some(AddArtistModal {
tags: "usenet, testing".into(), tags: "usenet, testing".into(),
..AddArtistModal::default() ..AddArtistModal::default()
@@ -1092,6 +1098,15 @@ mod tests {
.unwrap() .unwrap()
.monitor_list .monitor_list
.set_items(Vec::from_iter(MonitorType::iter())); .set_items(Vec::from_iter(MonitorType::iter()));
app
.data
.lidarr_data
.add_artist_modal
.as_mut()
.unwrap()
.monitor_list
.state
.select(Some(1));
app app
.data .data
.lidarr_data .lidarr_data
@@ -1100,6 +1115,15 @@ mod tests {
.unwrap() .unwrap()
.monitor_new_items_list .monitor_new_items_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
app
.data
.lidarr_data
.add_artist_modal
.as_mut()
.unwrap()
.monitor_new_items_list
.state
.select(Some(1));
app app
.data .data
.lidarr_data .lidarr_data
@@ -1107,7 +1131,16 @@ mod tests {
.as_mut() .as_mut()
.unwrap() .unwrap()
.quality_profile_list .quality_profile_list
.set_items(vec!["Test".to_owned()]); .set_items(vec!["Any".to_owned(), "Lossless".to_owned()]);
app
.data
.lidarr_data
.add_artist_modal
.as_mut()
.unwrap()
.quality_profile_list
.state
.select(Some(1));
app app
.data .data
.lidarr_data .lidarr_data
@@ -1115,7 +1148,16 @@ mod tests {
.as_mut() .as_mut()
.unwrap() .unwrap()
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Test".to_owned()]); .set_items(vec!["None".to_owned(), "Standard".to_owned()]);
app
.data
.lidarr_data
.add_artist_modal
.as_mut()
.unwrap()
.metadata_profile_list
.state
.select(Some(1));
app app
.data .data
.lidarr_data .lidarr_data
@@ -1123,22 +1165,37 @@ mod tests {
.as_mut() .as_mut()
.unwrap() .unwrap()
.root_folder_list .root_folder_list
.set_items(vec![RootFolder { .set_items(vec![
path: "/music".to_owned(), RootFolder {
..RootFolder::default() path: "/decoy".to_owned(),
}]); ..RootFolder::default()
},
RootFolder {
path: "/music".to_owned(),
..RootFolder::default()
},
]);
app
.data
.lidarr_data
.add_artist_modal
.as_mut()
.unwrap()
.root_folder_list
.state
.select(Some(1));
let expected_add_artist_body = AddArtistBody { let expected_add_artist_body = AddArtistBody {
foreign_artist_id: "test-foreign-id".to_string(), foreign_artist_id: "test-foreign-id".to_string(),
artist_name: "Test Artist".to_string(), artist_name: "Test Artist".to_string(),
monitored: true, monitored: true,
root_folder_path: "/music".to_string(), root_folder_path: "/music".to_string(),
quality_profile_id: 1, quality_profile_id: 2222,
metadata_profile_id: 1, metadata_profile_id: 4444,
tags: Vec::default(), tags: Vec::default(),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
add_options: AddArtistOptions { add_options: AddArtistOptions {
monitor: MonitorType::All, monitor: MonitorType::Future,
monitor_new_items: NewItemMonitorType::All, monitor_new_items: NewItemMonitorType::None,
search_for_missing_albums: true, search_for_missing_albums: true,
}, },
}; };
@@ -1468,10 +1525,16 @@ mod tests {
.selected_block .selected_block
.set_index(0, ADD_ARTIST_SELECTION_BLOCKS.len() - 1); .set_index(0, ADD_ARTIST_SELECTION_BLOCKS.len() - 1);
let mut add_searched_artists = StatefulTable::default(); let mut add_searched_artists = StatefulTable::default();
add_searched_artists.set_items(vec![add_artist_search_result()]); let mut decoy_search_result = add_artist_search_result();
decoy_search_result.foreign_artist_id = "decoy-foreign-id".to_owned();
decoy_search_result.artist_name = "Decoy Artist".into();
add_searched_artists.set_items(vec![decoy_search_result, add_artist_search_result()]);
add_searched_artists.select_index(Some(1));
app.data.lidarr_data.add_searched_artists = Some(add_searched_artists); app.data.lidarr_data.add_searched_artists = Some(add_searched_artists);
app.data.lidarr_data.quality_profile_map = BiMap::from_iter([(1, "Test".to_owned())]); app.data.lidarr_data.quality_profile_map =
app.data.lidarr_data.metadata_profile_map = BiMap::from_iter([(1, "Test".to_owned())]); BiMap::from_iter([(1111, "Any".to_owned()), (2222, "Lossless".to_owned())]);
app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(3333, "None".to_owned()), (4444, "Standard".to_owned())]);
let mut add_artist_modal = AddArtistModal { let mut add_artist_modal = AddArtistModal {
tags: "usenet, testing".into(), tags: "usenet, testing".into(),
..AddArtistModal::default() ..AddArtistModal::default()
@@ -1479,15 +1542,22 @@ mod tests {
add_artist_modal add_artist_modal
.monitor_list .monitor_list
.set_items(Vec::from_iter(MonitorType::iter())); .set_items(Vec::from_iter(MonitorType::iter()));
add_artist_modal.monitor_list.state.select(Some(1));
add_artist_modal add_artist_modal
.monitor_new_items_list .monitor_new_items_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
add_artist_modal
.monitor_new_items_list
.state
.select(Some(1));
add_artist_modal add_artist_modal
.quality_profile_list .quality_profile_list
.set_items(vec!["Test".to_owned()]); .set_items(vec!["Any".to_owned(), "Lossless".to_owned()]);
add_artist_modal.quality_profile_list.state.select(Some(1));
add_artist_modal add_artist_modal
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Test".to_owned()]); .set_items(vec!["None".to_owned(), "Standard".to_owned()]);
add_artist_modal.metadata_profile_list.state.select(Some(1));
add_artist_modal.root_folder_list.set_items(vec![ add_artist_modal.root_folder_list.set_items(vec![
RootFolder { RootFolder {
id: 1, id: 1,
@@ -1511,13 +1581,13 @@ mod tests {
artist_name: "Test Artist".to_string(), artist_name: "Test Artist".to_string(),
monitored: true, monitored: true,
root_folder_path: "/nfs2".to_string(), root_folder_path: "/nfs2".to_string(),
quality_profile_id: 1, quality_profile_id: 2222,
metadata_profile_id: 1, metadata_profile_id: 4444,
tags: Vec::default(), tags: Vec::default(),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
add_options: AddArtistOptions { add_options: AddArtistOptions {
monitor: Default::default(), monitor: MonitorType::Future,
monitor_new_items: Default::default(), monitor_new_items: NewItemMonitorType::None,
search_for_missing_albums: true, search_for_missing_albums: true,
}, },
}; };
@@ -1641,34 +1711,47 @@ mod tests {
add_artist_modal.root_folder_list.state.select(Some(1)); add_artist_modal.root_folder_list.state.select(Some(1));
add_artist_modal add_artist_modal
.quality_profile_list .quality_profile_list
.set_items(vec!["Lossless".to_owned()]); .set_items(vec!["Any".to_owned(), "Lossless".to_owned()]);
add_artist_modal.quality_profile_list.state.select(Some(1));
add_artist_modal add_artist_modal
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Standard".to_owned()]); .set_items(vec!["None".to_owned(), "Standard".to_owned()]);
add_artist_modal.metadata_profile_list.state.select(Some(1));
add_artist_modal add_artist_modal
.monitor_list .monitor_list
.set_items(Vec::from_iter(MonitorType::iter())); .set_items(Vec::from_iter(MonitorType::iter()));
add_artist_modal.monitor_list.state.select(Some(1));
add_artist_modal add_artist_modal
.monitor_new_items_list .monitor_new_items_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
add_artist_modal
.monitor_new_items_list
.state
.select(Some(1));
app.data.lidarr_data.add_artist_modal = Some(add_artist_modal); app.data.lidarr_data.add_artist_modal = Some(add_artist_modal);
app.data.lidarr_data.quality_profile_map = BiMap::from_iter([(1, "Lossless".to_owned())]); app.data.lidarr_data.quality_profile_map =
app.data.lidarr_data.metadata_profile_map = BiMap::from_iter([(1, "Standard".to_owned())]); BiMap::from_iter([(1111, "Any".to_owned()), (2222, "Lossless".to_owned())]);
app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(3333, "None".to_owned()), (4444, "Standard".to_owned())]);
let mut add_searched_artists = StatefulTable::default(); let mut add_searched_artists = StatefulTable::default();
add_searched_artists.set_items(vec![add_artist_search_result()]); let mut decoy_search_result = add_artist_search_result();
decoy_search_result.foreign_artist_id = "decoy-foreign-id".to_owned();
decoy_search_result.artist_name = "Decoy Artist".into();
add_searched_artists.set_items(vec![decoy_search_result, add_artist_search_result()]);
add_searched_artists.select_index(Some(1));
app.data.lidarr_data.add_searched_artists = Some(add_searched_artists); app.data.lidarr_data.add_searched_artists = Some(add_searched_artists);
let expected_add_artist_body = AddArtistBody { let expected_add_artist_body = AddArtistBody {
foreign_artist_id: "test-foreign-id".to_string(), foreign_artist_id: "test-foreign-id".to_string(),
artist_name: "Test Artist".into(), artist_name: "Test Artist".into(),
monitored: true, monitored: true,
root_folder_path: "/nfs2".to_string(), root_folder_path: "/nfs2".to_string(),
quality_profile_id: 1, quality_profile_id: 2222,
metadata_profile_id: 1, metadata_profile_id: 4444,
tags: Vec::default(), tags: Vec::default(),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
add_options: AddArtistOptions { add_options: AddArtistOptions {
monitor: Default::default(), monitor: MonitorType::Future,
monitor_new_items: Default::default(), monitor_new_items: NewItemMonitorType::None,
search_for_missing_albums: true, search_for_missing_albums: true,
}, },
}; };
@@ -660,6 +660,54 @@ mod tests {
}) })
); );
} }
#[test]
fn test_search_tracks_key() {
let mut app = App::test_default_fully_populated();
app.push_navigation_stack(ActiveLidarrBlock::AlbumDetails.into());
AlbumDetailsHandler::new(
DEFAULT_KEYBINDINGS.search.key,
&mut app,
ActiveLidarrBlock::AlbumDetails,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::SearchTracks.into());
}
#[test]
fn test_search_album_history_key() {
let mut app = App::test_default_fully_populated();
app.push_navigation_stack(ActiveLidarrBlock::AlbumHistory.into());
AlbumDetailsHandler::new(
DEFAULT_KEYBINDINGS.search.key,
&mut app,
ActiveLidarrBlock::AlbumHistory,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::SearchAlbumHistory.into());
}
#[test]
fn test_filter_album_history_key() {
let mut app = App::test_default_fully_populated();
app.push_navigation_stack(ActiveLidarrBlock::AlbumHistory.into());
AlbumDetailsHandler::new(
DEFAULT_KEYBINDINGS.filter.key,
&mut app,
ActiveLidarrBlock::AlbumHistory,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::FilterAlbumHistory.into());
}
} }
#[test] #[test]
@@ -452,7 +452,7 @@ mod tests {
use crate::handlers::KeyEventHandler; use crate::handlers::KeyEventHandler;
use crate::handlers::lidarr_handlers::library::artist_details_handler::ArtistDetailsHandler; use crate::handlers::lidarr_handlers::library::artist_details_handler::ArtistDetailsHandler;
use crate::handlers::lidarr_handlers::library::artist_overview_handler::ArtistOverviewHandler; use crate::handlers::lidarr_handlers::library::artist_overview_handler::ArtistOverviewHandler;
use crate::models::lidarr_models::Artist; use crate::models::lidarr_models::{Album, Artist, LidarrHistoryItem};
use crate::models::servarr_data::lidarr::lidarr_data::{ use crate::models::servarr_data::lidarr::lidarr_data::{
ActiveLidarrBlock, EDIT_ARTIST_SELECTION_BLOCKS, ActiveLidarrBlock, EDIT_ARTIST_SELECTION_BLOCKS,
}; };
@@ -966,6 +966,69 @@ mod tests {
})) }))
); );
} }
#[test]
fn test_search_albums_key() {
let mut app = App::test_default();
app
.data
.lidarr_data
.albums
.set_items(vec![Album::default()]);
app.push_navigation_stack(ActiveLidarrBlock::ArtistDetails.into());
ArtistDetailsHandler::new(
DEFAULT_KEYBINDINGS.search.key,
&mut app,
ActiveLidarrBlock::ArtistDetails,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::SearchAlbums.into());
}
#[test]
fn test_search_artist_history_key() {
let mut app = App::test_default();
app
.data
.lidarr_data
.artist_history
.set_items(vec![LidarrHistoryItem::default()]);
app.push_navigation_stack(ActiveLidarrBlock::ArtistHistory.into());
ArtistDetailsHandler::new(
DEFAULT_KEYBINDINGS.search.key,
&mut app,
ActiveLidarrBlock::ArtistHistory,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::SearchArtistHistory.into());
}
#[test]
fn test_filter_artist_history_key() {
let mut app = App::test_default();
app
.data
.lidarr_data
.artist_history
.set_items(vec![LidarrHistoryItem::default()]);
app.push_navigation_stack(ActiveLidarrBlock::ArtistHistory.into());
ArtistDetailsHandler::new(
DEFAULT_KEYBINDINGS.filter.key,
&mut app,
ActiveLidarrBlock::ArtistHistory,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::FilterArtistHistory.into());
}
} }
#[test] #[test]
@@ -782,29 +782,41 @@ mod tests {
edit_artist edit_artist
.quality_profile_list .quality_profile_list
.set_items(vec!["Lossless".to_owned(), "HD - 1080p".to_owned()]); .set_items(vec!["Lossless".to_owned(), "HD - 1080p".to_owned()]);
edit_artist.quality_profile_list.state.select(Some(1));
edit_artist edit_artist
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Standard".to_owned(), "Full".to_owned()]); .set_items(vec!["Standard".to_owned(), "Full".to_owned()]);
edit_artist.metadata_profile_list.state.select(Some(1));
edit_artist edit_artist
.monitor_list .monitor_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
edit_artist.monitor_list.state.select(Some(1));
app.data.lidarr_data.edit_artist_modal = Some(edit_artist); app.data.lidarr_data.edit_artist_modal = Some(edit_artist);
app.data.lidarr_data.artists.set_items(vec![Artist { app.data.lidarr_data.artists.set_items(vec![
monitored: false, Artist {
..Artist::default() id: 999,
}]); monitored: false,
..Artist::default()
},
Artist {
id: 2,
monitored: false,
..Artist::default()
},
]);
app.data.lidarr_data.artists.select_index(Some(1));
app.data.lidarr_data.quality_profile_map = BiMap::from_iter([ app.data.lidarr_data.quality_profile_map = BiMap::from_iter([
(1111, "Lossless".to_owned()), (1111, "Lossless".to_owned()),
(2222, "HD - 1080p".to_owned()), (2222, "HD - 1080p".to_owned()),
]); ]);
app.data.lidarr_data.metadata_profile_map = app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(1111, "Standard".to_owned()), (2222, "Full".to_owned())]); BiMap::from_iter([(3333, "Standard".to_owned()), (4444, "Full".to_owned())]);
let expected_edit_artist_params = EditArtistParams { let expected_edit_artist_params = EditArtistParams {
artist_id: 0, artist_id: 2,
monitored: Some(false), monitored: Some(false),
monitor_new_items: Some(NewItemMonitorType::All), monitor_new_items: Some(NewItemMonitorType::None),
quality_profile_id: Some(1111), quality_profile_id: Some(2222),
metadata_profile_id: Some(1111), metadata_profile_id: Some(4444),
root_folder_path: Some("/nfs/Test Path".to_owned()), root_folder_path: Some("/nfs/Test Path".to_owned()),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
..EditArtistParams::default() ..EditArtistParams::default()
@@ -1236,29 +1248,41 @@ mod tests {
edit_artist edit_artist
.quality_profile_list .quality_profile_list
.set_items(vec!["Lossless".to_owned(), "HD - 1080p".to_owned()]); .set_items(vec!["Lossless".to_owned(), "HD - 1080p".to_owned()]);
edit_artist.quality_profile_list.state.select(Some(1));
edit_artist edit_artist
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Standard".to_owned(), "Full".to_owned()]); .set_items(vec!["Standard".to_owned(), "Full".to_owned()]);
edit_artist.metadata_profile_list.state.select(Some(1));
edit_artist edit_artist
.monitor_list .monitor_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
edit_artist.monitor_list.state.select(Some(1));
app.data.lidarr_data.edit_artist_modal = Some(edit_artist); app.data.lidarr_data.edit_artist_modal = Some(edit_artist);
app.data.lidarr_data.artists.set_items(vec![Artist { app.data.lidarr_data.artists.set_items(vec![
monitored: false, Artist {
..Artist::default() id: 999,
}]); monitored: false,
..Artist::default()
},
Artist {
id: 2,
monitored: false,
..Artist::default()
},
]);
app.data.lidarr_data.artists.select_index(Some(1));
app.data.lidarr_data.quality_profile_map = BiMap::from_iter([ app.data.lidarr_data.quality_profile_map = BiMap::from_iter([
(1111, "Lossless".to_owned()), (1111, "Lossless".to_owned()),
(2222, "HD - 1080p".to_owned()), (2222, "HD - 1080p".to_owned()),
]); ]);
app.data.lidarr_data.metadata_profile_map = app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(1111, "Standard".to_owned()), (2222, "Full".to_owned())]); BiMap::from_iter([(3333, "Standard".to_owned()), (4444, "Full".to_owned())]);
let expected_edit_artist_params = EditArtistParams { let expected_edit_artist_params = EditArtistParams {
artist_id: 0, artist_id: 2,
monitored: Some(false), monitored: Some(false),
monitor_new_items: Some(NewItemMonitorType::All), monitor_new_items: Some(NewItemMonitorType::None),
quality_profile_id: Some(1111), quality_profile_id: Some(2222),
metadata_profile_id: Some(1111), metadata_profile_id: Some(4444),
root_folder_path: Some("/nfs/Test Path".to_owned()), root_folder_path: Some("/nfs/Test Path".to_owned()),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
..EditArtistParams::default() ..EditArtistParams::default()
@@ -1332,29 +1356,41 @@ mod tests {
edit_artist edit_artist
.quality_profile_list .quality_profile_list
.set_items(vec!["Lossless".to_owned(), "HD - 1080p".to_owned()]); .set_items(vec!["Lossless".to_owned(), "HD - 1080p".to_owned()]);
edit_artist.quality_profile_list.state.select(Some(1));
edit_artist edit_artist
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Standard".to_owned(), "Full".to_owned()]); .set_items(vec!["Standard".to_owned(), "Full".to_owned()]);
edit_artist.metadata_profile_list.state.select(Some(1));
edit_artist edit_artist
.monitor_list .monitor_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
edit_artist.monitor_list.state.select(Some(1));
app.data.lidarr_data.edit_artist_modal = Some(edit_artist); app.data.lidarr_data.edit_artist_modal = Some(edit_artist);
app.data.lidarr_data.artists.set_items(vec![Artist { app.data.lidarr_data.artists.set_items(vec![
monitored: false, Artist {
..Artist::default() id: 999,
}]); monitored: false,
..Artist::default()
},
Artist {
id: 2,
monitored: false,
..Artist::default()
},
]);
app.data.lidarr_data.artists.select_index(Some(1));
app.data.lidarr_data.quality_profile_map = BiMap::from_iter([ app.data.lidarr_data.quality_profile_map = BiMap::from_iter([
(1111, "Lossless".to_owned()), (1111, "Lossless".to_owned()),
(2222, "HD - 1080p".to_owned()), (2222, "HD - 1080p".to_owned()),
]); ]);
app.data.lidarr_data.metadata_profile_map = app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(1111, "Standard".to_owned()), (2222, "Full".to_owned())]); BiMap::from_iter([(3333, "Standard".to_owned()), (4444, "Full".to_owned())]);
let expected_edit_artist_params = EditArtistParams { let expected_edit_artist_params = EditArtistParams {
artist_id: 0, artist_id: 2,
monitored: Some(false), monitored: Some(false),
monitor_new_items: Some(NewItemMonitorType::All), monitor_new_items: Some(NewItemMonitorType::None),
quality_profile_id: Some(1111), quality_profile_id: Some(2222),
metadata_profile_id: Some(1111), metadata_profile_id: Some(4444),
root_folder_path: Some("/nfs/Test Path".to_owned()), root_folder_path: Some("/nfs/Test Path".to_owned()),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
..EditArtistParams::default() ..EditArtistParams::default()
@@ -244,11 +244,8 @@ mod tests {
#[test] #[test]
fn test_toggle_monitoring_key() { fn test_toggle_monitoring_key() {
let mut app = App::test_default(); let mut app = App::test_default();
app app.data.lidarr_data.artists.set_items(artists_vec());
.data app.data.lidarr_data.artists.select_index(Some(1));
.lidarr_data
.artists
.set_items(vec![Artist::default()]);
app.push_navigation_stack(ActiveLidarrBlock::Artists.into()); app.push_navigation_stack(ActiveLidarrBlock::Artists.into());
app.is_routing = false; app.is_routing = false;
@@ -265,7 +262,7 @@ mod tests {
assert!(app.is_routing); assert!(app.is_routing);
assert_some_eq_x!( assert_some_eq_x!(
&app.data.lidarr_data.prompt_confirm_action, &app.data.lidarr_data.prompt_confirm_action,
&LidarrEvent::ToggleArtistMonitoring(0) &LidarrEvent::ToggleArtistMonitoring(2)
); );
} }
@@ -770,4 +767,38 @@ mod tests {
assert_eq!(app.get_current_route(), ActiveLidarrBlock::Artists.into()); assert_eq!(app.get_current_route(), ActiveLidarrBlock::Artists.into());
assert!(app.should_refresh); assert!(app.should_refresh);
} }
#[test]
fn test_search_artists_key() {
let mut app = App::test_default();
app.data.lidarr_data.artists.set_items(artists_vec());
app.push_navigation_stack(ActiveLidarrBlock::Artists.into());
LibraryHandler::new(
DEFAULT_KEYBINDINGS.search.key,
&mut app,
ActiveLidarrBlock::Artists,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::SearchArtists.into());
}
#[test]
fn test_filter_artists_key() {
let mut app = App::test_default();
app.data.lidarr_data.artists.set_items(artists_vec());
app.push_navigation_stack(ActiveLidarrBlock::Artists.into());
LibraryHandler::new(
DEFAULT_KEYBINDINGS.filter.key,
&mut app,
ActiveLidarrBlock::Artists,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::FilterArtists.into());
}
} }
@@ -244,6 +244,38 @@ mod tests {
assert_eq!(app.get_current_route(), active_lidarr_block.into()); assert_eq!(app.get_current_route(), active_lidarr_block.into());
assert!(!app.is_routing); assert!(!app.is_routing);
} }
#[test]
fn test_search_track_history_key() {
let mut app = App::test_default_fully_populated();
app.push_navigation_stack(ActiveLidarrBlock::TrackHistory.into());
TrackDetailsHandler::new(
DEFAULT_KEYBINDINGS.search.key,
&mut app,
ActiveLidarrBlock::TrackHistory,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::SearchTrackHistory.into());
}
#[test]
fn test_filter_track_history_key() {
let mut app = App::test_default_fully_populated();
app.push_navigation_stack(ActiveLidarrBlock::TrackHistory.into());
TrackDetailsHandler::new(
DEFAULT_KEYBINDINGS.filter.key,
&mut app,
ActiveLidarrBlock::TrackHistory,
None,
)
.handle();
assert_navigation_pushed!(app, ActiveLidarrBlock::FilterTrackHistory.into());
}
} }
#[test] #[test]
@@ -1052,27 +1052,31 @@ mod tests {
add_root_folder add_root_folder
.quality_profile_list .quality_profile_list
.set_items(vec!["Lossless".to_owned(), "FLAC".to_owned()]); .set_items(vec!["Lossless".to_owned(), "FLAC".to_owned()]);
add_root_folder.quality_profile_list.state.select(Some(1));
add_root_folder add_root_folder
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Standard".to_owned(), "Full".to_owned()]); .set_items(vec!["Standard".to_owned(), "Full".to_owned()]);
add_root_folder.metadata_profile_list.state.select(Some(1));
add_root_folder add_root_folder
.monitor_list .monitor_list
.set_items(Vec::from_iter(MonitorType::iter())); .set_items(Vec::from_iter(MonitorType::iter()));
add_root_folder.monitor_list.state.select(Some(1));
add_root_folder add_root_folder
.monitor_new_items_list .monitor_new_items_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
add_root_folder.monitor_new_items_list.state.select(Some(1));
app.data.lidarr_data.add_root_folder_modal = Some(add_root_folder); app.data.lidarr_data.add_root_folder_modal = Some(add_root_folder);
app.data.lidarr_data.quality_profile_map = app.data.lidarr_data.quality_profile_map =
BiMap::from_iter([(1111, "Lossless".to_owned()), (2222, "FLAC".to_owned())]); BiMap::from_iter([(1111, "Lossless".to_owned()), (2222, "FLAC".to_owned())]);
app.data.lidarr_data.metadata_profile_map = app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(1111, "Standard".to_owned()), (2222, "Full".to_owned())]); BiMap::from_iter([(3333, "Standard".to_owned()), (4444, "Full".to_owned())]);
let expected_add_root_folder_body = AddLidarrRootFolderBody { let expected_add_root_folder_body = AddLidarrRootFolderBody {
name: "Test Name".to_owned(), name: "Test Name".to_owned(),
path: "/nfs/Test Path".to_owned(), path: "/nfs/Test Path".to_owned(),
default_quality_profile_id: 1111, default_quality_profile_id: 2222,
default_metadata_profile_id: 1111, default_metadata_profile_id: 4444,
default_monitor_option: MonitorType::All, default_monitor_option: MonitorType::Future,
default_new_item_monitor_option: NewItemMonitorType::All, default_new_item_monitor_option: NewItemMonitorType::None,
default_tags: Vec::new(), default_tags: Vec::new(),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
}; };
@@ -1525,27 +1529,31 @@ mod tests {
add_root_folder add_root_folder
.quality_profile_list .quality_profile_list
.set_items(vec!["Lossless".to_owned(), "FLAC".to_owned()]); .set_items(vec!["Lossless".to_owned(), "FLAC".to_owned()]);
add_root_folder.quality_profile_list.state.select(Some(1));
add_root_folder add_root_folder
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Standard".to_owned(), "Full".to_owned()]); .set_items(vec!["Standard".to_owned(), "Full".to_owned()]);
add_root_folder.metadata_profile_list.state.select(Some(1));
add_root_folder add_root_folder
.monitor_list .monitor_list
.set_items(Vec::from_iter(MonitorType::iter())); .set_items(Vec::from_iter(MonitorType::iter()));
add_root_folder.monitor_list.state.select(Some(1));
add_root_folder add_root_folder
.monitor_new_items_list .monitor_new_items_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
add_root_folder.monitor_new_items_list.state.select(Some(1));
app.data.lidarr_data.add_root_folder_modal = Some(add_root_folder); app.data.lidarr_data.add_root_folder_modal = Some(add_root_folder);
app.data.lidarr_data.quality_profile_map = app.data.lidarr_data.quality_profile_map =
BiMap::from_iter([(1111, "Lossless".to_owned()), (2222, "FLAC".to_owned())]); BiMap::from_iter([(1111, "Lossless".to_owned()), (2222, "FLAC".to_owned())]);
app.data.lidarr_data.metadata_profile_map = app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(1111, "Standard".to_owned()), (2222, "Full".to_owned())]); BiMap::from_iter([(3333, "Standard".to_owned()), (4444, "Full".to_owned())]);
let expected_add_root_folder_body = AddLidarrRootFolderBody { let expected_add_root_folder_body = AddLidarrRootFolderBody {
name: "Test Name".to_owned(), name: "Test Name".to_owned(),
path: "/nfs/Test Path".to_owned(), path: "/nfs/Test Path".to_owned(),
default_quality_profile_id: 1111, default_quality_profile_id: 2222,
default_metadata_profile_id: 1111, default_metadata_profile_id: 4444,
default_monitor_option: MonitorType::All, default_monitor_option: MonitorType::Future,
default_new_item_monitor_option: NewItemMonitorType::All, default_new_item_monitor_option: NewItemMonitorType::None,
default_tags: Vec::new(), default_tags: Vec::new(),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
}; };
@@ -1619,27 +1627,31 @@ mod tests {
add_root_folder add_root_folder
.quality_profile_list .quality_profile_list
.set_items(vec!["Lossless".to_owned(), "FLAC".to_owned()]); .set_items(vec!["Lossless".to_owned(), "FLAC".to_owned()]);
add_root_folder.quality_profile_list.state.select(Some(1));
add_root_folder add_root_folder
.metadata_profile_list .metadata_profile_list
.set_items(vec!["Standard".to_owned(), "Full".to_owned()]); .set_items(vec!["Standard".to_owned(), "Full".to_owned()]);
add_root_folder.metadata_profile_list.state.select(Some(1));
add_root_folder add_root_folder
.monitor_list .monitor_list
.set_items(Vec::from_iter(MonitorType::iter())); .set_items(Vec::from_iter(MonitorType::iter()));
add_root_folder.monitor_list.state.select(Some(1));
add_root_folder add_root_folder
.monitor_new_items_list .monitor_new_items_list
.set_items(Vec::from_iter(NewItemMonitorType::iter())); .set_items(Vec::from_iter(NewItemMonitorType::iter()));
add_root_folder.monitor_new_items_list.state.select(Some(1));
app.data.lidarr_data.add_root_folder_modal = Some(add_root_folder); app.data.lidarr_data.add_root_folder_modal = Some(add_root_folder);
app.data.lidarr_data.quality_profile_map = app.data.lidarr_data.quality_profile_map =
BiMap::from_iter([(1111, "Lossless".to_owned()), (2222, "FLAC".to_owned())]); BiMap::from_iter([(1111, "Lossless".to_owned()), (2222, "FLAC".to_owned())]);
app.data.lidarr_data.metadata_profile_map = app.data.lidarr_data.metadata_profile_map =
BiMap::from_iter([(1111, "Standard".to_owned()), (2222, "Full".to_owned())]); BiMap::from_iter([(3333, "Standard".to_owned()), (4444, "Full".to_owned())]);
let expected_add_root_folder_body = AddLidarrRootFolderBody { let expected_add_root_folder_body = AddLidarrRootFolderBody {
name: "Test Name".to_owned(), name: "Test Name".to_owned(),
path: "/nfs/Test Path".to_owned(), path: "/nfs/Test Path".to_owned(),
default_quality_profile_id: 1111, default_quality_profile_id: 2222,
default_metadata_profile_id: 1111, default_metadata_profile_id: 4444,
default_monitor_option: MonitorType::All, default_monitor_option: MonitorType::Future,
default_new_item_monitor_option: NewItemMonitorType::All, default_new_item_monitor_option: NewItemMonitorType::None,
default_tags: Vec::new(), default_tags: Vec::new(),
tag_input_string: Some("usenet, testing".to_owned()), tag_input_string: Some("usenet, testing".to_owned()),
}; };