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
@@ -7,6 +7,9 @@ mod tests {
use crate::app::App;
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::assert_modal_absent;
use crate::assert_modal_present;
use crate::assert_navigation_pushed;
use crate::event::Key;
use crate::handlers::KeyEventHandler;
use crate::handlers::sonarr_handlers::library::add_series_handler::AddSeriesHandler;
@@ -894,16 +897,16 @@ mod tests {
}
mod test_handle_submit {
use bimap::BiMap;
use pretty_assertions::{assert_eq, assert_str_eq};
use rstest::rstest;
use crate::assert_navigation_popped;
use crate::models::BlockSelectionState;
use crate::models::servarr_data::sonarr::modals::AddSeriesModal;
use crate::models::servarr_data::sonarr::sonarr_data::ADD_SERIES_SELECTION_BLOCKS;
use crate::models::sonarr_models::Series;
use crate::models::stateful_table::StatefulTable;
use crate::network::sonarr_network::SonarrEvent;
use bimap::BiMap;
use pretty_assertions::{assert_eq, assert_str_eq};
use rstest::rstest;
use super::*;
@@ -925,10 +928,7 @@ mod tests {
.handle();
assert!(!app.ignore_special_keys_for_textbox_input);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesSearchResults.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::AddSeriesSearchResults.into());
}
#[test]
@@ -972,15 +972,12 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesPrompt.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::AddSeriesPrompt.into());
assert_eq!(
app.data.sonarr_data.selected_block.get_active_block(),
ActiveSonarrBlock::AddSeriesSelectRootFolder
);
assert!(app.data.sonarr_data.add_series_modal.is_some());
assert_modal_present!(app.data.sonarr_data.add_series_modal);
assert!(
!app
.data
@@ -1048,7 +1045,7 @@ mod tests {
app.get_current_route(),
ActiveSonarrBlock::AddSeriesSearchResults.into()
);
assert!(app.data.sonarr_data.add_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.add_series_modal);
}
#[test]
@@ -1091,10 +1088,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesAlreadyInLibrary.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::AddSeriesAlreadyInLibrary.into());
}
#[test]
@@ -1117,7 +1111,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
}
@@ -1200,12 +1194,12 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::AddSeries(expected_add_series_body))
);
assert!(app.data.sonarr_data.add_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.add_series_modal);
}
#[rstest]
@@ -1233,7 +1227,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), selected_block.into());
assert_navigation_pushed!(app, selected_block.into());
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
if selected_block == ActiveSonarrBlock::AddSeriesTagsInput {
@@ -1260,10 +1254,7 @@ mod tests {
AddSeriesHandler::new(SUBMIT_KEY, &mut app, active_sonarr_block, None).handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesPrompt.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::AddSeriesPrompt.into());
if active_sonarr_block == ActiveSonarrBlock::AddSeriesTagsInput {
assert!(!app.ignore_special_keys_for_textbox_input);
@@ -1332,9 +1323,10 @@ mod tests {
use crate::models::servarr_data::sonarr::modals::AddSeriesModal;
use crate::models::servarr_data::sonarr::sonarr_data::sonarr_test_utils::utils::create_test_sonarr_data;
use crate::models::stateful_table::StatefulTable;
use crate::simple_stateful_iterable_vec;
use crate::{assert_navigation_popped, simple_stateful_iterable_vec};
use super::*;
use crate::assert_navigation_pushed;
const ESC_KEY: Key = DEFAULT_KEYBINDINGS.esc.key;
@@ -1356,7 +1348,7 @@ mod tests {
.handle();
assert!(!app.ignore_special_keys_for_textbox_input);
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(app.data.sonarr_data.add_series_search, None);
}
@@ -1378,10 +1370,7 @@ mod tests {
.handle();
assert!(!app.ignore_special_keys_for_textbox_input);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesPrompt.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::AddSeriesPrompt.into());
}
#[rstest]
@@ -1405,11 +1394,8 @@ mod tests {
AddSeriesHandler::new(ESC_KEY, &mut app, active_sonarr_block, None).handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesSearchInput.into()
);
assert!(app.data.sonarr_data.add_searched_series.is_none());
assert_navigation_popped!(app, ActiveSonarrBlock::AddSeriesSearchInput.into());
assert_modal_absent!(app.data.sonarr_data.add_searched_series);
assert!(app.ignore_special_keys_for_textbox_input);
}
@@ -1429,10 +1415,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesSearchResults.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::AddSeriesSearchResults.into());
}
#[test]
@@ -1447,11 +1430,8 @@ mod tests {
AddSeriesHandler::new(ESC_KEY, &mut app, ActiveSonarrBlock::AddSeriesPrompt, None).handle();
assert!(!app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesSearchResults.into()
);
assert!(app.data.sonarr_data.add_series_modal.is_none());
assert_navigation_popped!(app, ActiveSonarrBlock::AddSeriesSearchResults.into());
assert_modal_absent!(app.data.sonarr_data.add_series_modal);
}
#[test]
@@ -1472,10 +1452,7 @@ mod tests {
.handle();
assert!(!app.ignore_special_keys_for_textbox_input);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesPrompt.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::AddSeriesPrompt.into());
}
#[rstest]
@@ -1496,16 +1473,14 @@ mod tests {
AddSeriesHandler::new(ESC_KEY, &mut app, active_sonarr_block, None).handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesPrompt.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::AddSeriesPrompt.into());
}
}
mod test_handle_key_char {
use super::*;
use crate::{
assert_navigation_popped,
models::{
BlockSelectionState,
servarr_data::sonarr::{modals::AddSeriesModal, sonarr_data::ADD_SERIES_SELECTION_BLOCKS},
@@ -1701,12 +1676,12 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::AddSeries(expected_add_series_body))
);
assert!(app.data.sonarr_data.add_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.add_series_modal);
}
}
@@ -1824,7 +1799,7 @@ mod tests {
.build_add_series_body();
assert_eq!(add_series_body, expected_add_series_body);
assert!(app.data.sonarr_data.add_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.add_series_modal);
}
#[test]
@@ -6,6 +6,7 @@ mod tests {
use crate::app::App;
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::assert_navigation_pushed;
use crate::event::Key;
use crate::handlers::KeyEventHandler;
use crate::handlers::sonarr_handlers::library::delete_series_handler::DeleteSeriesHandler;
@@ -91,6 +92,7 @@ mod tests {
use crate::network::sonarr_network::SonarrEvent;
use super::*;
use crate::{assert_navigation_popped, assert_navigation_pushed};
const SUBMIT_KEY: Key = DEFAULT_KEYBINDINGS.submit.key;
@@ -117,7 +119,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
assert!(!app.data.sonarr_data.prompt_confirm);
assert!(!app.data.sonarr_data.delete_series_files);
@@ -154,7 +156,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::DeleteSeries(expected_delete_series_params))
@@ -228,6 +230,7 @@ mod tests {
mod test_handle_esc {
use super::*;
use crate::{assert_navigation_popped, assert_navigation_pushed};
use pretty_assertions::assert_eq;
use rstest::rstest;
@@ -251,7 +254,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert!(!app.data.sonarr_data.prompt_confirm);
assert!(!app.data.sonarr_data.delete_series_files);
assert!(!app.data.sonarr_data.add_list_exclusion);
@@ -260,6 +263,7 @@ mod tests {
mod test_handle_key_char {
use crate::{
assert_navigation_popped,
models::{
BlockSelectionState, servarr_data::sonarr::sonarr_data::DELETE_SERIES_SELECTION_BLOCKS,
},
@@ -298,7 +302,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::DeleteSeries(expected_delete_series_params))
@@ -7,6 +7,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::event::Key;
use crate::handlers::KeyEventHandler;
use crate::handlers::sonarr_handlers::library::edit_series_handler::EditSeriesHandler;
@@ -25,7 +27,7 @@ mod tests {
use crate::models::servarr_data::sonarr::sonarr_data::EDIT_SERIES_SELECTION_BLOCKS;
use super::*;
#[rstest]
fn test_edit_series_select_series_type_scroll(
#[values(DEFAULT_KEYBINDINGS.up.key, DEFAULT_KEYBINDINGS.down.key)] key: Key,
@@ -663,13 +665,13 @@ mod tests {
}
mod test_handle_submit {
use pretty_assertions::assert_eq;
use rstest::rstest;
use crate::assert_navigation_popped;
use crate::models::servarr_data::sonarr::modals::EditSeriesModal;
use crate::models::servarr_data::sonarr::sonarr_data::EDIT_SERIES_SELECTION_BLOCKS;
use crate::models::{BlockSelectionState, Route};
use crate::network::sonarr_network::SonarrEvent;
use pretty_assertions::assert_eq;
use rstest::rstest;
use super::*;
@@ -707,10 +709,7 @@ mod tests {
.text
.is_empty()
);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EditSeriesPrompt.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::EditSeriesPrompt.into());
}
#[test]
@@ -745,10 +744,7 @@ mod tests {
.text
.is_empty()
);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EditSeriesPrompt.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::EditSeriesPrompt.into());
}
#[test]
@@ -772,7 +768,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
}
@@ -834,12 +830,12 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::EditSeries(expected_edit_series_params))
);
assert!(app.data.sonarr_data.edit_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.edit_series_modal);
assert!(app.should_refresh);
}
@@ -1006,8 +1002,8 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
assert_navigation_pushed!(
app,
(selected_block, Some(ActiveSonarrBlock::Series)).into()
);
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
@@ -1082,10 +1078,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EditSeriesPrompt.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::EditSeriesPrompt.into());
if active_sonarr_block == ActiveSonarrBlock::EditSeriesPathInput
|| active_sonarr_block == ActiveSonarrBlock::EditSeriesTagsInput
@@ -1096,11 +1089,11 @@ mod tests {
}
mod test_handle_esc {
use pretty_assertions::assert_eq;
use rstest::rstest;
use crate::assert_navigation_popped;
use crate::models::servarr_data::sonarr::modals::EditSeriesModal;
use crate::models::servarr_data::sonarr::sonarr_data::sonarr_test_utils::utils::create_test_sonarr_data;
use pretty_assertions::assert_eq;
use rstest::rstest;
use super::*;
@@ -1124,10 +1117,7 @@ mod tests {
EditSeriesHandler::new(ESC_KEY, &mut app, active_sonarr_block, None).handle();
assert!(!app.ignore_special_keys_for_textbox_input);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EditSeriesPrompt.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::EditSeriesPrompt.into());
}
#[test]
@@ -1140,9 +1130,9 @@ mod tests {
EditSeriesHandler::new(ESC_KEY, &mut app, ActiveSonarrBlock::EditSeriesPrompt, None).handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert!(app.data.sonarr_data.edit_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.edit_series_modal);
assert!(!app.data.sonarr_data.prompt_confirm);
}
@@ -1164,13 +1154,14 @@ mod tests {
EditSeriesHandler::new(ESC_KEY, &mut app, active_sonarr_block, None).handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
}
}
mod test_handle_key_char {
use super::*;
use crate::{
assert_navigation_popped,
models::{
BlockSelectionState,
servarr_data::sonarr::{
@@ -1352,12 +1343,12 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::EditSeries(expected_edit_series_params))
);
assert!(app.data.sonarr_data.edit_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.edit_series_modal);
assert!(app.should_refresh);
}
}
@@ -1442,7 +1433,7 @@ mod tests {
.build_edit_series_params();
assert_eq!(edit_series_params, expected_edit_series_params);
assert!(app.data.sonarr_data.edit_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.edit_series_modal);
}
#[test]
@@ -2,6 +2,7 @@
mod tests {
use crate::app::App;
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::assert_navigation_pushed;
use crate::handlers::KeyEventHandler;
use crate::handlers::sonarr_handlers::library::episode_details_handler::EpisodeDetailsHandler;
use crate::handlers::sonarr_handlers::sonarr_handler_test_utils::utils::episode;
@@ -103,7 +104,7 @@ mod tests {
.episode_details_tabs
.get_active_route()
);
assert_eq!(app.get_current_route(), left_block.into());
assert_navigation_pushed!(app, left_block.into());
EpisodeDetailsHandler::new(DEFAULT_KEYBINDINGS.right.key, &mut app, left_block, None)
.handle();
@@ -122,12 +123,13 @@ mod tests {
.episode_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;
@@ -148,10 +150,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EpisodeHistoryDetails.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::EpisodeHistoryDetails.into());
}
#[test]
@@ -238,7 +237,7 @@ mod tests {
EpisodeDetailsHandler::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_pushed!(app, active_sonarr_block.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(expected_action)
@@ -262,10 +261,7 @@ mod tests {
.handle();
assert!(app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::ManualEpisodeSearch.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::ManualEpisodeSearch.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::DownloadRelease(SonarrReleaseDownloadBody {
@@ -293,10 +289,7 @@ mod tests {
EpisodeDetailsHandler::new(SUBMIT_KEY, &mut app, prompt_block, None).handle();
assert!(!app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EpisodeDetails.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::EpisodeDetails.into());
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
}
@@ -314,8 +307,8 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
assert_navigation_pushed!(
app,
ActiveSonarrBlock::ManualEpisodeSearchConfirmPrompt.into()
);
}
@@ -344,6 +337,7 @@ mod tests {
mod test_handle_esc {
use super::*;
use crate::assert_navigation_popped;
use crate::event::Key;
use pretty_assertions::assert_eq;
@@ -364,10 +358,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EpisodeHistory.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::EpisodeHistory.into());
}
#[rstest]
@@ -389,10 +380,7 @@ mod tests {
EpisodeDetailsHandler::new(ESC_KEY, &mut app, prompt_block, None).handle();
assert!(!app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::EpisodeDetails.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::EpisodeDetails.into());
}
#[rstest]
@@ -412,10 +400,7 @@ mod tests {
EpisodeDetailsHandler::new(ESC_KEY, &mut app, active_sonarr_block, None).handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeasonDetails.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::SeasonDetails.into());
assert!(
app
.data
@@ -431,6 +416,7 @@ mod tests {
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;
@@ -457,8 +443,8 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
assert_navigation_pushed!(
app,
ActiveSonarrBlock::AutomaticallySearchEpisodePrompt.into()
);
}
@@ -511,7 +497,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);
}
@@ -576,7 +562,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(SonarrEvent::TriggerAutomaticEpisodeSearch(1))
@@ -600,10 +586,7 @@ mod tests {
.handle();
assert!(app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::ManualEpisodeSearch.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::ManualEpisodeSearch.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::DownloadRelease(SonarrReleaseDownloadBody {
@@ -7,6 +7,9 @@ mod tests {
use crate::app::App;
use crate::app::key_binding::DEFAULT_KEYBINDINGS;
use crate::assert_modal_absent;
use crate::assert_modal_present;
use crate::assert_navigation_pushed;
use crate::event::Key;
use crate::handlers::KeyEventHandler;
use crate::handlers::sonarr_handlers::library::{LibraryHandler, series_sorting_options};
@@ -71,6 +74,7 @@ mod tests {
use rstest::rstest;
use super::*;
use crate::assert_navigation_pushed;
#[rstest]
fn test_series_tab_left(#[values(true, false)] is_ready: bool) {
@@ -90,7 +94,7 @@ mod tests {
app.data.sonarr_data.main_tabs.get_active_route(),
ActiveSonarrBlock::System.into()
);
assert_eq!(app.get_current_route(), ActiveSonarrBlock::System.into());
assert_navigation_pushed!(app, ActiveSonarrBlock::System.into());
}
#[rstest]
@@ -111,7 +115,7 @@ mod tests {
app.data.sonarr_data.main_tabs.get_active_route(),
ActiveSonarrBlock::Downloads.into()
);
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Downloads.into());
assert_navigation_pushed!(app, ActiveSonarrBlock::Downloads.into());
}
#[rstest]
@@ -144,9 +148,9 @@ mod tests {
}
mod test_handle_submit {
use pretty_assertions::assert_eq;
use crate::assert_navigation_popped;
use crate::network::sonarr_network::SonarrEvent;
use pretty_assertions::assert_eq;
use super::*;
@@ -163,10 +167,7 @@ mod tests {
LibraryHandler::new(SUBMIT_KEY, &mut app, ActiveSonarrBlock::Series, None).handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeriesDetails.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::SeriesDetails.into());
}
#[test]
@@ -210,7 +211,7 @@ mod tests {
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::UpdateAllSeries)
);
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
}
#[test]
@@ -234,7 +235,7 @@ mod tests {
assert!(!app.data.sonarr_data.prompt_confirm);
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
}
}
@@ -244,6 +245,7 @@ mod tests {
use crate::models::servarr_data::sonarr::sonarr_data::sonarr_test_utils::utils::create_test_sonarr_data;
use super::*;
use crate::{assert_navigation_popped, assert_navigation_pushed};
const ESC_KEY: Key = DEFAULT_KEYBINDINGS.esc.key;
@@ -262,7 +264,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert!(!app.data.sonarr_data.prompt_confirm);
}
@@ -277,7 +279,7 @@ mod tests {
LibraryHandler::new(ESC_KEY, &mut app, ActiveSonarrBlock::Series, None).handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
assert!(app.error.text.is_empty());
}
}
@@ -292,7 +294,7 @@ mod tests {
use crate::models::sonarr_models::SeriesType;
use crate::network::sonarr_network::SonarrEvent;
use crate::test_edit_series_key;
use crate::{assert_navigation_popped, test_edit_series_key};
use super::*;
@@ -313,12 +315,9 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::AddSeriesSearchInput.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::AddSeriesSearchInput.into());
assert!(app.ignore_special_keys_for_textbox_input);
assert!(app.data.sonarr_data.add_series_search.is_some());
assert_modal_present!(app.data.sonarr_data.add_series_search);
}
#[test]
@@ -342,7 +341,7 @@ mod tests {
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert!(!app.ignore_special_keys_for_textbox_input);
assert!(app.data.sonarr_data.add_series_search.is_none());
assert_modal_absent!(app.data.sonarr_data.add_series_search);
}
#[test]
@@ -374,7 +373,7 @@ mod tests {
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert!(app.data.sonarr_data.edit_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.edit_series_modal);
}
#[test]
@@ -418,7 +417,7 @@ mod tests {
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.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);
}
@@ -439,10 +438,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::UpdateAllSeriesPrompt.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::UpdateAllSeriesPrompt.into());
}
#[test]
@@ -485,7 +481,7 @@ mod tests {
)
.handle();
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_pushed!(app, ActiveSonarrBlock::Series.into());
assert!(app.should_refresh);
}
@@ -536,7 +532,7 @@ mod tests {
app.data.sonarr_data.prompt_confirm_action,
Some(SonarrEvent::UpdateAllSeries)
);
assert_eq!(app.get_current_route(), ActiveSonarrBlock::Series.into());
assert_navigation_popped!(app, ActiveSonarrBlock::Series.into());
}
}
@@ -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 {
@@ -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::event::Key;
use crate::handlers::KeyEventHandler;
use crate::handlers::sonarr_handlers::library::series_details_handler::SeriesDetailsHandler;
@@ -69,7 +71,7 @@ mod tests {
app.get_current_route(),
app.data.sonarr_data.series_info_tabs.get_active_route()
);
assert_eq!(app.get_current_route(), left_block.into());
assert_navigation_pushed!(app, left_block.into());
SeriesDetailsHandler::new(DEFAULT_KEYBINDINGS.right.key, &mut app, left_block, None).handle();
@@ -77,15 +79,15 @@ mod tests {
app.get_current_route(),
app.data.sonarr_data.series_info_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 pretty_assertions::assert_eq;
use crate::extended_stateful_iterable_vec;
use crate::network::sonarr_network::SonarrEvent;
use crate::{assert_navigation_popped, extended_stateful_iterable_vec};
use super::*;
@@ -103,10 +105,7 @@ mod tests {
SeriesDetailsHandler::new(SUBMIT_KEY, &mut app, ActiveSonarrBlock::SeriesDetails, None)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeasonDetails.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::SeasonDetails.into());
}
#[test]
@@ -145,10 +144,7 @@ mod tests {
SeriesDetailsHandler::new(SUBMIT_KEY, &mut app, ActiveSonarrBlock::SeriesHistory, None)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeriesHistoryDetails.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::SeriesHistoryDetails.into());
}
#[test]
@@ -200,10 +196,7 @@ mod tests {
SeriesDetailsHandler::new(SUBMIT_KEY, &mut app, prompt_block, None).handle();
assert!(app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeriesDetails.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::SeriesDetails.into());
assert_eq!(
app.data.sonarr_data.prompt_confirm_action,
Some(expected_action)
@@ -225,16 +218,14 @@ mod tests {
SeriesDetailsHandler::new(SUBMIT_KEY, &mut app, prompt_block, None).handle();
assert!(!app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeriesDetails.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::SeriesDetails.into());
assert_eq!(app.data.sonarr_data.prompt_confirm_action, None);
}
}
mod test_handle_esc {
use super::*;
use crate::assert_navigation_popped;
use crate::models::stateful_table::StatefulTable;
use pretty_assertions::assert_eq;
use ratatui::widgets::TableState;
@@ -255,10 +246,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeriesHistory.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::SeriesHistory.into());
}
#[rstest]
@@ -279,10 +267,7 @@ mod tests {
SeriesDetailsHandler::new(ESC_KEY, &mut app, prompt_block, None).handle();
assert!(!app.data.sonarr_data.prompt_confirm);
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::SeriesDetails.into()
);
assert_navigation_popped!(app, ActiveSonarrBlock::SeriesDetails.into());
}
#[test]
@@ -343,7 +328,7 @@ mod tests {
use crate::models::servarr_data::sonarr::sonarr_data::sonarr_test_utils::utils::create_test_sonarr_data;
use crate::models::sonarr_models::{Series, SeriesType};
use crate::network::sonarr_network::SonarrEvent;
use crate::test_edit_series_key;
use crate::{assert_navigation_popped, test_edit_series_key};
use pretty_assertions::{assert_eq, assert_str_eq};
use serde_json::Number;
use strum::IntoEnumIterator;
@@ -378,7 +363,7 @@ mod tests {
.handle();
assert_eq!(app.get_current_route(), active_sonarr_block.into());
assert!(app.data.sonarr_data.edit_series_modal.is_none());
assert_modal_absent!(app.data.sonarr_data.edit_series_modal);
}
#[test]
@@ -428,7 +413,7 @@ mod tests {
ActiveSonarrBlock::SeriesDetails.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);
}
@@ -451,8 +436,8 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
assert_navigation_pushed!(
app,
ActiveSonarrBlock::AutomaticallySearchSeriesPrompt.into()
);
}
@@ -496,10 +481,7 @@ mod tests {
)
.handle();
assert_eq!(
app.get_current_route(),
ActiveSonarrBlock::UpdateAndScanSeriesPrompt.into()
);
assert_navigation_pushed!(app, ActiveSonarrBlock::UpdateAndScanSeriesPrompt.into());
}
#[rstest]
@@ -542,7 +524,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);
}
@@ -598,7 +580,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)