diff --git a/src/app/sonarr/mod.rs b/src/app/sonarr/mod.rs index 8457f40..7002b8e 100644 --- a/src/app/sonarr/mod.rs +++ b/src/app/sonarr/mod.rs @@ -34,6 +34,11 @@ impl<'a> App<'a> { .dispatch_network_event(SonarrEvent::GetEpisodes(None).into()) .await; } + ActiveSonarrBlock::SeasonHistory => { + self + .dispatch_network_event(SonarrEvent::GetSeasonHistory(None).into()) + .await; + } ActiveSonarrBlock::ManualSeasonSearch => { self .dispatch_network_event(SonarrEvent::GetSeasonReleases(None).into()) diff --git a/src/app/sonarr/sonarr_context_clues.rs b/src/app/sonarr/sonarr_context_clues.rs index 9f91b92..90caa32 100644 --- a/src/app/sonarr/sonarr_context_clues.rs +++ b/src/app/sonarr/sonarr_context_clues.rs @@ -71,25 +71,49 @@ pub static SERIES_HISTORY_CONTEXT_CLUES: [ContextClue; 9] = [ (DEFAULT_KEYBINDINGS.esc, "cancel filter/close"), ]; -pub static SEASON_DETAILS_CONTEXT_CLUES: [ContextClue; 5] = [ +pub static SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES: [ContextClue; 2] = [ + (DEFAULT_KEYBINDINGS.submit, "episode details"), + (DEFAULT_KEYBINDINGS.delete, "delete episode"), +]; + +pub static SEASON_DETAILS_CONTEXT_CLUES: [ContextClue; 4] = [ ( DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc, ), - (DEFAULT_KEYBINDINGS.submit, "details"), - (DEFAULT_KEYBINDINGS.search, "auto search"), - (DEFAULT_KEYBINDINGS.delete, "delete episode"), + (DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc), + ( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc, + ), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), ]; -pub static MANUAL_SEASON_SEARCH_CONTEXT_CLUES: [ContextClue; 5] = [ +pub static SEASON_HISTORY_CONTEXT_CLUES: [ContextClue; 6] = [ ( DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc, ), - (DEFAULT_KEYBINDINGS.search, "auto search"), (DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc), - (DEFAULT_KEYBINDINGS.submit, "details"), + (DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc), + (DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc), + ( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc, + ), + (DEFAULT_KEYBINDINGS.esc, "cancel filter/close"), +]; + +pub static MANUAL_SEASON_SEARCH_CONTEXT_CLUES: [ContextClue; 4] = [ + ( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc, + ), + ( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc, + ), + (DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), ]; @@ -98,12 +122,15 @@ pub static MANUAL_EPISODE_SEARCH_CONTEXT_CLUES: [ContextClue; 4] = [ DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc, ), - (DEFAULT_KEYBINDINGS.search, "auto search"), + ( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc, + ), (DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), ]; -pub static MANUAL_EPISODE_SEARCH_CONTEXTUAL_CONTEXT_CLUES: [ContextClue; 1] = +pub static DETAILS_CONTEXTUAL_CONTEXT_CLUES: [ContextClue; 1] = [(DEFAULT_KEYBINDINGS.submit, "details")]; pub static EPISODE_DETAILS_CONTEXT_CLUES: [ContextClue; 3] = [ @@ -111,10 +138,28 @@ pub static EPISODE_DETAILS_CONTEXT_CLUES: [ContextClue; 3] = [ DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc, ), - (DEFAULT_KEYBINDINGS.search, "auto search"), + ( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc, + ), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), ]; +pub static EPISODE_HISTORY_CONTEXT_CLUES: [ContextClue; 6] = [ + ( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc, + ), + (DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc), + (DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc), + (DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc), + ( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc, + ), + (DEFAULT_KEYBINDINGS.esc, "cancel filter/close"), +]; + pub static SYSTEM_TASKS_CONTEXT_CLUES: [ContextClue; 2] = [ (DEFAULT_KEYBINDINGS.submit, "start task"), (DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc), diff --git a/src/app/sonarr/sonarr_context_clues_tests.rs b/src/app/sonarr/sonarr_context_clues_tests.rs index f5d0c1e..73499d9 100644 --- a/src/app/sonarr/sonarr_context_clues_tests.rs +++ b/src/app/sonarr/sonarr_context_clues_tests.rs @@ -5,11 +5,11 @@ mod tests { use crate::app::{ key_binding::DEFAULT_KEYBINDINGS, sonarr::sonarr_context_clues::{ - ADD_SERIES_SEARCH_RESULTS_CONTEXT_CLUES, EPISODE_DETAILS_CONTEXT_CLUES, - HISTORY_CONTEXT_CLUES, MANUAL_EPISODE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, - MANUAL_EPISODE_SEARCH_CONTEXT_CLUES, MANUAL_SEASON_SEARCH_CONTEXT_CLUES, - SEASON_DETAILS_CONTEXT_CLUES, SERIES_CONTEXT_CLUES, SERIES_DETAILS_CONTEXT_CLUES, - SERIES_HISTORY_CONTEXT_CLUES, SYSTEM_TASKS_CONTEXT_CLUES, + ADD_SERIES_SEARCH_RESULTS_CONTEXT_CLUES, DETAILS_CONTEXTUAL_CONTEXT_CLUES, + EPISODE_DETAILS_CONTEXT_CLUES, HISTORY_CONTEXT_CLUES, MANUAL_EPISODE_SEARCH_CONTEXT_CLUES, + MANUAL_SEASON_SEARCH_CONTEXT_CLUES, SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES, + SEASON_DETAILS_CONTEXT_CLUES, SEASON_HISTORY_CONTEXT_CLUES, SERIES_CONTEXT_CLUES, + SERIES_DETAILS_CONTEXT_CLUES, SERIES_HISTORY_CONTEXT_CLUES, SYSTEM_TASKS_CONTEXT_CLUES, }, }; @@ -225,18 +225,13 @@ mod tests { let (key_binding, description) = season_details_context_clues_iter.next().unwrap(); - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = season_details_context_clues_iter.next().unwrap(); - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); - assert_str_eq!(*description, "auto search"); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.search.desc); let (key_binding, description) = season_details_context_clues_iter.next().unwrap(); - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete); - assert_str_eq!(*description, "delete episode"); + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.auto_search); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.auto_search.desc); let (key_binding, description) = season_details_context_clues_iter.next().unwrap(); @@ -245,6 +240,57 @@ mod tests { assert_eq!(season_details_context_clues_iter.next(), None); } + #[test] + fn test_season_details_contextual_context_clues() { + let mut season_details_contextual_context_clues_iter = + SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES.iter(); + let (key_binding, description) = season_details_contextual_context_clues_iter.next().unwrap(); + + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); + assert_str_eq!(*description, "episode details"); + + let (key_binding, description) = season_details_contextual_context_clues_iter.next().unwrap(); + + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete); + assert_str_eq!(*description, "delete episode"); + assert_eq!(season_details_contextual_context_clues_iter.next(), None); + } + + #[test] + fn test_season_history_context_clues() { + let mut season_history_context_clues_iter = SEASON_HISTORY_CONTEXT_CLUES.iter(); + let (key_binding, description) = season_history_context_clues_iter.next().unwrap(); + + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); + + let (key_binding, description) = season_history_context_clues_iter.next().unwrap(); + + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc); + + let (key_binding, description) = season_history_context_clues_iter.next().unwrap(); + + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.search.desc); + + let (key_binding, description) = season_history_context_clues_iter.next().unwrap(); + + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.filter); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.filter.desc); + + let (key_binding, description) = season_history_context_clues_iter.next().unwrap(); + + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.auto_search); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.auto_search.desc); + + let (key_binding, description) = season_history_context_clues_iter.next().unwrap(); + + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); + assert_str_eq!(*description, "cancel filter/close"); + assert_eq!(season_history_context_clues_iter.next(), None); + } + #[test] fn test_manual_season_search_context_clues() { let mut manual_season_search_context_clues_iter = MANUAL_SEASON_SEARCH_CONTEXT_CLUES.iter(); @@ -256,8 +302,8 @@ mod tests { let (key_binding, description) = manual_season_search_context_clues_iter.next().unwrap(); - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); - assert_str_eq!(*description, "auto search"); + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.auto_search); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.auto_search.desc); let (key_binding, description) = manual_season_search_context_clues_iter.next().unwrap(); @@ -266,11 +312,6 @@ mod tests { let (key_binding, description) = manual_season_search_context_clues_iter.next().unwrap(); - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = manual_season_search_context_clues_iter.next().unwrap(); - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); assert_eq!(manual_season_search_context_clues_iter.next(), None); @@ -287,8 +328,8 @@ mod tests { let (key_binding, description) = manual_episode_search_context_clues_iter.next().unwrap(); - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); - assert_str_eq!(*description, "auto search"); + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.auto_search); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.auto_search.desc); let (key_binding, description) = manual_episode_search_context_clues_iter.next().unwrap(); @@ -303,9 +344,8 @@ mod tests { } #[test] - fn test_manual_episode_search_contextual_context_clues() { - let mut manual_search_contextual_context_clues_iter = - MANUAL_EPISODE_SEARCH_CONTEXTUAL_CONTEXT_CLUES.iter(); + fn details_contextual_context_clues() { + let mut manual_search_contextual_context_clues_iter = DETAILS_CONTEXTUAL_CONTEXT_CLUES.iter(); let (key_binding, description) = manual_search_contextual_context_clues_iter.next().unwrap(); assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); @@ -324,8 +364,8 @@ mod tests { let (key_binding, description) = episode_details_context_clues_iter.next().unwrap(); - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); - assert_str_eq!(*description, "auto search"); + assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.auto_search); + assert_str_eq!(*description, DEFAULT_KEYBINDINGS.auto_search.desc); let (key_binding, description) = episode_details_context_clues_iter.next().unwrap(); diff --git a/src/app/sonarr/sonarr_tests.rs b/src/app/sonarr/sonarr_tests.rs index 99bc61c..91dfe63 100644 --- a/src/app/sonarr/sonarr_tests.rs +++ b/src/app/sonarr/sonarr_tests.rs @@ -87,6 +87,23 @@ mod tests { assert_eq!(app.tick_count, 0); } + #[tokio::test] + async fn test_dispatch_by_season_history_block() { + let (mut app, mut sync_network_rx) = construct_app_unit(); + + app + .dispatch_by_sonarr_block(&ActiveSonarrBlock::SeasonHistory) + .await; + + assert!(app.is_loading); + assert_eq!( + sync_network_rx.recv().await.unwrap(), + SonarrEvent::GetSeasonHistory(None).into() + ); + assert!(!app.data.sonarr_data.prompt_confirm); + assert_eq!(app.tick_count, 0); + } + #[tokio::test] async fn test_dispatch_by_manual_season_search_block() { let (mut app, mut sync_network_rx) = construct_app_unit(); diff --git a/src/models/servarr_data/sonarr/modals.rs b/src/models/servarr_data/sonarr/modals.rs index 92c7645..ad08bc7 100644 --- a/src/models/servarr_data/sonarr/modals.rs +++ b/src/models/servarr_data/sonarr/modals.rs @@ -4,9 +4,10 @@ use crate::{ app::{ context_clues::build_context_clue_string, sonarr::sonarr_context_clues::{ - EPISODE_DETAILS_CONTEXT_CLUES, MANUAL_EPISODE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, - MANUAL_EPISODE_SEARCH_CONTEXT_CLUES, MANUAL_SEASON_SEARCH_CONTEXT_CLUES, - SEASON_DETAILS_CONTEXT_CLUES, + DETAILS_CONTEXTUAL_CONTEXT_CLUES, EPISODE_DETAILS_CONTEXT_CLUES, + EPISODE_HISTORY_CONTEXT_CLUES, MANUAL_EPISODE_SEARCH_CONTEXT_CLUES, + MANUAL_SEASON_SEARCH_CONTEXT_CLUES, SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES, + SEASON_DETAILS_CONTEXT_CLUES, SEASON_HISTORY_CONTEXT_CLUES, }, }, models::{ @@ -287,8 +288,8 @@ impl Default for EpisodeDetailsModal { TabRoute { title: "History", route: ActiveSonarrBlock::EpisodeHistory.into(), - help: build_context_clue_string(&EPISODE_DETAILS_CONTEXT_CLUES), - contextual_help: None, + help: build_context_clue_string(&EPISODE_HISTORY_CONTEXT_CLUES), + contextual_help: Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)), }, TabRoute { title: "File", @@ -300,9 +301,7 @@ impl Default for EpisodeDetailsModal { title: "Manual Search", route: ActiveSonarrBlock::ManualEpisodeSearch.into(), help: build_context_clue_string(&MANUAL_EPISODE_SEARCH_CONTEXT_CLUES), - contextual_help: Some(build_context_clue_string( - &MANUAL_EPISODE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, - )), + contextual_help: Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)), }, ]), } @@ -328,13 +327,19 @@ impl Default for SeasonDetailsModal { TabRoute { title: "Episodes", route: ActiveSonarrBlock::SeasonDetails.into(), - help: String::new(), + help: build_context_clue_string(&SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES), contextual_help: Some(build_context_clue_string(&SEASON_DETAILS_CONTEXT_CLUES)), }, + TabRoute { + title: "History", + route: ActiveSonarrBlock::SeasonHistory.into(), + help: build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES), + contextual_help: Some(build_context_clue_string(&SEASON_HISTORY_CONTEXT_CLUES)), + }, TabRoute { title: "Manual Search", route: ActiveSonarrBlock::ManualSeasonSearch.into(), - help: String::new(), + help: build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES), contextual_help: Some(build_context_clue_string( &MANUAL_SEASON_SEARCH_CONTEXT_CLUES, )), diff --git a/src/models/servarr_data/sonarr/modals_tests.rs b/src/models/servarr_data/sonarr/modals_tests.rs index 4d98505..e35ba5b 100644 --- a/src/models/servarr_data/sonarr/modals_tests.rs +++ b/src/models/servarr_data/sonarr/modals_tests.rs @@ -7,9 +7,10 @@ mod tests { use crate::app::context_clues::build_context_clue_string; use crate::app::sonarr::sonarr_context_clues::{ - EPISODE_DETAILS_CONTEXT_CLUES, MANUAL_EPISODE_SEARCH_CONTEXTUAL_CONTEXT_CLUES, + DETAILS_CONTEXTUAL_CONTEXT_CLUES, EPISODE_DETAILS_CONTEXT_CLUES, EPISODE_HISTORY_CONTEXT_CLUES, MANUAL_EPISODE_SEARCH_CONTEXT_CLUES, MANUAL_SEASON_SEARCH_CONTEXT_CLUES, - SEASON_DETAILS_CONTEXT_CLUES, + SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES, SEASON_DETAILS_CONTEXT_CLUES, + SEASON_HISTORY_CONTEXT_CLUES, }; use crate::models::servarr_data::sonarr::modals::{ EditSeriesModal, EpisodeDetailsModal, SeasonDetailsModal, @@ -274,11 +275,12 @@ mod tests { ); assert_str_eq!( episode_details_modal.episode_details_tabs.tabs[1].help, - build_context_clue_string(&EPISODE_DETAILS_CONTEXT_CLUES) + build_context_clue_string(&EPISODE_HISTORY_CONTEXT_CLUES) + ); + assert_eq!( + episode_details_modal.episode_details_tabs.tabs[1].contextual_help, + Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)) ); - assert!(episode_details_modal.episode_details_tabs.tabs[1] - .contextual_help - .is_none()); assert_str_eq!( episode_details_modal.episode_details_tabs.tabs[2].title, @@ -310,9 +312,7 @@ mod tests { ); assert_eq!( episode_details_modal.episode_details_tabs.tabs[3].contextual_help, - Some(build_context_clue_string( - &MANUAL_EPISODE_SEARCH_CONTEXTUAL_CONTEXT_CLUES - )) + Some(build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES)) ); } @@ -325,7 +325,7 @@ mod tests { assert!(season_details_modal.season_releases.is_empty()); assert!(season_details_modal.season_history.is_empty()); - assert_eq!(season_details_modal.season_details_tabs.tabs.len(), 2); + assert_eq!(season_details_modal.season_details_tabs.tabs.len(), 3); assert_str_eq!( season_details_modal.season_details_tabs.tabs[0].title, @@ -335,9 +335,10 @@ mod tests { season_details_modal.season_details_tabs.tabs[0].route, ActiveSonarrBlock::SeasonDetails.into() ); - assert!(season_details_modal.season_details_tabs.tabs[0] - .help - .is_empty()); + assert_str_eq!( + season_details_modal.season_details_tabs.tabs[0].help, + build_context_clue_string(&SEASON_DETAILS_CONTEXTUAL_CONTEXT_CLUES) + ); assert_eq!( season_details_modal.season_details_tabs.tabs[0].contextual_help, Some(build_context_clue_string(&SEASON_DETAILS_CONTEXT_CLUES)) @@ -345,17 +346,35 @@ mod tests { assert_str_eq!( season_details_modal.season_details_tabs.tabs[1].title, - "Manual Search" + "History" ); assert_eq!( season_details_modal.season_details_tabs.tabs[1].route, - ActiveSonarrBlock::ManualSeasonSearch.into() + ActiveSonarrBlock::SeasonHistory.into() + ); + assert_str_eq!( + season_details_modal.season_details_tabs.tabs[1].help, + build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES) ); - assert!(season_details_modal.season_details_tabs.tabs[1] - .help - .is_empty()); assert_eq!( season_details_modal.season_details_tabs.tabs[1].contextual_help, + Some(build_context_clue_string(&SEASON_HISTORY_CONTEXT_CLUES)) + ); + + assert_str_eq!( + season_details_modal.season_details_tabs.tabs[2].title, + "Manual Search" + ); + assert_eq!( + season_details_modal.season_details_tabs.tabs[2].route, + ActiveSonarrBlock::ManualSeasonSearch.into() + ); + assert_str_eq!( + season_details_modal.season_details_tabs.tabs[2].help, + build_context_clue_string(&DETAILS_CONTEXTUAL_CONTEXT_CLUES) + ); + assert_eq!( + season_details_modal.season_details_tabs.tabs[2].contextual_help, Some(build_context_clue_string( &MANUAL_SEASON_SEARCH_CONTEXT_CLUES )) diff --git a/src/models/servarr_data/sonarr/sonarr_data.rs b/src/models/servarr_data/sonarr/sonarr_data.rs index 38ee436..1b5bcd2 100644 --- a/src/models/servarr_data/sonarr/sonarr_data.rs +++ b/src/models/servarr_data/sonarr/sonarr_data.rs @@ -254,6 +254,8 @@ pub enum ActiveSonarrBlock { FilterSeriesError, FilterSeriesHistory, FilterSeriesHistoryError, + FilterSeasonHistory, + FilterSeasonHistoryError, History, HistoryItemDetails, HistorySortPrompt, @@ -280,7 +282,12 @@ pub enum ActiveSonarrBlock { SearchSeriesError, SearchSeriesHistory, SearchSeriesHistoryError, + SearchSeasonHistory, + SearchSeasonHistoryError, SeasonDetails, + SeasonHistory, + SeasonHistoryDetails, + SeasonHistorySortPrompt, #[default] Series, SeriesDetails, @@ -326,6 +333,23 @@ pub static SERIES_DETAILS_BLOCKS: [ActiveSonarrBlock; 12] = [ ActiveSonarrBlock::SeriesHistoryDetails, ]; +pub static SEASON_DETAILS_BLOCKS: [ActiveSonarrBlock; 14] = [ + ActiveSonarrBlock::SeasonDetails, + ActiveSonarrBlock::SeasonHistory, + ActiveSonarrBlock::SearchSeason, + ActiveSonarrBlock::SearchSeasonError, + ActiveSonarrBlock::AutomaticallySearchSeasonPrompt, + ActiveSonarrBlock::SearchSeasonHistory, + ActiveSonarrBlock::SearchSeasonHistoryError, + ActiveSonarrBlock::FilterSeasonHistory, + ActiveSonarrBlock::FilterSeasonHistoryError, + ActiveSonarrBlock::SeasonHistorySortPrompt, + ActiveSonarrBlock::SeasonHistoryDetails, + ActiveSonarrBlock::ManualSeasonSearch, + ActiveSonarrBlock::ManualSeasonSearchConfirmPrompt, + ActiveSonarrBlock::ManualSeasonSearchSortPrompt, +]; + pub static ADD_SERIES_BLOCKS: [ActiveSonarrBlock; 13] = [ ActiveSonarrBlock::AddSeriesAlreadyInLibrary, ActiveSonarrBlock::AddSeriesConfirmPrompt, diff --git a/src/models/servarr_data/sonarr/sonarr_data_tests.rs b/src/models/servarr_data/sonarr/sonarr_data_tests.rs index 6e82dc3..5f65129 100644 --- a/src/models/servarr_data/sonarr/sonarr_data_tests.rs +++ b/src/models/servarr_data/sonarr/sonarr_data_tests.rs @@ -228,7 +228,7 @@ mod tests { EDIT_INDEXER_NZB_SELECTION_BLOCKS, EDIT_INDEXER_TORRENT_SELECTION_BLOCKS, EDIT_SERIES_BLOCKS, EDIT_SERIES_SELECTION_BLOCKS, HISTORY_BLOCKS, INDEXERS_BLOCKS, INDEXER_SETTINGS_BLOCKS, INDEXER_SETTINGS_SELECTION_BLOCKS, LIBRARY_BLOCKS, ROOT_FOLDERS_BLOCKS, - SERIES_DETAILS_BLOCKS, SYSTEM_DETAILS_BLOCKS, + SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS, SYSTEM_DETAILS_BLOCKS, }; #[test] @@ -605,5 +605,24 @@ mod tests { assert!(SERIES_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SeriesHistorySortPrompt)); assert!(SERIES_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SeriesHistoryDetails)); } + + #[test] + fn test_season_details_blocks_contents() { + assert_eq!(SEASON_DETAILS_BLOCKS.len(), 14); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SeasonDetails)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SeasonHistory)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SearchSeason)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SearchSeasonError)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::AutomaticallySearchSeasonPrompt)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SearchSeasonHistory)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SearchSeasonHistoryError)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::FilterSeasonHistory)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::FilterSeasonHistoryError)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SeasonHistorySortPrompt)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::SeasonHistoryDetails)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::ManualSeasonSearch)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::ManualSeasonSearchConfirmPrompt)); + assert!(SEASON_DETAILS_BLOCKS.contains(&ActiveSonarrBlock::ManualSeasonSearchSortPrompt)); + } } }