refactor: Created dedicated proptests and assertions to clean up the handler unit tests

This commit is contained in:
2025-12-04 22:57:06 -07:00
parent 35dce0bf01
commit 49fd086b92
46 changed files with 1023 additions and 1018 deletions
@@ -2,6 +2,8 @@
mod tests {
use crate::app::App;
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::assert_modal_absent;
use crate::assert_navigation_pushed;
use crate::handlers::KeyEventHandler;
use crate::handlers::sonarr_handlers::library::season_details_handler::{
SeasonDetailsHandler, releases_sorting_options,
@@ -37,10 +39,7 @@ mod tests {
SeasonDetailsHandler::new(DELETE_KEY, &mut app, ActiveSonarrBlock::SeasonDetails, None)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::DeleteEpisodeFilePrompt.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::DeleteEpisodeFilePrompt.into());
}
#[test]
@@ -139,7 +138,7 @@ mod tests {
.season_details_tabs
.get_active_route()
);
assert_eq!(app.get_current_route(), left_block.into());
assert_navigation_pushed!(app, left_block.into());
SeasonDetailsHandler::new(DEFAULT_KEYBINDINGS.right.key, &mut app, left_block, None).handle();
@@ -154,12 +153,13 @@ mod tests {
.season_details_tabs
.get_active_route()
);
assert_eq!(app.get_current_route(), right_block.into());
assert_navigation_pushed!(app, right_block.into());
}
}
mod test_handle_submit {
use super::*;
use crate::assert_navigation_popped;
use crate::event::Key;
use crate::models::stateful_table::StatefulTable;
use crate::network::sonarr_network::SonarrEvent;
@@ -176,10 +176,7 @@ mod tests {
SeasonDetailsHandler::new(SUBMIT_KEY, &mut app, ActiveSonarrBlock::SeasonDetails, None)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EpisodeDetails.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::EpisodeDetails.into());
}
#[test]
@@ -227,10 +224,7 @@ mod tests {
SeasonDetailsHandler::new(SUBMIT_KEY, &mut app, ActiveSonarrBlock::SeasonHistory, None)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeasonHistoryDetails.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::SeasonHistoryDetails.into());
}
#[test]
@@ -295,7 +289,7 @@ mod tests {
SeasonDetailsHandler::new(SUBMIT_KEY, &mut app, prompt_block, None).handle();
assert!(app.data.sonarr_data.prompt_confirm);
assert_eq!(app.get_current_route(), active_sonarr_block.into());
assert_navigation_popped!(app, active_sonarr_block.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(expected_action)
@@ -319,10 +313,7 @@ mod tests {
.handle();
assert!(app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::ManualSeasonSearch.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::ManualSeasonSearch.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::DownloadRelease(SonarrReleaseDownloadBody {
@@ -352,10 +343,7 @@ mod tests {
SeasonDetailsHandler::new(SUBMIT_KEY, &mut app, prompt_block, None).handle();
assert!(!app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeasonDetails.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::SeasonDetails.into());
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
}
@@ -373,8 +361,8 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
assert_navigation_pushed!(
app,
ActiveSonarrBlock::ManualSeasonSearchConfirmPrompt.into()
);
}
@@ -403,6 +391,7 @@ mod tests {
mod test_handle_esc {
use super::*;
use crate::assert_navigation_popped;
use crate::event::Key;
use crate::models::sonarr_models::SonarrHistoryItem;
use crate::models::stateful_table::StatefulTable;
@@ -426,10 +415,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeasonHistory.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::SeasonHistory.into());
}
#[rstest]
@@ -452,10 +438,7 @@ mod tests {
SeasonDetailsHandler::new(ESC_KEY, &mut app, prompt_block, None).handle();
assert!(!app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeasonDetails.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::SeasonDetails.into());
}
#[test]
@@ -536,16 +519,14 @@ mod tests {
SeasonDetailsHandler::new(ESC_KEY, &mut app, active_sonarr_block, None).handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeriesDetails.into()
);
assert!(app.data.sonarr_data.season_details_modal.is_none());
assert_navigation_popped!(app, ActiveSonarrBlock::SeriesDetails.into());
assert_modal_absent!(app.data.sonarr_data.season_details_modal);
}
}
mod test_handle_key_char {
use super::*;
use crate::assert_navigation_popped;
use crate::models::servarr_data::sonarr::sonarr_data::sonarr_test_utils::utils::create_test_sonarr_data;
use crate::network::sonarr_network::SonarrEvent;
use pretty_assertions::assert_eq;
@@ -605,7 +586,7 @@ mod tests {
ActiveSonarrBlock::SeasonDetails.into()
);
assert!(!app.data.sonarr_data.prompt_confirm);
assert!(app.data.sonarr_data.prompt_confirm_action.is_none());
assert_modal_absent!(app.data.sonarr_data.prompt_confirm_action);
assert!(!app.is_routing);
}
@@ -630,8 +611,8 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
assert_navigation_pushed!(
app,
ActiveSonarrBlock::AutomaticallySearchSeasonPrompt.into()
);
}
@@ -682,7 +663,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), active_sonarr_block.into());
assert_navigation_pushed!(app, active_sonarr_block.into());
assert!(app.is_routing);
}
@@ -743,7 +724,7 @@ mod tests {
.handle();
assert!(app.data.sonarr_data.prompt_confirm);
assert_eq!(app.get_current_route(), active_sonarr_block.into());
assert_navigation_popped!(app, active_sonarr_block.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(expected_action)
@@ -767,10 +748,7 @@ mod tests {
.handle();
assert!(app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::ManualSeasonSearch.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::ManualSeasonSearch.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::DownloadRelease(SonarrReleaseDownloadBody {