diff --git a/src/commands/inhibit.rs b/src/commands/inhibit.rs index e7564ab..893e7af 100644 --- a/src/commands/inhibit.rs +++ b/src/commands/inhibit.rs @@ -2,27 +2,17 @@ use log::{error, info}; use std::process::Command; pub fn execute(command_args: &[String], why: &str, who: &str, daemon: bool) { - let mut args = vec![ - "--why".to_string(), - why.to_string(), - "--who".to_string(), - who.to_string(), - "--what".to_string(), - "sleep:idle".to_string(), - ]; + let args = build_args(command_args, why, who); if command_args.is_empty() { if !daemon { info!("No command provided. Inhibiting sleep indefinitely. Press Ctrl+C to stop."); } - args.push("sleep".to_string()); - args.push("infinity".to_string()); } else { info!( "Running command while inhibiting sleep: {}", command_args.join(" ") ); - args.extend(command_args.iter().cloned()); } if daemon { @@ -52,3 +42,64 @@ pub fn execute(command_args: &[String], why: &str, who: &str, daemon: bool) { } } } + +pub(crate) fn build_args(command_args: &[String], why: &str, who: &str) -> Vec { + let mut args = vec![ + "--why".to_string(), + why.to_string(), + "--who".to_string(), + who.to_string(), + "--what".to_string(), + "sleep:idle".to_string(), + ]; + + if command_args.is_empty() { + args.push("sleep".to_string()); + args.push("infinity".to_string()); + } else { + args.extend(command_args.iter().cloned()); + } + args +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_build_args_no_command() { + let args = build_args(&[], "testing", "lapctl"); + assert_eq!( + args, + vec![ + "--why", + "testing", + "--who", + "lapctl", + "--what", + "sleep:idle", + "sleep", + "infinity" + ] + ); + } + + #[test] + fn test_build_args_with_command() { + let command_args = vec!["ls".to_string(), "-l".to_string()]; + let args = build_args(&command_args, "testing", "lapctl"); + assert_eq!( + args, + vec![ + "--why", + "testing", + "--who", + "lapctl", + "--what", + "sleep:idle", + "ls", + "-l" + ] + ); + } +}