From ee1bee22eb662d965ce9f4b482ab91f743a3f0f7 Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Mon, 8 Dec 2025 16:47:40 -0700 Subject: [PATCH] refactor: Improved test assertions in the app module --- Cargo.lock | 7 + Cargo.toml | 1 + src/app/app_tests.rs | 60 +- src/app/context_clues_tests.rs | 254 ++----- src/app/radarr/radarr_context_clues_tests.rs | 429 +++++------ src/app/sonarr/sonarr_context_clues_tests.rs | 742 +++++++++---------- src/main.rs | 4 + 7 files changed, 669 insertions(+), 828 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 52209fa..6982bea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -135,6 +135,12 @@ dependencies = [ "wait-timeout", ] +[[package]] +name = "assertables" +version = "9.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59051ec02907378a67b0ba1b8631121f5388c8dbbb3cec8c749d8f93c2c3c211" + [[package]] name = "async-trait" version = "0.1.89" @@ -1375,6 +1381,7 @@ version = "0.6.1" dependencies = [ "anyhow", "assert_cmd", + "assertables", "async-trait", "backtrace", "bimap", diff --git a/Cargo.toml b/Cargo.toml index 16b72b0..f076d6a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,6 +76,7 @@ pretty_assertions = "1.3.0" proptest = "1.6.0" rstest = "0.25.0" serial_test = "3.2.0" +assertables = "9.8.2" [dev-dependencies.cargo-husky] version = "1" diff --git a/src/app/app_tests.rs b/src/app/app_tests.rs index 96a8e52..636b5b9 100644 --- a/src/app/app_tests.rs +++ b/src/app/app_tests.rs @@ -69,9 +69,9 @@ mod tests { CancellationToken::new(), ); - assert!(app.navigation_stack.is_empty()); + assert_is_empty!(app.navigation_stack); assert_eq!(app.get_current_route(), ActiveSonarrBlock::default().into()); - assert!(app.network_tx.is_some()); + assert_some!(app.network_tx); assert!(!app.cancellation_token.is_cancelled()); assert!(app.is_first_render); assert_eq!(app.error, HorizontallyScrollableText::default()); @@ -91,8 +91,8 @@ mod tests { fn test_app_default() { let app = App::default(); - assert!(app.navigation_stack.is_empty()); - assert!(app.network_tx.is_none()); + assert_is_empty!(app.navigation_stack); + assert_none!(app.network_tx); assert!(!app.cancellation_token.is_cancelled()); assert!(app.is_first_render); assert_eq!(app.error, HorizontallyScrollableText::default()); @@ -326,23 +326,23 @@ mod tests { fn test_app_config_default() { let app_config = AppConfig::default(); - assert!(app_config.radarr.is_none()); - assert!(app_config.sonarr.is_none()); + assert_none!(app_config.radarr); + assert_none!(app_config.sonarr); } #[test] fn test_servarr_config_default() { let servarr_config = ServarrConfig::default(); - assert_eq!(servarr_config.name, None); - assert_eq!(servarr_config.host, Some("localhost".to_string())); - assert_eq!(servarr_config.port, None); - assert_eq!(servarr_config.uri, None); - assert_eq!(servarr_config.weight, None); - assert_eq!(servarr_config.api_token, Some(String::new())); - assert_eq!(servarr_config.api_token_file, None); - assert_eq!(servarr_config.ssl_cert_path, None); - assert_eq!(servarr_config.custom_headers, None); + assert_none!(servarr_config.name); + assert_some_eq_x!(&servarr_config.host, "localhost"); + assert_none!(servarr_config.port); + assert_none!(servarr_config.uri); + assert_none!(servarr_config.weight); + assert_some_eq_x!(&servarr_config.api_token, ""); + assert_none!(servarr_config.api_token_file); + assert_none!(servarr_config.ssl_cert_path); + assert_none!(servarr_config.custom_headers); } #[test] @@ -367,11 +367,11 @@ mod tests { assert!(custom.is_object()); let obj = custom.as_object().unwrap(); - assert_eq!(obj.get("x-api-key").unwrap(), "abc123"); - assert_eq!(obj.get("header-1").unwrap(), "test"); + assert_some_eq_x!(obj.get("x-api-key"), "abc123"); + assert_some_eq_x!(obj.get("header-1"), "test"); - assert!(obj.get("X-Api-Key").is_none()); - assert!(obj.get("HEADER-1").is_none()); + assert_none!(obj.get("X-Api-Key")); + assert_none!(obj.get("HEADER-1")); } #[test] @@ -392,7 +392,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.host, Some("localhost".to_string())); + assert_some_eq_x!(&config.host, "localhost"); unsafe { std::env::remove_var("TEST_VAR_DESERIALIZE_OPTION") }; } @@ -407,7 +407,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.host, Some("www.example.com".to_string())); + assert_some_eq_x!(&config.host, "www.example.com"); unsafe { std::env::remove_var("TEST_VAR_DESERIALIZE_OPTION_NO_OVERWRITE") }; } @@ -419,7 +419,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.port, None); + assert_none!(config.port); } #[test] @@ -440,7 +440,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.custom_headers, Some(expected_custom_headers)); + assert_some_eq_x!(&config.custom_headers, &expected_custom_headers); unsafe { std::env::remove_var("TEST_VAR_DESERIALIZE_HEADER_OPTION") }; } @@ -467,7 +467,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.custom_headers, Some(expected_custom_headers)); + assert_some_eq_x!(&config.custom_headers, &expected_custom_headers); unsafe { std::env::remove_var("TEST_VAR_DESERIALIZE_HEADER_OPTION_NO_OVERWRITE") }; } @@ -479,7 +479,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.custom_headers, None); + assert_none!(config.custom_headers); } #[test] @@ -493,7 +493,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.port, Some(1)); + assert_some_eq_x!(config.port, 1); unsafe { std::env::remove_var("TEST_VAR_DESERIALIZE_OPTION_U16") }; } @@ -508,7 +508,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.port, Some(1234)); + assert_some_eq_x!(config.port, 1234); unsafe { std::env::remove_var("TEST_VAR_DESERIALIZE_OPTION_U16_UNUSED") }; } @@ -520,9 +520,9 @@ mod tests { "#; let result: Result = serde_yaml::from_str(yaml_data); - assert!(result.is_err()); + let result = assert_err_as_result!(result); let err = result.unwrap_err().to_string(); - assert!(err.contains("invalid digit found in string")); + assert_contains!(err, "invalid digit found in string"); } #[test] @@ -533,7 +533,7 @@ mod tests { let config: ServarrConfig = serde_yaml::from_str(yaml_data).unwrap(); - assert_eq!(config.port, None); + assert_none!(config.port); } #[test] diff --git a/src/app/context_clues_tests.rs b/src/app/context_clues_tests.rs index e55b9f0..a39f6be 100644 --- a/src/app/context_clues_tests.rs +++ b/src/app/context_clues_tests.rs @@ -1,239 +1,105 @@ #[cfg(test)] mod test { - use pretty_assertions::{assert_eq, assert_str_eq}; + use crate::app::context_clues::{ + ContextClueProvider, ServarrContextClueProvider, BARE_POPUP_CONTEXT_CLUES, + BLOCKLIST_CONTEXT_CLUES, CONFIRMATION_PROMPT_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, + INDEXERS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, SERVARR_CONTEXT_CLUES, + SYSTEM_CONTEXT_CLUES, + }; + use crate::app::{key_binding::DEFAULT_KEYBINDINGS, App}; + use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock; + use crate::models::servarr_data::sonarr::sonarr_data::ActiveSonarrBlock; + use crate::models::servarr_data::ActiveKeybindingBlock; - use crate::app::context_clues::{ - BARE_POPUP_CONTEXT_CLUES, BLOCKLIST_CONTEXT_CLUES, CONFIRMATION_PROMPT_CONTEXT_CLUES, - ContextClueProvider, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, - ROOT_FOLDERS_CONTEXT_CLUES, SERVARR_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES, - ServarrContextClueProvider, - }; - use crate::app::{App, key_binding::DEFAULT_KEYBINDINGS}; - use crate::models::servarr_data::ActiveKeybindingBlock; - use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock; - use crate::models::servarr_data::sonarr::sonarr_data::ActiveSonarrBlock; - - #[test] + #[test] fn test_servarr_context_clues() { let mut servarr_context_clues_iter = SERVARR_CONTEXT_CLUES.iter(); - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.up); - assert_str_eq!(*description, "scroll up"); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.down); - assert_str_eq!(*description, "scroll down"); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.left); - assert_str_eq!(*description, "previous tab"); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.right); - assert_str_eq!(*description, "next tab"); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.pg_up); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.pg_up.desc); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.pg_down); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.pg_down.desc); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.next_servarr); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.next_servarr.desc); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.previous_servarr); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.previous_servarr.desc); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.quit); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.quit.desc); - - let (key_binding, description) = servarr_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.help); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.help.desc); - assert_eq!(servarr_context_clues_iter.next(), None); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.up, "scroll up")); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.down, "scroll down")); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.left, "previous tab")); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.right, "next tab")); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.pg_up, DEFAULT_KEYBINDINGS.pg_up.desc)); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.pg_down, DEFAULT_KEYBINDINGS.pg_down.desc)); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.next_servarr, DEFAULT_KEYBINDINGS.next_servarr.desc)); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.previous_servarr, DEFAULT_KEYBINDINGS.previous_servarr.desc)); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.quit, DEFAULT_KEYBINDINGS.quit.desc)); + assert_some_eq_x!(servarr_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.help, DEFAULT_KEYBINDINGS.help.desc)); + assert_none!(servarr_context_clues_iter.next()); } #[test] fn test_bare_popup_context_clues() { let mut bare_popup_context_clues_iter = BARE_POPUP_CONTEXT_CLUES.iter(); - let (key_binding, description) = bare_popup_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); - assert_eq!(bare_popup_context_clues_iter.next(), None); + assert_some_eq_x!(bare_popup_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc)); + assert_none!(bare_popup_context_clues_iter.next()); } #[test] fn test_downloads_context_clues() { let mut downloads_context_clues_iter = DOWNLOADS_CONTEXT_CLUES.iter(); - let (key_binding, description) = downloads_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = downloads_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc); - - let (key_binding, description) = downloads_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, "update downloads"); - assert_eq!(downloads_context_clues_iter.next(), None); + assert_some_eq_x!(downloads_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc)); + assert_some_eq_x!(downloads_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc)); + assert_some_eq_x!(downloads_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.update, "update downloads")); + assert_none!(downloads_context_clues_iter.next()); } #[test] fn test_blocklist_context_clues() { let mut blocklist_context_clues_iter = BLOCKLIST_CONTEXT_CLUES.iter(); - let (key_binding, description) = blocklist_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = blocklist_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc); - - let (key_binding, description) = blocklist_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = blocklist_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc); - - let (key_binding, description) = blocklist_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.clear); - assert_str_eq!(*description, "clear blocklist"); - assert_eq!(blocklist_context_clues_iter.next(), None); + assert_some_eq_x!(blocklist_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc)); + assert_some_eq_x!(blocklist_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc)); + assert_some_eq_x!(blocklist_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.submit, "details")); + assert_some_eq_x!(blocklist_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc)); + assert_some_eq_x!(blocklist_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.clear, "clear blocklist")); + assert_none!(blocklist_context_clues_iter.next()); } #[test] fn test_confirmation_prompt_context_clues() { let mut confirmation_prompt_context_clues_iter = CONFIRMATION_PROMPT_CONTEXT_CLUES.iter(); - let (key_binding, description) = confirmation_prompt_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.confirm); - assert_str_eq!(*description, "submit"); - - let (key_binding, description) = confirmation_prompt_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, "cancel"); - assert_eq!(confirmation_prompt_context_clues_iter.next(), None); + assert_some_eq_x!(confirmation_prompt_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.confirm, "submit")); + assert_some_eq_x!(confirmation_prompt_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.esc, "cancel")); + assert_none!(confirmation_prompt_context_clues_iter.next()); } #[test] fn test_root_folders_context_clues() { let mut root_folders_context_clues_iter = ROOT_FOLDERS_CONTEXT_CLUES.iter(); - let (key_binding, description) = root_folders_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.add); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.add.desc); - - let (key_binding, description) = root_folders_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc); - - let (key_binding, description) = root_folders_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - assert_eq!(root_folders_context_clues_iter.next(), None); + assert_some_eq_x!(root_folders_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc)); + assert_some_eq_x!(root_folders_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc)); + assert_some_eq_x!(root_folders_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc)); + assert_none!(root_folders_context_clues_iter.next()); } #[test] fn test_indexers_context_clues() { let mut indexers_context_clues_iter = INDEXERS_CONTEXT_CLUES.iter(); - let (key_binding, description) = indexers_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "edit indexer"); - - let (key_binding, description) = indexers_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.settings); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.settings.desc); - - let (key_binding, description) = indexers_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc); - - let (key_binding, description) = indexers_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.test); - assert_str_eq!(*description, "test indexer"); - - let (key_binding, description) = indexers_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.test_all); - assert_str_eq!(*description, "test all indexers"); - - let (key_binding, description) = indexers_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - assert_eq!(indexers_context_clues_iter.next(), None); + assert_some_eq_x!(indexers_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.submit, "edit indexer")); + assert_some_eq_x!(indexers_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.settings, DEFAULT_KEYBINDINGS.settings.desc)); + assert_some_eq_x!(indexers_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc)); + assert_some_eq_x!(indexers_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.test, "test indexer")); + assert_some_eq_x!(indexers_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.test_all, "test all indexers")); + assert_some_eq_x!(indexers_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc)); + assert_none!(indexers_context_clues_iter.next()); } #[test] fn test_system_context_clues() { let mut system_context_clues_iter = SYSTEM_CONTEXT_CLUES.iter(); - let (key_binding, description) = system_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.tasks); - assert_str_eq!(*description, "open tasks"); - - let (key_binding, description) = system_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.events); - assert_str_eq!(*description, "open events"); - - let (key_binding, description) = system_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.logs); - assert_str_eq!(*description, "open logs"); - - let (key_binding, description) = system_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, "open updates"); - - let (key_binding, description) = system_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - assert_eq!(system_context_clues_iter.next(), None); + assert_some_eq_x!(system_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.tasks, "open tasks")); + assert_some_eq_x!(system_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.events, "open events")); + assert_some_eq_x!(system_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.logs, "open logs")); + assert_some_eq_x!(system_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.update, "open updates")); + assert_some_eq_x!(system_context_clues_iter.next(), &(DEFAULT_KEYBINDINGS.refresh, DEFAULT_KEYBINDINGS.refresh.desc)); + assert_none!(system_context_clues_iter.next()); } #[test] @@ -243,10 +109,9 @@ mod test { let context_clues = ServarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!( + assert_some_eq_x!( + context_clues, &crate::app::radarr::radarr_context_clues::SYSTEM_TASKS_CONTEXT_CLUES, - context_clues.unwrap() ); } @@ -257,10 +122,9 @@ mod test { let context_clues = ServarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!( + assert_some_eq_x!( + context_clues, &crate::app::sonarr::sonarr_context_clues::SYSTEM_TASKS_CONTEXT_CLUES, - context_clues.unwrap() ); } @@ -271,6 +135,6 @@ mod test { let context_clues = ServarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_none()); + assert_none!(context_clues); } } diff --git a/src/app/radarr/radarr_context_clues_tests.rs b/src/app/radarr/radarr_context_clues_tests.rs index 3cc4769..f11656b 100644 --- a/src/app/radarr/radarr_context_clues_tests.rs +++ b/src/app/radarr/radarr_context_clues_tests.rs @@ -1,126 +1,118 @@ #[cfg(test)] mod tests { - use crate::app::App; - use crate::app::context_clues::{ - BARE_POPUP_CONTEXT_CLUES, BLOCKLIST_CONTEXT_CLUES, CONFIRMATION_PROMPT_CONTEXT_CLUES, - ContextClue, ContextClueProvider, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, - ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES, - }; - use crate::app::key_binding::DEFAULT_KEYBINDINGS; - use crate::app::radarr::radarr_context_clues::{ - ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES, COLLECTION_DETAILS_CONTEXT_CLUES, - COLLECTIONS_CONTEXT_CLUES, LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, - MOVIE_DETAILS_CONTEXT_CLUES, RadarrContextClueProvider, SYSTEM_TASKS_CONTEXT_CLUES, - }; - use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, RadarrData}; - use crate::models::servarr_data::sonarr::sonarr_data::ActiveSonarrBlock; - use pretty_assertions::{assert_eq, assert_str_eq}; - use rstest::rstest; + use crate::app::context_clues::{ + ContextClue, ContextClueProvider, BARE_POPUP_CONTEXT_CLUES, BLOCKLIST_CONTEXT_CLUES, + CONFIRMATION_PROMPT_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, + ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES, + }; + use crate::app::key_binding::DEFAULT_KEYBINDINGS; + use crate::app::radarr::radarr_context_clues::{ + RadarrContextClueProvider, ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES, COLLECTIONS_CONTEXT_CLUES, + COLLECTION_DETAILS_CONTEXT_CLUES, LIBRARY_CONTEXT_CLUES, MANUAL_MOVIE_SEARCH_CONTEXT_CLUES, + MOVIE_DETAILS_CONTEXT_CLUES, SYSTEM_TASKS_CONTEXT_CLUES, + }; + use crate::app::App; + use crate::models::servarr_data::radarr::radarr_data::{ActiveRadarrBlock, RadarrData}; + use crate::models::servarr_data::sonarr::sonarr_data::ActiveSonarrBlock; + use pretty_assertions::assert_eq; + use rstest::rstest; - #[test] + #[test] fn test_library_context_clues() { let mut library_context_clues_iter = LIBRARY_CONTEXT_CLUES.iter(); - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.add); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.add.desc); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.toggle_monitoring); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.toggle_monitoring.desc); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.search.desc); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.filter); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.filter.desc); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, "update all"); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = library_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, "cancel filter"); - assert_eq!(library_context_clues_iter.next(), None); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc) + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc) + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.toggle_monitoring, + DEFAULT_KEYBINDINGS.toggle_monitoring.desc + ) + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc) + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc) + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc) + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.update, "update all") + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + library_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, "cancel filter") + ); + assert_none!(library_context_clues_iter.next()); } #[test] fn test_collections_context_clues() { let mut collections_context_clues = COLLECTIONS_CONTEXT_CLUES.iter(); - let (key_binding, description) = collections_context_clues.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.search.desc); - - let (key_binding, description) = collections_context_clues.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc); - - let (key_binding, description) = collections_context_clues.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc); - - let (key_binding, description) = collections_context_clues.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.filter); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.filter.desc); - - let (key_binding, description) = collections_context_clues.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = collections_context_clues.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, "update all"); - - let (key_binding, description) = collections_context_clues.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = collections_context_clues.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, "cancel filter"); + assert_some_eq_x!( + collections_context_clues.next(), + &(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc) + ); + assert_some_eq_x!( + collections_context_clues.next(), + &(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc) + ); + assert_some_eq_x!( + collections_context_clues.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + collections_context_clues.next(), + &(DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc) + ); + assert_some_eq_x!( + collections_context_clues.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + collections_context_clues.next(), + &(DEFAULT_KEYBINDINGS.update, "update all") + ); + assert_some_eq_x!( + collections_context_clues.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + collections_context_clues.next(), + &(DEFAULT_KEYBINDINGS.esc, "cancel filter") + ); assert_eq!(collections_context_clues.next(), None); } @@ -128,30 +120,32 @@ mod tests { fn test_movie_details_context_clues() { let mut movie_details_context_clues_iter = MOVIE_DETAILS_CONTEXT_CLUES.iter(); - let (key_binding, description) = movie_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = movie_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.update.desc); - - let (key_binding, description) = movie_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc); - - let (key_binding, description) = movie_details_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) = movie_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); + assert_some_eq_x!( + movie_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + movie_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.update, DEFAULT_KEYBINDINGS.update.desc) + ); + assert_some_eq_x!( + movie_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc) + ); + assert_some_eq_x!( + movie_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + movie_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); assert_eq!(movie_details_context_clues_iter.next(), None); } @@ -159,41 +153,40 @@ mod tests { fn test_manual_movie_search_context_clues() { let mut manual_movie_search_context_clues_iter = MANUAL_MOVIE_SEARCH_CONTEXT_CLUES.iter(); - let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.update.desc); - - let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc); - - let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc); - - let (key_binding, description) = manual_movie_search_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) = manual_movie_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = manual_movie_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); - + assert_some_eq_x!( + manual_movie_search_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + manual_movie_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.update, DEFAULT_KEYBINDINGS.update.desc) + ); + assert_some_eq_x!( + manual_movie_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc) + ); + assert_some_eq_x!( + manual_movie_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + manual_movie_search_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + manual_movie_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + manual_movie_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); assert_eq!(manual_movie_search_context_clues_iter.next(), None); } @@ -202,15 +195,14 @@ mod tests { let mut add_movie_search_results_context_clues_iter = ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES.iter(); - let (key_binding, description) = add_movie_search_results_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = add_movie_search_results_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, "edit search"); + assert_some_eq_x!( + add_movie_search_results_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + add_movie_search_results_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, "edit search") + ); assert_eq!(add_movie_search_results_context_clues_iter.next(), None); } @@ -218,15 +210,14 @@ mod tests { fn test_system_tasks_context_clues() { let mut system_tasks_context_clues_iter = SYSTEM_TASKS_CONTEXT_CLUES.iter(); - let (key_binding, description) = system_tasks_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "start task"); - - let (key_binding, description) = system_tasks_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); + assert_some_eq_x!( + system_tasks_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "start task") + ); + assert_some_eq_x!( + system_tasks_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); assert_eq!(system_tasks_context_clues_iter.next(), None); } @@ -234,20 +225,18 @@ mod tests { fn test_collection_details_context_clues() { let mut collection_details_context_clues_iter = COLLECTION_DETAILS_CONTEXT_CLUES.iter(); - let (key_binding, description) = collection_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "show overview/add movie"); - - let (key_binding, description) = collection_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit); - assert_str_eq!(*description, "edit collection"); - - let (key_binding, description) = collection_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); + assert_some_eq_x!( + collection_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "show overview/add movie") + ); + assert_some_eq_x!( + collection_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.edit, "edit collection") + ); + assert_some_eq_x!( + collection_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); assert_eq!(collection_details_context_clues_iter.next(), None); } @@ -283,8 +272,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(&BARE_POPUP_CONTEXT_CLUES, context_clues.unwrap()); + assert_some_eq_x!(context_clues, &BARE_POPUP_CONTEXT_CLUES); } #[rstest] @@ -306,8 +294,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(expected_context_clues, context_clues.unwrap()); + assert_some_eq_x!(context_clues, expected_context_clues); } #[rstest] @@ -329,8 +316,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(&CONFIRMATION_PROMPT_CONTEXT_CLUES, context_clues.unwrap()); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -352,8 +338,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(&CONFIRMATION_PROMPT_CONTEXT_CLUES, context_clues.unwrap()); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -379,8 +364,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(&CONFIRMATION_PROMPT_CONTEXT_CLUES, context_clues.unwrap()); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -405,8 +389,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(&CONFIRMATION_PROMPT_CONTEXT_CLUES, context_clues.unwrap()); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -428,8 +411,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(&CONFIRMATION_PROMPT_CONTEXT_CLUES, context_clues.unwrap()); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -446,11 +428,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!( - &ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES, - context_clues.unwrap() - ); + assert_some_eq_x!(context_clues, &ADD_MOVIE_SEARCH_RESULTS_CONTEXT_CLUES); } #[test] @@ -461,8 +439,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(&COLLECTION_DETAILS_CONTEXT_CLUES, context_clues.unwrap()); + assert_some_eq_x!(context_clues, &COLLECTION_DETAILS_CONTEXT_CLUES); } #[test] @@ -474,8 +451,7 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(&SYSTEM_TASKS_CONTEXT_CLUES, context_clues.unwrap()); + assert_some_eq_x!(context_clues, &SYSTEM_TASKS_CONTEXT_CLUES); } #[rstest] @@ -498,7 +474,6 @@ mod tests { let context_clues = RadarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(expected_context_clues, context_clues.unwrap()); + assert_some_eq_x!(context_clues, expected_context_clues); } } diff --git a/src/app/sonarr/sonarr_context_clues_tests.rs b/src/app/sonarr/sonarr_context_clues_tests.rs index 2dac148..1c7b89b 100644 --- a/src/app/sonarr/sonarr_context_clues_tests.rs +++ b/src/app/sonarr/sonarr_context_clues_tests.rs @@ -1,15 +1,14 @@ #[cfg(test)] mod tests { use crate::app::context_clues::{ - BARE_POPUP_CONTEXT_CLUES, BLOCKLIST_CONTEXT_CLUES, CONFIRMATION_PROMPT_CONTEXT_CLUES, - ContextClue, ContextClueProvider, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, + ContextClue, ContextClueProvider, BARE_POPUP_CONTEXT_CLUES, BLOCKLIST_CONTEXT_CLUES, + CONFIRMATION_PROMPT_CONTEXT_CLUES, DOWNLOADS_CONTEXT_CLUES, INDEXERS_CONTEXT_CLUES, ROOT_FOLDERS_CONTEXT_CLUES, SYSTEM_CONTEXT_CLUES, }; use crate::app::sonarr::sonarr_context_clues::{ - SELECTABLE_EPISODE_DETAILS_CONTEXT_CLUES, SonarrContextClueProvider, + SonarrContextClueProvider, SELECTABLE_EPISODE_DETAILS_CONTEXT_CLUES, }; use crate::app::{ - App, key_binding::DEFAULT_KEYBINDINGS, sonarr::sonarr_context_clues::{ ADD_SERIES_SEARCH_RESULTS_CONTEXT_CLUES, EPISODE_DETAILS_CONTEXT_CLUES, @@ -18,11 +17,11 @@ mod tests { SEASON_HISTORY_CONTEXT_CLUES, SERIES_CONTEXT_CLUES, SERIES_DETAILS_CONTEXT_CLUES, SERIES_HISTORY_CONTEXT_CLUES, SYSTEM_TASKS_CONTEXT_CLUES, }, + App, }; use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock; use crate::models::servarr_data::sonarr::modals::{EpisodeDetailsModal, SeasonDetailsModal}; use crate::models::servarr_data::sonarr::sonarr_data::{ActiveSonarrBlock, SonarrData}; - use pretty_assertions::{assert_eq, assert_str_eq}; use rstest::rstest; #[test] @@ -30,417 +29,422 @@ mod tests { let mut add_series_search_results_context_clues_iter = ADD_SERIES_SEARCH_RESULTS_CONTEXT_CLUES.iter(); - let (key_binding, description) = add_series_search_results_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = add_series_search_results_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, "edit search"); - assert_eq!(add_series_search_results_context_clues_iter.next(), None); + assert_some_eq_x!( + add_series_search_results_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + add_series_search_results_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, "edit search") + ); + assert_none!(add_series_search_results_context_clues_iter.next()); } #[test] fn test_series_context_clues() { let mut series_context_clues_iter = SERIES_CONTEXT_CLUES.iter(); - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.add); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.add.desc); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.toggle_monitoring); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.toggle_monitoring.desc); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.delete); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.delete.desc); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.search.desc); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.filter); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.filter.desc); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, "update all"); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = series_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, "cancel filter"); - assert_eq!(series_context_clues_iter.next(), None); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.add, DEFAULT_KEYBINDINGS.add.desc) + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc) + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.toggle_monitoring, + DEFAULT_KEYBINDINGS.toggle_monitoring.desc + ) + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.delete, DEFAULT_KEYBINDINGS.delete.desc) + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc) + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc) + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.update, "update all") + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + series_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, "cancel filter") + ); + assert_none!(series_context_clues_iter.next()); } #[test] fn test_series_history_context_clues() { let mut series_history_context_clues_iter = SERIES_HISTORY_CONTEXT_CLUES.iter(); - let (key_binding, description) = series_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) = series_history_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc); - - let (key_binding, description) = series_history_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = series_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) = series_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) = series_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) = series_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) = series_history_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.update.desc); - - let (key_binding, description) = series_history_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, "cancel filter/close"); - assert_eq!(series_history_context_clues_iter.next(), None); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc) + ); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc) + ); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc) + ); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.update, DEFAULT_KEYBINDINGS.update.desc) + ); + assert_some_eq_x!( + series_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, "cancel filter/close") + ); + assert_none!(series_history_context_clues_iter.next()); } #[test] fn test_history_context_clues() { let mut history_context_clues_iter = HISTORY_CONTEXT_CLUES.iter(); - let (key_binding, description) = history_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = 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) = 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) = 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) = 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) = history_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, "cancel filter"); - assert_eq!(history_context_clues_iter.next(), None); + assert_some_eq_x!( + history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc) + ); + assert_some_eq_x!( + history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc) + ); + assert_some_eq_x!( + history_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, "cancel filter") + ); + assert_none!(history_context_clues_iter.next()); } #[test] fn test_series_details_context_clues() { let mut series_details_context_clues_iter = SERIES_DETAILS_CONTEXT_CLUES.iter(); - let (key_binding, description) = series_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = series_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.edit); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.edit.desc); - - let (key_binding, description) = series_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.toggle_monitoring); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.toggle_monitoring.desc); - - let (key_binding, description) = series_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "season details"); - - let (key_binding, description) = series_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.search); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.search.desc); - - let (key_binding, description) = series_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.update); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.update.desc); - - let (key_binding, description) = series_details_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) = series_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); - assert_eq!(series_details_context_clues_iter.next(), None); + assert_some_eq_x!( + series_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + series_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.edit, DEFAULT_KEYBINDINGS.edit.desc) + ); + assert_some_eq_x!( + series_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.toggle_monitoring, + DEFAULT_KEYBINDINGS.toggle_monitoring.desc + ) + ); + assert_some_eq_x!( + series_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "season details") + ); + assert_some_eq_x!( + series_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc) + ); + assert_some_eq_x!( + series_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.update, DEFAULT_KEYBINDINGS.update.desc) + ); + assert_some_eq_x!( + series_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + series_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); + assert_none!(series_details_context_clues_iter.next()); } #[test] fn test_season_details_context_clues() { let mut season_details_context_clues_iter = SEASON_DETAILS_CONTEXT_CLUES.iter(); - let (key_binding, description) = season_details_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_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.toggle_monitoring); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.toggle_monitoring.desc); - - let (key_binding, description) = season_details_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_details_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_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); - - let (key_binding, description) = season_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "episode details"); - - 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!(season_details_context_clues_iter.next(), None); + assert_some_eq_x!( + season_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + season_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.toggle_monitoring, + DEFAULT_KEYBINDINGS.toggle_monitoring.desc + ) + ); + assert_some_eq_x!( + season_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc) + ); + assert_some_eq_x!( + season_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + season_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); + assert_some_eq_x!( + season_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "episode details") + ); + assert_some_eq_x!( + season_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.delete, "delete episode") + ); + assert_none!(season_details_context_clues_iter.next()); } #[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.submit); - assert_str_eq!(*description, "details"); - - 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); + assert_some_eq_x!( + season_history_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + season_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + season_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.search, DEFAULT_KEYBINDINGS.search.desc) + ); + assert_some_eq_x!( + season_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.filter, DEFAULT_KEYBINDINGS.filter.desc) + ); + assert_some_eq_x!( + season_history_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + season_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + season_history_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, "cancel filter/close") + ); + assert_none!(season_history_context_clues_iter.next()); } #[test] fn test_manual_season_search_context_clues() { let mut manual_season_search_context_clues_iter = MANUAL_SEASON_SEARCH_CONTEXT_CLUES.iter(); - let (key_binding, description) = manual_season_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = manual_season_search_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) = manual_season_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc); - - 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); + assert_some_eq_x!( + manual_season_search_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + manual_season_search_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + manual_season_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + manual_season_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + manual_season_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); + assert_none!(manual_season_search_context_clues_iter.next()); } #[test] fn test_manual_episode_search_context_clues() { let mut manual_episode_search_context_clues_iter = MANUAL_EPISODE_SEARCH_CONTEXT_CLUES.iter(); - let (key_binding, description) = manual_episode_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = manual_episode_search_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) = manual_episode_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.sort); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.sort.desc); - - let (key_binding, description) = manual_episode_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = manual_episode_search_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); - assert_eq!(manual_episode_search_context_clues_iter.next(), None); + assert_some_eq_x!( + manual_episode_search_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + manual_episode_search_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + manual_episode_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.sort, DEFAULT_KEYBINDINGS.sort.desc) + ); + assert_some_eq_x!( + manual_episode_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + manual_episode_search_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); + assert_none!(manual_episode_search_context_clues_iter.next()); } #[test] fn test_episode_details_context_clues() { let mut episode_details_context_clues_iter = EPISODE_DETAILS_CONTEXT_CLUES.iter(); - let (key_binding, description) = episode_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = episode_details_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) = episode_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); - assert_eq!(episode_details_context_clues_iter.next(), None); + assert_some_eq_x!( + episode_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + episode_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + episode_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); + assert_none!(episode_details_context_clues_iter.next()); } #[test] fn test_selectable_episode_details_context_clues() { let mut episode_details_context_clues_iter = SELECTABLE_EPISODE_DETAILS_CONTEXT_CLUES.iter(); - let (key_binding, description) = episode_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.refresh); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.refresh.desc); - - let (key_binding, description) = episode_details_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) = episode_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "details"); - - let (key_binding, description) = episode_details_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); - assert_eq!(episode_details_context_clues_iter.next(), None); + assert_some_eq_x!( + episode_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.refresh, + DEFAULT_KEYBINDINGS.refresh.desc + ) + ); + assert_some_eq_x!( + episode_details_context_clues_iter.next(), + &( + DEFAULT_KEYBINDINGS.auto_search, + DEFAULT_KEYBINDINGS.auto_search.desc + ) + ); + assert_some_eq_x!( + episode_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "details") + ); + assert_some_eq_x!( + episode_details_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); + assert_none!(episode_details_context_clues_iter.next()); } #[test] fn test_system_tasks_context_clues() { let mut system_tasks_context_clues_iter = SYSTEM_TASKS_CONTEXT_CLUES.iter(); - let (key_binding, description) = system_tasks_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.submit); - assert_str_eq!(*description, "start task"); - - let (key_binding, description) = system_tasks_context_clues_iter.next().unwrap(); - - assert_eq!(*key_binding, DEFAULT_KEYBINDINGS.esc); - assert_str_eq!(*description, DEFAULT_KEYBINDINGS.esc.desc); - assert_eq!(system_tasks_context_clues_iter.next(), None); + assert_some_eq_x!( + system_tasks_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.submit, "start task") + ); + assert_some_eq_x!( + system_tasks_context_clues_iter.next(), + &(DEFAULT_KEYBINDINGS.esc, DEFAULT_KEYBINDINGS.esc.desc) + ); + assert_none!(system_tasks_context_clues_iter.next()); } #[test] @@ -470,8 +474,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(expected_context_clues, context_clues.unwrap()); + assert_some_eq_x!(context_clues, expected_context_clues); } #[rstest] @@ -495,8 +498,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(expected_context_clues, context_clues.unwrap()); + assert_some_eq_x!(context_clues, expected_context_clues); } #[rstest] @@ -524,8 +526,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(expected_context_clues, context_clues.unwrap()); + assert_some_eq_x!(context_clues, expected_context_clues); } #[rstest] @@ -544,8 +545,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(context_clues.unwrap(), &BARE_POPUP_CONTEXT_CLUES); + assert_some_eq_x!(context_clues, &BARE_POPUP_CONTEXT_CLUES); } #[rstest] @@ -567,8 +567,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(context_clues.unwrap(), &CONFIRMATION_PROMPT_CONTEXT_CLUES); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -593,8 +592,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(context_clues.unwrap(), &CONFIRMATION_PROMPT_CONTEXT_CLUES); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -614,8 +612,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(context_clues.unwrap(), &CONFIRMATION_PROMPT_CONTEXT_CLUES); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -638,8 +635,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(context_clues.unwrap(), &CONFIRMATION_PROMPT_CONTEXT_CLUES); + assert_some_eq_x!(context_clues, &CONFIRMATION_PROMPT_CONTEXT_CLUES); } #[rstest] @@ -655,11 +651,7 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!( - context_clues.unwrap(), - &ADD_SERIES_SEARCH_RESULTS_CONTEXT_CLUES - ); + assert_some_eq_x!(context_clues, &ADD_SERIES_SEARCH_RESULTS_CONTEXT_CLUES); } #[test] @@ -669,8 +661,7 @@ mod tests { app.push_navigation_stack(ActiveSonarrBlock::SystemTasks.into()); let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(context_clues.unwrap(), &SYSTEM_TASKS_CONTEXT_CLUES); + assert_some_eq_x!(context_clues, &SYSTEM_TASKS_CONTEXT_CLUES); } #[rstest] @@ -693,7 +684,6 @@ mod tests { let context_clues = SonarrContextClueProvider::get_context_clues(&mut app); - assert!(context_clues.is_some()); - assert_eq!(expected_context_clues, context_clues.unwrap()); + assert_some_eq_x!(context_clues, expected_context_clues); } } diff --git a/src/main.rs b/src/main.rs index 848b49a..02c8083 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,7 @@ +#[cfg(test)] +#[macro_use] +extern crate assertables; + use anyhow::Result; use clap::{CommandFactory, Parser, crate_authors, crate_description, crate_name, crate_version}; use clap_complete::generate;