diff --git a/src/app/radarr/mod.rs b/src/app/radarr/mod.rs index 1317458..1ee0263 100644 --- a/src/app/radarr/mod.rs +++ b/src/app/radarr/mod.rs @@ -77,7 +77,7 @@ impl<'a> App<'a> { } ActiveRadarrBlock::TestIndexer => { self - .dispatch_network_event(RadarrEvent::TestIndexer(None).into()) + .dispatch_network_event(RadarrEvent::TestIndexer(self.extract_indexer_id().await).into()) .await; } ActiveRadarrBlock::TestAllIndexers => { @@ -233,4 +233,14 @@ impl<'a> App<'a> { async fn extract_movie_search_query(&self) -> String { self.data.radarr_data.add_movie_search.as_ref().expect("Add movie search is empty").text.clone() } + + async fn extract_indexer_id(&self) -> i64 { + self + .data + .radarr_data + .indexers + .current_selection() + .clone() + .id + } } diff --git a/src/app/radarr/radarr_tests.rs b/src/app/radarr/radarr_tests.rs index 8204f3e..da31240 100644 --- a/src/app/radarr/radarr_tests.rs +++ b/src/app/radarr/radarr_tests.rs @@ -5,749 +5,790 @@ mod tests { use crate::app::radarr::ActiveRadarrBlock; use crate::app::App; - use crate::models::radarr_models::{AddMovieBody, AddMovieOptions, Collection, CollectionMovie, Credit, Movie, RadarrRelease}; + use crate::models::radarr_models::{ + AddMovieBody, AddMovieOptions, Collection, CollectionMovie, Credit, Movie, RadarrRelease, + }; use crate::models::servarr_data::radarr::modals::MovieDetailsModal; - + use crate::models::servarr_models::Indexer; use crate::network::radarr_network::RadarrEvent; use crate::network::NetworkEvent; #[tokio::test] - async fn test_dispatch_by_blocklist_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::Blocklist) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetBlocklist.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_collections_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::Collections) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetQualityProfiles.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetCollections.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetMovies.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_collection_details_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app.data.radarr_data.collections.set_items(vec![Collection { - movies: Some(vec![CollectionMovie::default()]), - ..Collection::default() - }]); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::CollectionDetails) - .await; - - assert!(!app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetQualityProfiles.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetTags.into() - ); - assert!(!app.data.radarr_data.collection_movies.items.is_empty()); - assert_eq!(app.tick_count, 0); - assert!(!app.data.radarr_data.prompt_confirm); - } - - #[tokio::test] - async fn test_dispatch_by_collection_details_block_with_add_movie() { - let add_movie_body = AddMovieBody { - tmdb_id: 1234, - title: "Test".to_owned(), - root_folder_path: "/nfs2".to_owned(), - minimum_availability: "announced".to_owned(), - monitored: true, - quality_profile_id: 2222, - tags: vec![1, 2], - tag_input_string: None, - add_options: AddMovieOptions { - monitor: "movieOnly".to_owned(), - search_for_movie: true, - }, - }; - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.prompt_confirm_action = - Some(RadarrEvent::AddMovie(add_movie_body.clone())); - - app.data.radarr_data.collections.set_items(vec![Collection { - movies: Some(vec![CollectionMovie::default()]), - ..Collection::default() - }]); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::CollectionDetails) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetQualityProfiles.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetTags.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::AddMovie(add_movie_body).into() - ); - assert!(!app.data.radarr_data.collection_movies.items.is_empty()); - assert_eq!(app.tick_count, 0); - assert!(!app.data.radarr_data.prompt_confirm); - } - - #[tokio::test] - async fn test_dispatch_by_downloads_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::Downloads) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDownloads.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_root_folders_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::RootFolders) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetRootFolders.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_movies_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::Movies) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetQualityProfiles.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetTags.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetMovies.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDownloads.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_indexers_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::Indexers) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetTags.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetIndexers.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_all_indexer_settings_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::AllIndexerSettingsPrompt) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetAllIndexerSettings.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_test_indexer_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::TestIndexer) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::TestIndexer(None).into() - ); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_test_all_indexers_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::TestAllIndexers) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::TestAllIndexers.into() - ); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_system_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::System) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetTasks.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetQueuedEvents.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetLogs(500).into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_system_updates_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::SystemUpdates) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetUpdates.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_add_movie_search_results_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.add_movie_search = Some("test".into()); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::AddMovieSearchResults) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::SearchNewMovie("test".into()).into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_movie_details_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.movies.set_items(vec![Movie { id: 1, ..Movie::default() }]); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::MovieDetails) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetMovieDetails(1).into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_file_info_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.movies.set_items(vec![Movie { id: 1, ..Movie::default() }]); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::FileInfo) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetMovieDetails(1).into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_movie_history_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.movies.set_items(vec![Movie { id: 1, ..Movie::default() }]); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::MovieHistory) - .await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetMovieHistory(1).into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - - #[tokio::test] - async fn test_dispatch_by_cast_crew_blocks() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.movies.set_items(vec![Movie { id: 1, ..Movie::default() }]); - - for active_radarr_block in &[ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew] { - app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal::default()); - app.dispatch_by_radarr_block(active_radarr_block).await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetMovieCredits(1).into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - } - - #[tokio::test] - async fn test_dispatch_by_cast_crew_blocks_movie_cast_non_empty() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.movies.set_items(vec![Movie { id: 1, ..Movie::default() }]); - - for active_radarr_block in &[ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew] { - let mut movie_details_modal = MovieDetailsModal::default(); - movie_details_modal - .movie_cast - .set_items(vec![Credit::default()]); - app.data.radarr_data.movie_details_modal = Some(movie_details_modal); - - app.dispatch_by_radarr_block(active_radarr_block).await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetMovieCredits(1).into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - } - - #[tokio::test] - async fn test_dispatch_by_cast_crew_blocks_movie_crew_non_empty() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.movies.set_items(vec![Movie { id: 1, ..Movie::default() }]); - - for active_radarr_block in &[ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew] { - let mut movie_details_modal = MovieDetailsModal::default(); - movie_details_modal - .movie_crew - .set_items(vec![Credit::default()]); - app.data.radarr_data.movie_details_modal = Some(movie_details_modal); - - app.dispatch_by_radarr_block(active_radarr_block).await; - - assert!(app.is_loading); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetMovieCredits(1).into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - } - - #[tokio::test] - async fn test_dispatch_by_cast_crew_blocks_cast_and_crew_non_empty() { - let mut app = App::default(); - - for active_radarr_block in &[ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew] { - let mut movie_details_modal = MovieDetailsModal::default(); - movie_details_modal - .movie_cast - .set_items(vec![Credit::default()]); - movie_details_modal - .movie_crew - .set_items(vec![Credit::default()]); - app.data.radarr_data.movie_details_modal = Some(movie_details_modal); - - app.dispatch_by_radarr_block(active_radarr_block).await; - - assert!(!app.is_loading); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } - } - - #[tokio::test] - async fn test_dispatch_by_manual_search_block() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.movies.set_items(vec![Movie { id: 1, ..Movie::default() }]); + async fn test_dispatch_by_blocklist_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::Blocklist) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetBlocklist.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_collections_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::Collections) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetQualityProfiles.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetCollections.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetMovies.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_collection_details_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app.data.radarr_data.collections.set_items(vec![Collection { + movies: Some(vec![CollectionMovie::default()]), + ..Collection::default() + }]); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::CollectionDetails) + .await; + + assert!(!app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetQualityProfiles.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetTags.into() + ); + assert!(!app.data.radarr_data.collection_movies.items.is_empty()); + assert_eq!(app.tick_count, 0); + assert!(!app.data.radarr_data.prompt_confirm); + } + + #[tokio::test] + async fn test_dispatch_by_collection_details_block_with_add_movie() { + let add_movie_body = AddMovieBody { + tmdb_id: 1234, + title: "Test".to_owned(), + root_folder_path: "/nfs2".to_owned(), + minimum_availability: "announced".to_owned(), + monitored: true, + quality_profile_id: 2222, + tags: vec![1, 2], + tag_input_string: None, + add_options: AddMovieOptions { + monitor: "movieOnly".to_owned(), + search_for_movie: true, + }, + }; + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.prompt_confirm_action = + Some(RadarrEvent::AddMovie(add_movie_body.clone())); + + app.data.radarr_data.collections.set_items(vec![Collection { + movies: Some(vec![CollectionMovie::default()]), + ..Collection::default() + }]); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::CollectionDetails) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetQualityProfiles.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetTags.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::AddMovie(add_movie_body).into() + ); + assert!(!app.data.radarr_data.collection_movies.items.is_empty()); + assert_eq!(app.tick_count, 0); + assert!(!app.data.radarr_data.prompt_confirm); + } + + #[tokio::test] + async fn test_dispatch_by_downloads_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::Downloads) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDownloads.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_root_folders_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::RootFolders) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetRootFolders.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_movies_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::Movies) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetQualityProfiles.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetTags.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetMovies.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDownloads.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_indexers_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::Indexers) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetTags.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetIndexers.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_all_indexer_settings_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::AllIndexerSettingsPrompt) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetAllIndexerSettings.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_test_indexer_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.indexers.set_items(vec![Indexer { + id: 1, + ..Indexer::default() + }]); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::TestIndexer) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::TestIndexer(1).into() + ); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_test_all_indexers_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::TestAllIndexers) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::TestAllIndexers.into() + ); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_system_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::System) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetTasks.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetQueuedEvents.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetLogs(500).into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_system_updates_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::SystemUpdates) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetUpdates.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_add_movie_search_results_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.add_movie_search = Some("test".into()); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::AddMovieSearchResults) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::SearchNewMovie("test".into()).into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_movie_details_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.movies.set_items(vec![Movie { + id: 1, + ..Movie::default() + }]); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::MovieDetails) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetMovieDetails(1).into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_file_info_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.movies.set_items(vec![Movie { + id: 1, + ..Movie::default() + }]); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::FileInfo) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetMovieDetails(1).into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_movie_history_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.movies.set_items(vec![Movie { + id: 1, + ..Movie::default() + }]); + + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::MovieHistory) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetMovieHistory(1).into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + + #[tokio::test] + async fn test_dispatch_by_cast_crew_blocks() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.movies.set_items(vec![Movie { + id: 1, + ..Movie::default() + }]); + + for active_radarr_block in &[ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew] { app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal::default()); - - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::ManualSearch) - .await; + app.dispatch_by_radarr_block(active_radarr_block).await; assert!(app.is_loading); assert_eq!( sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetReleases(1).into() + RadarrEvent::GetMovieCredits(1).into() ); assert!(!app.data.radarr_data.prompt_confirm); assert_eq!(app.tick_count, 0); } + } - #[tokio::test] - async fn test_dispatch_by_manual_search_block_movie_releases_non_empty() { - let mut app = App::default(); + #[tokio::test] + async fn test_dispatch_by_cast_crew_blocks_movie_cast_non_empty() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.movies.set_items(vec![Movie { + id: 1, + ..Movie::default() + }]); + + for active_radarr_block in &[ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew] { let mut movie_details_modal = MovieDetailsModal::default(); movie_details_modal - .movie_releases - .set_items(vec![RadarrRelease::default()]); + .movie_cast + .set_items(vec![Credit::default()]); app.data.radarr_data.movie_details_modal = Some(movie_details_modal); - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::ManualSearch) - .await; + app.dispatch_by_radarr_block(active_radarr_block).await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetMovieCredits(1).into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + } + + #[tokio::test] + async fn test_dispatch_by_cast_crew_blocks_movie_crew_non_empty() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.movies.set_items(vec![Movie { + id: 1, + ..Movie::default() + }]); + + for active_radarr_block in &[ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew] { + let mut movie_details_modal = MovieDetailsModal::default(); + movie_details_modal + .movie_crew + .set_items(vec![Credit::default()]); + app.data.radarr_data.movie_details_modal = Some(movie_details_modal); + + app.dispatch_by_radarr_block(active_radarr_block).await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetMovieCredits(1).into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + } + + #[tokio::test] + async fn test_dispatch_by_cast_crew_blocks_cast_and_crew_non_empty() { + let mut app = App::default(); + + for active_radarr_block in &[ActiveRadarrBlock::Cast, ActiveRadarrBlock::Crew] { + let mut movie_details_modal = MovieDetailsModal::default(); + movie_details_modal + .movie_cast + .set_items(vec![Credit::default()]); + movie_details_modal + .movie_crew + .set_items(vec![Credit::default()]); + app.data.radarr_data.movie_details_modal = Some(movie_details_modal); + + app.dispatch_by_radarr_block(active_radarr_block).await; assert!(!app.is_loading); assert!(!app.data.radarr_data.prompt_confirm); assert_eq!(app.tick_count, 0); } + } - #[tokio::test] - async fn test_dispatch_by_manual_search_block_is_loading() { - let mut app = App { - is_loading: true, - ..App::default() - }; + #[tokio::test] + async fn test_dispatch_by_manual_search_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.movies.set_items(vec![Movie { + id: 1, + ..Movie::default() + }]); + app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal::default()); - app - .dispatch_by_radarr_block(&ActiveRadarrBlock::ManualSearch) - .await; + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::ManualSearch) + .await; - assert!(app.is_loading); - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!(app.tick_count, 0); - } + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetReleases(1).into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } - #[tokio::test] - async fn test_check_for_radarr_prompt_action_no_prompt_confirm() { - let mut app = App::default(); - app.data.radarr_data.prompt_confirm = false; + #[tokio::test] + async fn test_dispatch_by_manual_search_block_movie_releases_non_empty() { + let mut app = App::default(); + let mut movie_details_modal = MovieDetailsModal::default(); + movie_details_modal + .movie_releases + .set_items(vec![RadarrRelease::default()]); + app.data.radarr_data.movie_details_modal = Some(movie_details_modal); - app.check_for_radarr_prompt_action().await; + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::ManualSearch) + .await; - assert!(!app.data.radarr_data.prompt_confirm); - assert!(!app.should_refresh); - } + assert!(!app.is_loading); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } - #[tokio::test] - async fn test_check_for_radarr_prompt_action() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::GetStatus); + #[tokio::test] + async fn test_dispatch_by_manual_search_block_is_loading() { + let mut app = App { + is_loading: true, + ..App::default() + }; - app.check_for_radarr_prompt_action().await; + app + .dispatch_by_radarr_block(&ActiveRadarrBlock::ManualSearch) + .await; - assert!(!app.data.radarr_data.prompt_confirm); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetStatus.into() - ); - assert!(app.should_refresh); - assert_eq!(app.data.radarr_data.prompt_confirm_action, None); - } + assert!(app.is_loading); + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } - #[tokio::test] - async fn test_radarr_refresh_metadata() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.is_routing = true; + #[tokio::test] + async fn test_check_for_radarr_prompt_action_no_prompt_confirm() { + let mut app = App::default(); + app.data.radarr_data.prompt_confirm = false; - app.refresh_radarr_metadata().await; + app.check_for_radarr_prompt_action().await; - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetQualityProfiles.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetTags.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetRootFolders.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDownloads.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDiskSpace.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetStatus.into() - ); - assert!(app.is_loading); - } + assert!(!app.data.radarr_data.prompt_confirm); + assert!(!app.should_refresh); + } - #[tokio::test] - async fn test_radarr_on_tick_first_render() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.is_first_render = true; + #[tokio::test] + async fn test_check_for_radarr_prompt_action() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.data.radarr_data.prompt_confirm_action = Some(RadarrEvent::GetStatus); - app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; + app.check_for_radarr_prompt_action().await; - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetQualityProfiles.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetTags.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetRootFolders.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDownloads.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDiskSpace.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetStatus.into() - ); - assert!(app.is_loading); - assert!(!app.data.radarr_data.prompt_confirm); - assert!(!app.is_first_render); - } + assert!(!app.data.radarr_data.prompt_confirm); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetStatus.into() + ); + assert!(app.should_refresh); + assert_eq!(app.data.radarr_data.prompt_confirm_action, None); + } - #[tokio::test] - async fn test_radarr_on_tick_routing() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.is_routing = true; - app.should_refresh = true; + #[tokio::test] + async fn test_radarr_refresh_metadata() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.is_routing = true; - app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; + app.refresh_radarr_metadata().await; - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDownloads.into() - ); - assert!(!app.data.radarr_data.prompt_confirm); - } + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetQualityProfiles.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetTags.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetRootFolders.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDownloads.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDiskSpace.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetStatus.into() + ); + assert!(app.is_loading); + } - #[tokio::test] - async fn test_radarr_on_tick_routing_while_long_request_is_running_should_cancel_request() { - let (mut app, _) = construct_app_unit(); - app.is_routing = true; - app.should_refresh = false; + #[tokio::test] + async fn test_radarr_on_tick_first_render() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.is_first_render = true; - app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; + app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; - assert!(app.cancellation_token.is_cancelled()); - } + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetQualityProfiles.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetTags.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetRootFolders.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDownloads.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDiskSpace.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetStatus.into() + ); + assert!(app.is_loading); + assert!(!app.data.radarr_data.prompt_confirm); + assert!(!app.is_first_render); + } - #[tokio::test] - async fn test_radarr_on_tick_should_refresh() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.should_refresh = true; + #[tokio::test] + async fn test_radarr_on_tick_routing() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.is_routing = true; + app.should_refresh = true; - app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; + app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDownloads.into() - ); - assert!(app.should_refresh); - assert!(!app.data.radarr_data.prompt_confirm); - } + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDownloads.into() + ); + assert!(!app.data.radarr_data.prompt_confirm); + } - #[tokio::test] - async fn test_radarr_on_tick_should_refresh_does_not_cancel_prompt_requests() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.is_loading = true; - app.is_routing = true; - app.should_refresh = true; + #[tokio::test] + async fn test_radarr_on_tick_routing_while_long_request_is_running_should_cancel_request() { + let (mut app, _) = construct_app_unit(); + app.is_routing = true; + app.should_refresh = false; - app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; + app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDownloads.into() - ); - assert!(app.is_loading); - assert!(app.should_refresh); - assert!(!app.data.radarr_data.prompt_confirm); - assert!(!app.cancellation_token.is_cancelled()); - } + assert!(app.cancellation_token.is_cancelled()); + } - #[tokio::test] - async fn test_radarr_on_tick_network_tick_frequency() { - let (mut app, mut sync_network_rx) = construct_app_unit(); - app.tick_count = 2; - app.tick_until_poll = 2; + #[tokio::test] + async fn test_radarr_on_tick_should_refresh() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.should_refresh = true; - app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; + app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetQualityProfiles.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetTags.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetRootFolders.into() - ); - assert_eq!( - sync_network_rx.recv().await.unwrap(), - RadarrEvent::GetDownloads.into() - ); - assert!(app.is_loading); - } + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDownloads.into() + ); + assert!(app.should_refresh); + assert!(!app.data.radarr_data.prompt_confirm); + } - #[tokio::test] - async fn test_populate_movie_collection_table_unfiltered() { - let mut app = App::default(); - app.data.radarr_data.collections.set_items(vec![Collection { + #[tokio::test] + async fn test_radarr_on_tick_should_refresh_does_not_cancel_prompt_requests() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.is_loading = true; + app.is_routing = true; + app.should_refresh = true; + + app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; + + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDownloads.into() + ); + assert!(app.is_loading); + assert!(app.should_refresh); + assert!(!app.data.radarr_data.prompt_confirm); + assert!(!app.cancellation_token.is_cancelled()); + } + + #[tokio::test] + async fn test_radarr_on_tick_network_tick_frequency() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + app.tick_count = 2; + app.tick_until_poll = 2; + + app.radarr_on_tick(ActiveRadarrBlock::Downloads).await; + + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetQualityProfiles.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetTags.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetRootFolders.into() + ); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + RadarrEvent::GetDownloads.into() + ); + assert!(app.is_loading); + } + + #[tokio::test] + async fn test_populate_movie_collection_table_unfiltered() { + let mut app = App::default(); + app.data.radarr_data.collections.set_items(vec![Collection { + movies: Some(vec![CollectionMovie::default()]), + ..Collection::default() + }]); + + app.populate_movie_collection_table().await; + + assert!(!app.data.radarr_data.collection_movies.items.is_empty()); + } + + #[tokio::test] + async fn test_populate_movie_collection_table_filtered() { + let mut app = App::default(); + app + .data + .radarr_data + .collections + .set_filtered_items(vec![Collection { movies: Some(vec![CollectionMovie::default()]), ..Collection::default() }]); - app.populate_movie_collection_table().await; + app.populate_movie_collection_table().await; - assert!(!app.data.radarr_data.collection_movies.items.is_empty()); - } + assert!(!app.data.radarr_data.collection_movies.items.is_empty()); + } - #[tokio::test] - async fn test_populate_movie_collection_table_filtered() { - let mut app = App::default(); - app - .data - .radarr_data - .collections - .set_filtered_items(vec![Collection { - movies: Some(vec![CollectionMovie::default()]), - ..Collection::default() - }]); + #[tokio::test] + async fn test_extract_movie_id() { + let mut app = App::default(); + app.data.radarr_data.movies.set_items(vec![Movie { + id: 1, + ..Movie::default() + }]); - app.populate_movie_collection_table().await; + assert_eq!(app.extract_movie_id().await, 1); + } - assert!(!app.data.radarr_data.collection_movies.items.is_empty()); - } + #[tokio::test] + async fn test_extract_indexer_id() { + let mut app = App::default(); + app.data.radarr_data.indexers.set_items(vec![Indexer { + id: 1, + ..Indexer::default() + }]); + + assert_eq!(app.extract_indexer_id().await, 1); + } - #[tokio::test] - async fn test_extract_movie_id() { - let mut app = App::default(); - app.data.radarr_data.movies.set_items(vec![Movie { id: 1, ..Movie::default() }]); + fn construct_app_unit<'a>() -> (App<'a>, mpsc::Receiver) { + let (sync_network_tx, sync_network_rx) = mpsc::channel::(500); + let mut app = App { + network_tx: Some(sync_network_tx), + tick_count: 1, + is_first_render: false, + ..App::default() + }; + app.data.radarr_data.prompt_confirm = true; - assert_eq!(app.extract_movie_id().await, 1); - } - - fn construct_app_unit<'a>() -> (App<'a>, mpsc::Receiver) { - let (sync_network_tx, sync_network_rx) = mpsc::channel::(500); - let mut app = App { - network_tx: Some(sync_network_tx), - tick_count: 1, - is_first_render: false, - ..App::default() - }; - app.data.radarr_data.prompt_confirm = true; - - (app, sync_network_rx) - } + (app, sync_network_rx) + } } diff --git a/src/cli/radarr/mod.rs b/src/cli/radarr/mod.rs index 9f581ae..54db679 100644 --- a/src/cli/radarr/mod.rs +++ b/src/cli/radarr/mod.rs @@ -238,7 +238,7 @@ impl<'a, 'b> CliCommandHandler<'a, 'b, RadarrCommand> for RadarrCliHandler<'a, ' RadarrCommand::TestIndexer { indexer_id } => { let resp = self .network - .handle_network_event(RadarrEvent::TestIndexer(Some(indexer_id)).into()) + .handle_network_event(RadarrEvent::TestIndexer(indexer_id).into()) .await?; serde_json::to_string_pretty(&resp)? } diff --git a/src/cli/radarr/radarr_command_tests.rs b/src/cli/radarr/radarr_command_tests.rs index 3868e0c..4cd27a7 100644 --- a/src/cli/radarr/radarr_command_tests.rs +++ b/src/cli/radarr/radarr_command_tests.rs @@ -421,7 +421,7 @@ mod tests { mock_network .expect_handle_network_event() .with(eq::( - RadarrEvent::TestIndexer(Some(expected_indexer_id)).into(), + RadarrEvent::TestIndexer(expected_indexer_id).into(), )) .times(1) .returning(|_| { diff --git a/src/handlers/radarr_handlers/system/system_details_handler.rs b/src/handlers/radarr_handlers/system/system_details_handler.rs index c816e8f..85ac45e 100644 --- a/src/handlers/radarr_handlers/system/system_details_handler.rs +++ b/src/handlers/radarr_handlers/system/system_details_handler.rs @@ -21,7 +21,7 @@ pub(super) struct SystemDetailsHandler<'a, 'b> { impl<'a, 'b> SystemDetailsHandler<'a, 'b> { fn extract_task_name(&self) -> RadarrTaskName { - self.app.data.radarr_data.tasks.current_selection().task_name.clone() + self.app.data.radarr_data.tasks.current_selection().task_name } } diff --git a/src/network/radarr_network.rs b/src/network/radarr_network.rs index b867cf6..3acc59b 100644 --- a/src/network/radarr_network.rs +++ b/src/network/radarr_network.rs @@ -71,7 +71,7 @@ pub enum RadarrEvent { HealthCheck, SearchNewMovie(String), StartTask(RadarrTaskName), - TestIndexer(Option), + TestIndexer(i64), TestAllIndexers, TriggerAutomaticSearch(Option), UpdateAllMovies, @@ -1632,7 +1632,7 @@ impl<'a, 'b> Network<'a, 'b> { } async fn start_radarr_task(&mut self, task_name: RadarrTaskName) -> Result { - let event = RadarrEvent::StartTask(task_name.clone()); + let event = RadarrEvent::StartTask(task_name); info!("Starting Radarr task: {task_name}"); @@ -1647,32 +1647,19 @@ impl<'a, 'b> Network<'a, 'b> { .await } - async fn test_radarr_indexer(&mut self, indexer_id: Option) -> Result { + async fn test_radarr_indexer(&mut self, indexer_id: i64) -> Result { let detail_event = RadarrEvent::GetIndexers; - let event = RadarrEvent::TestIndexer(None); - let id = if let Some(i_id) = indexer_id { - i_id - } else { - self - .app - .lock() - .await - .data - .radarr_data - .indexers - .current_selection() - .id - }; - info!("Testing Radarr indexer with ID: {id}"); + let event = RadarrEvent::TestIndexer(indexer_id); + info!("Testing Radarr indexer with ID: {indexer_id}"); - info!("Fetching indexer details for indexer with ID: {id}"); + info!("Fetching indexer details for indexer with ID: {indexer_id}"); let request_props = self .request_props_from( detail_event, RequestMethod::Get, None::<()>, - Some(format!("/{id}")), + Some(format!("/{indexer_id}")), None, ) .await; diff --git a/src/network/radarr_network_tests.rs b/src/network/radarr_network_tests.rs index bef4f00..ec61676 100644 --- a/src/network/radarr_network_tests.rs +++ b/src/network/radarr_network_tests.rs @@ -228,7 +228,7 @@ mod test { #[case(RadarrEvent::GetStatus, "/system/status")] #[case(RadarrEvent::GetTasks, "/system/task")] #[case(RadarrEvent::GetUpdates, "/update")] - #[case(RadarrEvent::TestIndexer(None), "/indexer/test")] + #[case(RadarrEvent::TestIndexer(0), "/indexer/test")] #[case(RadarrEvent::TestAllIndexers, "/indexer/testall")] #[case(RadarrEvent::HealthCheck, "/health")] fn test_resource(#[case] event: RadarrEvent, #[case] expected_uri: String) { @@ -756,7 +756,7 @@ mod test { let async_test_server = server .mock( "POST", - format!("/api/v3{}", RadarrEvent::TestIndexer(None).resource()).as_str(), + format!("/api/v3{}", RadarrEvent::TestIndexer(1).resource()).as_str(), ) .with_status(400) .match_header("X-Api-Key", "test1234") @@ -764,17 +764,10 @@ mod test { .with_body(response_json.to_string()) .create_async() .await; - app_arc - .lock() - .await - .data - .radarr_data - .indexers - .set_items(vec![indexer()]); let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let RadarrSerdeable::Value(value) = network - .handle_radarr_event(RadarrEvent::TestIndexer(None)) + .handle_radarr_event(RadarrEvent::TestIndexer(1)) .await .unwrap() { @@ -825,7 +818,7 @@ mod test { let async_test_server = server .mock( "POST", - format!("/api/v3{}", RadarrEvent::TestIndexer(None).resource()).as_str(), + format!("/api/v3{}", RadarrEvent::TestIndexer(1).resource()).as_str(), ) .with_status(200) .match_header("X-Api-Key", "test1234") @@ -833,17 +826,10 @@ mod test { .with_body("{}") .create_async() .await; - app_arc - .lock() - .await - .data - .radarr_data - .indexers - .set_items(vec![indexer()]); let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); if let RadarrSerdeable::Value(value) = network - .handle_radarr_event(RadarrEvent::TestIndexer(None)) + .handle_radarr_event(RadarrEvent::TestIndexer(1)) .await .unwrap() { @@ -857,64 +843,6 @@ mod test { } } - #[tokio::test] - async fn test_handle_test_radarr_indexer_event_success_uses_provided_id() { - let indexer_details_json = json!({ - "enableRss": true, - "enableAutomaticSearch": true, - "enableInteractiveSearch": true, - "name": "Test Indexer", - "fields": [ - { - "name": "baseUrl", - "value": "https://test.com", - }, - { - "name": "apiKey", - "value": "", - }, - { - "name": "seedCriteria.seedRatio", - "value": "1.2", - }, - ], - "tags": [1], - "id": 1 - }); - let (async_details_server, app_arc, mut server) = mock_servarr_api( - RequestMethod::Get, - None, - Some(indexer_details_json.clone()), - None, - RadarrEvent::GetIndexers, - Some("/1"), - None, - ) - .await; - let async_test_server = server - .mock( - "POST", - format!("/api/v3{}", RadarrEvent::TestIndexer(None).resource()).as_str(), - ) - .with_status(200) - .match_header("X-Api-Key", "test1234") - .match_body(Matcher::Json(indexer_details_json.clone())) - .with_body("{}") - .create_async() - .await; - let mut network = Network::new(&app_arc, CancellationToken::new(), Client::new()); - - if let RadarrSerdeable::Value(value) = network - .handle_radarr_event(RadarrEvent::TestIndexer(Some(1))) - .await - .unwrap() - { - async_details_server.assert_async().await; - async_test_server.assert_async().await; - assert_eq!(value, json!({})); - } - } - #[tokio::test] async fn test_handle_test_all_radarr_indexers_event() { let indexers = vec![