fix: show confirmation prompt clues on delete prompts
Delete confirmation prompts had no arm in any of the context clue providers, so they fell through to the main tab's contextual help and displayed the library tab's hints, such as add, sort and edit, while the user was looking at a delete confirmation. Map the delete block arrays in all four servarrs to the shared confirmation prompt clues, matching how the other prompts and selection modals are already wired.
This commit is contained in:
8 files changed
+134
-8
No files matched your search
@@ -7,8 +7,8 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS;
|
|||||||
use crate::models::Route;
|
use crate::models::Route;
|
||||||
use crate::models::servarr_data::lidarr::lidarr_data::{
|
use crate::models::servarr_data::lidarr::lidarr_data::{
|
||||||
ADD_ARTIST_BLOCKS, ADD_ROOT_FOLDER_BLOCKS, ALBUM_DETAILS_BLOCKS, ARTIST_DETAILS_BLOCKS,
|
ADD_ARTIST_BLOCKS, ADD_ROOT_FOLDER_BLOCKS, ALBUM_DETAILS_BLOCKS, ARTIST_DETAILS_BLOCKS,
|
||||||
ActiveLidarrBlock, EDIT_ARTIST_BLOCKS, EDIT_INDEXER_BLOCKS, INDEXER_SETTINGS_BLOCKS,
|
ActiveLidarrBlock, DELETE_ALBUM_BLOCKS, DELETE_ARTIST_BLOCKS, EDIT_ARTIST_BLOCKS,
|
||||||
TRACK_DETAILS_BLOCKS,
|
EDIT_INDEXER_BLOCKS, INDEXER_SETTINGS_BLOCKS, TRACK_DETAILS_BLOCKS,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -203,6 +203,11 @@ impl ContextClueProvider for LidarrContextClueProvider {
|
|||||||
{
|
{
|
||||||
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
||||||
}
|
}
|
||||||
|
_ if DELETE_ARTIST_BLOCKS.contains(&active_lidarr_block)
|
||||||
|
|| DELETE_ALBUM_BLOCKS.contains(&active_lidarr_block) =>
|
||||||
|
{
|
||||||
|
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
||||||
|
}
|
||||||
ActiveLidarrBlock::AddArtistPrompt
|
ActiveLidarrBlock::AddArtistPrompt
|
||||||
| ActiveLidarrBlock::AddArtistSelectMonitor
|
| ActiveLidarrBlock::AddArtistSelectMonitor
|
||||||
| ActiveLidarrBlock::AddArtistSelectMonitorNewItems
|
| ActiveLidarrBlock::AddArtistSelectMonitorNewItems
|
||||||
|
|||||||
@@ -577,6 +577,42 @@ mod tests {
|
|||||||
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
fn test_lidarr_context_clue_provider_confirmation_prompt_context_clues_delete_artist_blocks(
|
||||||
|
#[values(
|
||||||
|
ActiveLidarrBlock::DeleteArtistPrompt,
|
||||||
|
ActiveLidarrBlock::DeleteArtistConfirmPrompt,
|
||||||
|
ActiveLidarrBlock::DeleteArtistToggleAddListExclusion,
|
||||||
|
ActiveLidarrBlock::DeleteArtistToggleDeleteFile
|
||||||
|
)]
|
||||||
|
active_lidarr_block: ActiveLidarrBlock,
|
||||||
|
) {
|
||||||
|
let mut app = App::test_default();
|
||||||
|
app.push_navigation_stack(active_lidarr_block.into());
|
||||||
|
|
||||||
|
let context_clues = LidarrContextClueProvider::get_context_clues(&mut app);
|
||||||
|
|
||||||
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
fn test_lidarr_context_clue_provider_confirmation_prompt_context_clues_delete_album_blocks(
|
||||||
|
#[values(
|
||||||
|
ActiveLidarrBlock::DeleteAlbumPrompt,
|
||||||
|
ActiveLidarrBlock::DeleteAlbumConfirmPrompt,
|
||||||
|
ActiveLidarrBlock::DeleteAlbumToggleAddListExclusion,
|
||||||
|
ActiveLidarrBlock::DeleteAlbumToggleDeleteFile
|
||||||
|
)]
|
||||||
|
active_lidarr_block: ActiveLidarrBlock,
|
||||||
|
) {
|
||||||
|
let mut app = App::test_default();
|
||||||
|
app.push_navigation_stack(active_lidarr_block.into());
|
||||||
|
|
||||||
|
let context_clues = LidarrContextClueProvider::get_context_clues(&mut app);
|
||||||
|
|
||||||
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_lidarr_context_clue_provider_system_tasks_clues() {
|
fn test_lidarr_context_clue_provider_system_tasks_clues() {
|
||||||
let mut app = App::test_default();
|
let mut app = App::test_default();
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ use crate::app::context_clues::{
|
|||||||
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
|
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
|
||||||
use crate::models::Route;
|
use crate::models::Route;
|
||||||
use crate::models::servarr_data::radarr::radarr_data::{
|
use crate::models::servarr_data::radarr::radarr_data::{
|
||||||
ADD_MOVIE_BLOCKS, ActiveRadarrBlock, EDIT_COLLECTION_BLOCKS, EDIT_INDEXER_BLOCKS,
|
ADD_MOVIE_BLOCKS, ActiveRadarrBlock, DELETE_MOVIE_BLOCKS, EDIT_COLLECTION_BLOCKS,
|
||||||
EDIT_MOVIE_BLOCKS, INDEXER_SETTINGS_BLOCKS, MOVIE_DETAILS_BLOCKS,
|
EDIT_INDEXER_BLOCKS, EDIT_MOVIE_BLOCKS, INDEXER_SETTINGS_BLOCKS, MOVIE_DETAILS_BLOCKS,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -120,6 +120,9 @@ impl ContextClueProvider for RadarrContextClueProvider {
|
|||||||
{
|
{
|
||||||
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
||||||
}
|
}
|
||||||
|
_ if DELETE_MOVIE_BLOCKS.contains(&active_radarr_block) => {
|
||||||
|
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
||||||
|
}
|
||||||
ActiveRadarrBlock::AddMoviePrompt
|
ActiveRadarrBlock::AddMoviePrompt
|
||||||
| ActiveRadarrBlock::AddMovieSelectMonitor
|
| ActiveRadarrBlock::AddMovieSelectMonitor
|
||||||
| ActiveRadarrBlock::AddMovieSelectMinimumAvailability
|
| ActiveRadarrBlock::AddMovieSelectMinimumAvailability
|
||||||
|
|||||||
@@ -415,6 +415,25 @@ mod tests {
|
|||||||
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
fn test_radarr_context_clue_provider_confirmation_prompt_context_clues_delete_movie_blocks(
|
||||||
|
#[values(
|
||||||
|
ActiveRadarrBlock::DeleteMoviePrompt,
|
||||||
|
ActiveRadarrBlock::DeleteMovieConfirmPrompt,
|
||||||
|
ActiveRadarrBlock::DeleteMovieToggleAddListExclusion,
|
||||||
|
ActiveRadarrBlock::DeleteMovieToggleDeleteFile
|
||||||
|
)]
|
||||||
|
active_radarr_block: ActiveRadarrBlock,
|
||||||
|
) {
|
||||||
|
let mut app = App::test_default();
|
||||||
|
app.data.radarr_data = RadarrData::default();
|
||||||
|
app.push_navigation_stack(active_radarr_block.into());
|
||||||
|
|
||||||
|
let context_clues = RadarrContextClueProvider::get_context_clues(&mut app);
|
||||||
|
|
||||||
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
|
}
|
||||||
|
|
||||||
#[rstest]
|
#[rstest]
|
||||||
fn test_radarr_context_clue_provider_add_movie_search_results_context_clues(
|
fn test_radarr_context_clue_provider_add_movie_search_results_context_clues(
|
||||||
#[values(
|
#[values(
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ use crate::app::key_binding::DEFAULT_KEYBINDINGS;
|
|||||||
use crate::models::Route;
|
use crate::models::Route;
|
||||||
use crate::models::servarr_data::readarr::readarr_data::{
|
use crate::models::servarr_data::readarr::readarr_data::{
|
||||||
ADD_AUTHOR_BLOCKS, ADD_ROOT_FOLDER_BLOCKS, AUTHOR_DETAILS_BLOCKS, ActiveReadarrBlock,
|
ADD_AUTHOR_BLOCKS, ADD_ROOT_FOLDER_BLOCKS, AUTHOR_DETAILS_BLOCKS, ActiveReadarrBlock,
|
||||||
BOOK_DETAILS_BLOCKS, EDIT_AUTHOR_BLOCKS, EDIT_INDEXER_BLOCKS, EDITION_DETAILS_BLOCKS,
|
BOOK_DETAILS_BLOCKS, DELETE_AUTHOR_BLOCKS, DELETE_BOOK_BLOCKS, EDIT_AUTHOR_BLOCKS,
|
||||||
INDEXER_SETTINGS_BLOCKS,
|
EDIT_INDEXER_BLOCKS, EDITION_DETAILS_BLOCKS, INDEXER_SETTINGS_BLOCKS,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -191,6 +191,11 @@ impl ContextClueProvider for ReadarrContextClueProvider {
|
|||||||
{
|
{
|
||||||
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
||||||
}
|
}
|
||||||
|
_ if DELETE_AUTHOR_BLOCKS.contains(&active_readarr_block)
|
||||||
|
|| DELETE_BOOK_BLOCKS.contains(&active_readarr_block) =>
|
||||||
|
{
|
||||||
|
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
||||||
|
}
|
||||||
ActiveReadarrBlock::AddAuthorPrompt
|
ActiveReadarrBlock::AddAuthorPrompt
|
||||||
| ActiveReadarrBlock::AddAuthorSelectMonitor
|
| ActiveReadarrBlock::AddAuthorSelectMonitor
|
||||||
| ActiveReadarrBlock::AddAuthorSelectMonitorNewItems
|
| ActiveReadarrBlock::AddAuthorSelectMonitorNewItems
|
||||||
|
|||||||
@@ -548,6 +548,42 @@ mod tests {
|
|||||||
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
fn test_readarr_context_clue_provider_confirmation_prompt_context_clues_delete_author_blocks(
|
||||||
|
#[values(
|
||||||
|
ActiveReadarrBlock::DeleteAuthorPrompt,
|
||||||
|
ActiveReadarrBlock::DeleteAuthorConfirmPrompt,
|
||||||
|
ActiveReadarrBlock::DeleteAuthorToggleAddListExclusion,
|
||||||
|
ActiveReadarrBlock::DeleteAuthorToggleDeleteFile
|
||||||
|
)]
|
||||||
|
active_readarr_block: ActiveReadarrBlock,
|
||||||
|
) {
|
||||||
|
let mut app = App::test_default();
|
||||||
|
app.push_navigation_stack(active_readarr_block.into());
|
||||||
|
|
||||||
|
let context_clues = ReadarrContextClueProvider::get_context_clues(&mut app);
|
||||||
|
|
||||||
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
fn test_readarr_context_clue_provider_confirmation_prompt_context_clues_delete_book_blocks(
|
||||||
|
#[values(
|
||||||
|
ActiveReadarrBlock::DeleteBookPrompt,
|
||||||
|
ActiveReadarrBlock::DeleteBookConfirmPrompt,
|
||||||
|
ActiveReadarrBlock::DeleteBookToggleAddListExclusion,
|
||||||
|
ActiveReadarrBlock::DeleteBookToggleDeleteFile
|
||||||
|
)]
|
||||||
|
active_readarr_block: ActiveReadarrBlock,
|
||||||
|
) {
|
||||||
|
let mut app = App::test_default();
|
||||||
|
app.push_navigation_stack(active_readarr_block.into());
|
||||||
|
|
||||||
|
let context_clues = ReadarrContextClueProvider::get_context_clues(&mut app);
|
||||||
|
|
||||||
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_readarr_context_clue_provider_system_tasks_clues() {
|
fn test_readarr_context_clue_provider_system_tasks_clues() {
|
||||||
let mut app = App::test_default();
|
let mut app = App::test_default();
|
||||||
|
|||||||
@@ -5,8 +5,9 @@ use crate::app::context_clues::{
|
|||||||
use crate::app::{App, context_clues::ContextClue, key_binding::DEFAULT_KEYBINDINGS};
|
use crate::app::{App, context_clues::ContextClue, key_binding::DEFAULT_KEYBINDINGS};
|
||||||
use crate::models::Route;
|
use crate::models::Route;
|
||||||
use crate::models::servarr_data::sonarr::sonarr_data::{
|
use crate::models::servarr_data::sonarr::sonarr_data::{
|
||||||
ADD_SERIES_BLOCKS, ActiveSonarrBlock, EDIT_INDEXER_BLOCKS, EDIT_SERIES_BLOCKS,
|
ADD_SERIES_BLOCKS, ActiveSonarrBlock, DELETE_SERIES_BLOCKS, EDIT_INDEXER_BLOCKS,
|
||||||
EPISODE_DETAILS_BLOCKS, INDEXER_SETTINGS_BLOCKS, SEASON_DETAILS_BLOCKS, SERIES_DETAILS_BLOCKS,
|
EDIT_SERIES_BLOCKS, EPISODE_DETAILS_BLOCKS, INDEXER_SETTINGS_BLOCKS, SEASON_DETAILS_BLOCKS,
|
||||||
|
SERIES_DETAILS_BLOCKS,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -207,6 +208,9 @@ impl ContextClueProvider for SonarrContextClueProvider {
|
|||||||
{
|
{
|
||||||
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
||||||
}
|
}
|
||||||
|
_ if DELETE_SERIES_BLOCKS.contains(&active_sonarr_block) => {
|
||||||
|
Some(&CONFIRMATION_PROMPT_CONTEXT_CLUES)
|
||||||
|
}
|
||||||
ActiveSonarrBlock::AddSeriesPrompt
|
ActiveSonarrBlock::AddSeriesPrompt
|
||||||
| ActiveSonarrBlock::AddSeriesSelectMonitor
|
| ActiveSonarrBlock::AddSeriesSelectMonitor
|
||||||
| ActiveSonarrBlock::AddSeriesSelectSeriesType
|
| ActiveSonarrBlock::AddSeriesSelectSeriesType
|
||||||
|
|||||||
@@ -603,6 +603,24 @@ mod tests {
|
|||||||
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[rstest]
|
||||||
|
fn test_sonarr_context_clue_provider_confirmation_prompt_popup_clues_delete_series_blocks(
|
||||||
|
#[values(
|
||||||
|
ActiveSonarrBlock::DeleteSeriesPrompt,
|
||||||
|
ActiveSonarrBlock::DeleteSeriesConfirmPrompt,
|
||||||
|
ActiveSonarrBlock::DeleteSeriesToggleAddListExclusion,
|
||||||
|
ActiveSonarrBlock::DeleteSeriesToggleDeleteFile
|
||||||
|
)]
|
||||||
|
active_sonarr_block: ActiveSonarrBlock,
|
||||||
|
) {
|
||||||
|
let mut app = App::test_default();
|
||||||
|
app.push_navigation_stack(active_sonarr_block.into());
|
||||||
|
|
||||||
|
let context_clues = SonarrContextClueProvider::get_context_clues(&mut app);
|
||||||
|
|
||||||
|
assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES);
|
||||||
|
}
|
||||||
|
|
||||||
#[rstest]
|
#[rstest]
|
||||||
fn test_sonarr_context_clue_provider_add_series_search_results_clues(
|
fn test_sonarr_context_clue_provider_add_series_search_results_clues(
|
||||||
#[values(
|
#[values(
|
||||||
|
|||||||
Reference in new issue
Block a user