use clap::Parser;
pub mod client;
pub mod commands;
pub mod config;
pub mod error;
pub mod output;
pub mod sanitize;
#[cfg(test)]
mod test_support;
#[derive(Parser)]
#[command(name = "aasm", version, about)]
pub struct Cli {
#[arg(long, global = true)]
pub context: Option<String>,
#[arg(long, global = true, value_enum, default_value_t = output::OutputFormat::Table)]
pub output: output::OutputFormat,
#[arg(long, global = true)]
pub api_url: Option<String>,
#[arg(long, global = true, env = "AASM_API_KEY")]
pub api_key: Option<String>,
#[command(subcommand)]
pub command: commands::Commands,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn api_key_resolves_from_env_when_flag_absent() {
let _guard = test_support::env_guard();
std::env::set_var("AASM_API_KEY", "env-secret");
let parsed = Cli::try_parse_from(["aasm", "version"]);
std::env::remove_var("AASM_API_KEY");
let cli = parsed.expect("parse must succeed");
assert_eq!(cli.api_key.as_deref(), Some("env-secret"));
}
#[test]
fn api_key_flag_takes_precedence_over_env() {
let _guard = test_support::env_guard();
std::env::set_var("AASM_API_KEY", "env-secret");
let parsed = Cli::try_parse_from(["aasm", "--api-key", "flag-secret", "version"]);
std::env::remove_var("AASM_API_KEY");
let cli = parsed.expect("parse must succeed");
assert_eq!(cli.api_key.as_deref(), Some("flag-secret"));
}
#[test]
fn api_key_none_when_neither_flag_nor_env_set() {
let _guard = test_support::env_guard();
std::env::remove_var("AASM_API_KEY");
let cli = Cli::try_parse_from(["aasm", "version"]).expect("parse must succeed");
assert!(cli.api_key.is_none());
}
}