feat(app): Model and modal support for the season and episode details popups

This commit is contained in:
2024-12-09 15:15:09 -07:00
parent 6427a80bd1
commit f3b7f155b7
8 changed files with 240 additions and 66 deletions
+5
View File
@@ -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())
+55 -10
View File
@@ -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),
+67 -27
View File
@@ -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();
+17
View File
@@ -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();
+15 -10
View File
@@ -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,
)),
+37 -18
View File
@@ -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
))
@@ -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,
@@ -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));
}
}
}