diff --git a/src/managers/action_managers.rs b/src/managers/action_managers.rs index 68d52b4..d92af04 100644 --- a/src/managers/action_managers.rs +++ b/src/managers/action_managers.rs @@ -151,3 +151,71 @@ impl ActionManager { return parsed; } } + +#[cfg(test)] +mod tests { + use crate::managers::action_managers::ActionManager; + + #[test] + fn minimum_action_and_args() { + let args: Vec = vec![ + "icarus-dm".to_string(), + "download".to_string(), + "-u".to_string(), + "jamborie".to_string(), + "-p".to_string(), + "somethingsecr3t!".to_string(), + "-h".to_string(), + "https://music-server.com".to_string(), + ]; + let arg_count = args.len() as i32; + let minimum_arg_count = 8; + assert!(arg_count >= minimum_arg_count); + + let mut act_mgr = ActionManager { + action: String::new(), + flags: Vec::new(), + params: args, + param_count: arg_count, + }; + act_mgr.initialize(); + let ica = act_mgr.retrieve_icarus_action(); + let action = &ica.action; + let flags = &ica.flags; + + assert!(action != ""); + assert!(flags.len() > 2); + assert!( + !(action != "download" + && action != "upload" + && action != "retrieve" + && action != "upload-meta") + ); + + let mut all_flags_found = false; + let mut found_count = 0; + let mut flags_already_read = Vec::new(); + + for flag in flags { + if flags_already_read.contains(&flag.flag) { + continue; + } + + if flag.flag == "-u" { + found_count += 1; + flags_already_read.push(flag.flag.clone()); + } else if flag.flag == "-p" { + found_count += 1; + flags_already_read.push(flag.flag.clone()); + } else if flag.flag == "-h" { + found_count += 1; + flags_already_read.push(flag.flag.clone()); + } + } + + all_flags_found = found_count == 3; + + assert_eq!(found_count, 3, "Three flags are required: -u, -p, -h"); + assert!(all_flags_found, "All flags have not been found"); + } +} diff --git a/src/models/song.rs b/src/models/song.rs index e5ab5c8..7568e45 100644 --- a/src/models/song.rs +++ b/src/models/song.rs @@ -5,7 +5,6 @@ use serde::{Deserialize, Serialize}; use crate::constants; - #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Song { #[serde(alias = "song_id")]