kingfisher/tests/cli_git_clone_flags.rs
2026-02-28 12:16:08 -07:00

149 lines
4.5 KiB
Rust

use clap::Parser;
use tempfile::tempdir;
use kingfisher::cli::{
commands::scan::ScanOperation,
global::{Command, CommandLineArgs},
};
#[test]
fn parse_git_clone_dir_and_keep_clones() -> anyhow::Result<()> {
let dir = tempdir()?;
let args = CommandLineArgs::try_parse_from([
"kingfisher",
"scan",
"https://github.com/octocat/Hello-World.git",
"--git-clone-dir",
dir.path().to_str().unwrap(),
"--keep-clones",
"--no-update-check",
])?;
let command = match args.command {
Command::Scan(scan_args) => scan_args,
other => panic!("unexpected command parsed: {:?}", other),
};
let scan_args = match command.into_operation()? {
ScanOperation::Scan(scan_args) => scan_args,
op => panic!("expected scan operation, got {:?}", op),
};
assert_eq!(scan_args.input_specifier_args.git_clone_dir.as_deref(), Some(dir.path()));
assert!(scan_args.input_specifier_args.keep_clones);
Ok(())
}
#[test]
fn keep_clones_defaults_to_false() -> anyhow::Result<()> {
let args = CommandLineArgs::try_parse_from([
"kingfisher",
"scan",
"github.com/octocat/Hello-World",
"--no-update-check",
])?;
let command = match args.command {
Command::Scan(scan_args) => scan_args,
other => panic!("unexpected command parsed: {:?}", other),
};
let scan_args = match command.into_operation()? {
ScanOperation::Scan(scan_args) => scan_args,
op => panic!("expected scan operation, got {:?}", op),
};
assert!(scan_args.input_specifier_args.git_clone_dir.is_none());
assert!(!scan_args.input_specifier_args.keep_clones);
Ok(())
}
#[test]
fn deprecated_git_url_flag_still_parses() -> anyhow::Result<()> {
let args = CommandLineArgs::try_parse_from([
"kingfisher",
"scan",
"--git-url",
"https://github.com/octocat/Hello-World.git",
"--no-update-check",
])?;
let command = match args.command {
Command::Scan(scan_args) => scan_args,
other => panic!("unexpected command parsed: {:?}", other),
};
let scan_args = match command.into_operation()? {
ScanOperation::Scan(scan_args) => scan_args,
op => panic!("expected scan operation, got {:?}", op),
};
assert_eq!(scan_args.input_specifier_args.git_url.len(), 1);
assert_eq!(
scan_args.input_specifier_args.git_url[0].as_str(),
"https://github.com/octocat/Hello-World.git"
);
assert!(scan_args.input_specifier_args.path_inputs.is_empty());
Ok(())
}
#[test]
fn positional_git_url_examples_parse() -> anyhow::Result<()> {
let examples = [
("github.com/kubernetes/kubernetes", "https://github.com/kubernetes/kubernetes"),
("https://github.com/org/repo", "https://github.com/org/repo"),
("gitlab.com/gitlab-org/gitlab", "https://gitlab.com/gitlab-org/gitlab"),
("https://gitlab.com/namespace/project.git", "https://gitlab.com/namespace/project.git"),
];
for (input, expected) in examples {
let args =
CommandLineArgs::try_parse_from(["kingfisher", "scan", input, "--no-update-check"])?;
let command = match args.command {
Command::Scan(scan_args) => scan_args,
other => panic!("unexpected command parsed: {:?}", other),
};
let scan_args = match command.into_operation()? {
ScanOperation::Scan(scan_args) => scan_args,
op => panic!("expected scan operation, got {:?}", op),
};
assert_eq!(scan_args.input_specifier_args.git_url.len(), 1);
assert_eq!(scan_args.input_specifier_args.git_url[0].as_str(), expected);
assert!(scan_args.input_specifier_args.path_inputs.is_empty());
}
Ok(())
}
#[test]
fn turbo_mode_applies_speed_first_defaults() -> anyhow::Result<()> {
let args = CommandLineArgs::try_parse_from([
"kingfisher",
"scan",
".",
"--turbo",
"--no-update-check",
])?;
let command = match args.command {
Command::Scan(scan_args) => scan_args,
other => panic!("unexpected command parsed: {:?}", other),
};
let scan_args = match command.into_operation()? {
ScanOperation::Scan(scan_args) => scan_args,
op => panic!("expected scan operation, got {:?}", op),
};
assert!(scan_args.turbo);
assert!(scan_args.no_base64);
assert!(!scan_args.input_specifier_args.commit_metadata);
Ok(())
}