use crate::brain::rsi_subsystem::classify_bash_command;
#[test]
fn empty_command_returns_none() {
assert_eq!(classify_bash_command(""), None);
assert_eq!(classify_bash_command(" "), None);
}
#[test]
fn unknown_command_returns_none() {
assert_eq!(classify_bash_command("./my-custom-script.sh"), None);
assert_eq!(classify_bash_command("totally-unknown-cli arg"), None);
}
#[test]
fn classifies_git_commands() {
assert_eq!(classify_bash_command("git status"), Some("git"));
assert_eq!(classify_bash_command("git log --oneline -10"), Some("git"));
assert_eq!(classify_bash_command("git push origin main"), Some("git"));
}
#[test]
fn classifies_gh_commands_separately_from_git() {
assert_eq!(
classify_bash_command("gh issue list --repo foo/bar"),
Some("gh")
);
assert_eq!(
classify_bash_command("gh pr comment 123 --body x"),
Some("gh")
);
}
#[test]
fn classifies_legacy_hub_as_gh() {
assert_eq!(classify_bash_command("hub pull-request"), Some("gh"));
}
#[test]
fn classifies_docker_variants() {
assert_eq!(classify_bash_command("docker ps"), Some("docker"));
assert_eq!(
classify_bash_command("docker-compose up -d"),
Some("docker")
);
}
#[test]
fn classifies_kubectl() {
assert_eq!(classify_bash_command("kubectl get pods"), Some("kubectl"));
assert_eq!(classify_bash_command("k9s"), Some("kubectl"));
}
#[test]
fn classifies_terraform_and_tofu_together() {
assert_eq!(classify_bash_command("terraform plan"), Some("terraform"));
assert_eq!(classify_bash_command("tofu apply"), Some("terraform"));
}
#[test]
fn classifies_cargo_family() {
assert_eq!(
classify_bash_command("cargo build --release"),
Some("cargo")
);
assert_eq!(classify_bash_command("rustup update"), Some("cargo"));
}
#[test]
fn classifies_python_variants() {
assert_eq!(classify_bash_command("python3 script.py"), Some("python"));
assert_eq!(classify_bash_command("py -V"), Some("python"));
}
#[test]
fn classifies_pip_family() {
assert_eq!(classify_bash_command("pip install requests"), Some("pip"));
assert_eq!(classify_bash_command("uv pip install foo"), Some("pip"));
assert_eq!(classify_bash_command("poetry add foo"), Some("pip"));
}
#[test]
fn classifies_node_and_npm_separately() {
assert_eq!(classify_bash_command("node server.js"), Some("node"));
assert_eq!(classify_bash_command("npm install"), Some("npm"));
assert_eq!(classify_bash_command("pnpm add foo"), Some("npm"));
assert_eq!(classify_bash_command("yarn build"), Some("npm"));
}
#[test]
fn classifies_http_clients_together() {
assert_eq!(
classify_bash_command("curl https://api.example.com"),
Some("curl")
);
assert_eq!(
classify_bash_command("wget -O - https://x.com"),
Some("curl")
);
}
#[test]
fn classifies_ssh_family() {
assert_eq!(
classify_bash_command("ssh user@host 'uname -a'"),
Some("ssh")
);
assert_eq!(
classify_bash_command("rsync -avz src/ remote:dst/"),
Some("ssh")
);
}
#[test]
fn classifies_cloud_clis_distinctly() {
assert_eq!(classify_bash_command("aws s3 ls"), Some("aws"));
assert_eq!(
classify_bash_command("gcloud compute instances list"),
Some("gcloud")
);
assert_eq!(classify_bash_command("az login"), Some("az"));
assert_eq!(classify_bash_command("flyctl deploy"), Some("fly"));
assert_eq!(classify_bash_command("wrangler deploy"), Some("wrangler"));
}
#[test]
fn classifies_sudo_and_time_as_shell() {
assert_eq!(classify_bash_command("sudo apt update"), Some("shell"));
assert_eq!(classify_bash_command("time cargo build"), Some("shell"));
}
#[test]
fn strips_leading_env_var_assignments() {
assert_eq!(
classify_bash_command("RUSTFLAGS=\"-C opt-level=0\" cargo build"),
Some("cargo")
);
assert_eq!(
classify_bash_command("AWS_REGION=us-east-1 aws s3 ls"),
Some("aws")
);
assert_eq!(
classify_bash_command("FOO=bar BAZ=qux gh pr list"),
Some("gh")
);
}
#[test]
fn does_not_strip_dashed_option_with_equals() {
assert_eq!(
classify_bash_command("cargo --features=foo build"),
Some("cargo")
);
}
#[test]
fn case_insensitive_match() {
assert_eq!(classify_bash_command("GIT status"), Some("git"));
assert_eq!(classify_bash_command("GH pr list"), Some("gh"));
assert_eq!(classify_bash_command("Docker ps"), Some("docker"));
}
#[test]
fn classifies_long_realistic_gh_command() {
let cmd = "gh pr comment 130 --repo adolfousier/opencrabs --body \"$(cat <<'EOF'\nLooks good!\nEOF\n)\"";
assert_eq!(classify_bash_command(cmd), Some("gh"));
}
#[test]
fn classifies_chained_command_by_first_part() {
assert_eq!(
classify_bash_command("git log --oneline | head -10"),
Some("git")
);
assert_eq!(
classify_bash_command("docker ps && docker logs $(docker ps -q | head -1)"),
Some("docker")
);
}
#[test]
fn realistic_python_inline_script() {
assert_eq!(
classify_bash_command("python3 -c \"import json; print(json.dumps({}))\""),
Some("python")
);
}
#[test]
fn realistic_cargo_with_features_and_env() {
let cmd =
"CARGO_TERM_COLOR=always cargo nextest run --cargo-profile ci --all-features --retries 2";
assert_eq!(classify_bash_command(cmd), Some("cargo"));
}