use crate::libs::mode::Mode;
use clap::Args;
use std::path::PathBuf;
#[derive(Args, Debug, Clone, Default)]
pub struct Generic {
#[arg(short = 'c', long, default_value = ".imap-tools.toml")]
pub config: Option<PathBuf>,
#[arg(short = 's', long)]
pub server: Option<String>,
#[arg(short = 'u', long)]
pub username: Option<String>,
#[arg(short = 'p', long)]
pub password: Option<String>,
#[arg(short = 'P', long)]
pub password_command: Option<String>,
#[arg(short = 'd', long)]
pub debug: bool,
#[cfg(any(feature = "rustls", feature = "openssl"))]
#[arg(short = 'm', long)]
pub mode: Option<Mode>,
#[cfg(not(any(feature = "rustls", feature = "openssl")))]
#[arg(short = 'm', long)]
pub mode: Option<Mode>,
#[arg(short = 'n', long)]
pub dry_run: bool,
}
#[cfg(test)]
mod tests {
use super::*;
use clap::Parser;
#[derive(Parser, Debug, Clone)]
struct Args {
#[clap(flatten)]
generic: Generic,
}
fn get_generic_from_args<I, T>(args: I) -> Generic
where
I: IntoIterator<Item = T>,
T: Into<std::ffi::OsString> + Clone,
{
Args::parse_from(args).generic
}
#[test]
fn default_config_path() {
let generic = get_generic_from_args(["test"]);
assert_eq!(generic.config, Some(PathBuf::from(".imap-tools.toml")));
}
#[test]
fn custom_config_path() {
let generic = get_generic_from_args(["test", "-c", "custom-config.toml"]);
assert_eq!(generic.config, Some(PathBuf::from("custom-config.toml")));
}
#[test]
fn server_option() {
let generic = get_generic_from_args(["test", "-s", "imap.example.com"]);
assert_eq!(generic.server, Some("imap.example.com".to_owned()));
}
#[test]
fn username_option() {
let generic = get_generic_from_args(["test", "-u", "user@example.com"]);
assert_eq!(generic.username, Some("user@example.com".to_owned()));
}
#[test]
fn password_option() {
let generic = get_generic_from_args(["test", "-p", "secret_password"]);
assert_eq!(generic.password, Some("secret_password".to_owned()));
}
#[test]
fn password_command_option() {
let generic = get_generic_from_args(["test", "-P", "echo secret_password"]);
assert_eq!(
generic.password_command,
Some("echo secret_password".to_owned())
);
}
#[test]
fn debug_flag() {
let generic = get_generic_from_args(["test", "-d"]);
assert!(generic.debug);
}
#[test]
fn dry_run_flag() {
let generic = get_generic_from_args(["test", "-n"]);
assert!(generic.dry_run);
}
#[test]
fn combined_options() {
let generic = get_generic_from_args([
"test",
"-c",
"custom-config.toml",
"-s",
"imap.example.com",
"-u",
"user@example.com",
"-p",
"secret_password",
"-P",
"echo secret_password",
"-d",
"-n",
]);
assert_eq!(generic.config, Some(PathBuf::from("custom-config.toml")));
assert_eq!(generic.server, Some("imap.example.com".to_owned()));
assert_eq!(generic.username, Some("user@example.com".to_owned()));
assert_eq!(generic.password, Some("secret_password".to_owned()));
assert_eq!(
generic.password_command,
Some("echo secret_password".to_owned())
);
assert!(generic.debug);
assert!(generic.dry_run);
}
}