296 lines
7.5 KiB
Rust
296 lines
7.5 KiB
Rust
use super::*;
|
|
|
|
#[test]
|
|
fn cli_config_opens_wizard() {
|
|
let cli = Cli::try_parse_from(["refray", "config"]).unwrap();
|
|
|
|
assert!(matches!(cli.command, Command::Config));
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_removed_config_subcommands() {
|
|
for args in [
|
|
["refray", "config", "wizard"].as_slice(),
|
|
["refray", "config", "init"].as_slice(),
|
|
["refray", "config", "show"].as_slice(),
|
|
["refray", "config", "site", "list"].as_slice(),
|
|
["refray", "config", "mirror", "list"].as_slice(),
|
|
] {
|
|
assert!(Cli::try_parse_from(args).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_removed_sync_args() {
|
|
for args in [
|
|
["refray", "sync", "--repo-pattern", "^(foo|bar)-"].as_slice(),
|
|
["refray", "sync", "--work-dir", "/tmp/refray"].as_slice(),
|
|
["refray", "sync", "--force"].as_slice(),
|
|
] {
|
|
assert!(Cli::try_parse_from(args).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn cli_accepts_sync_retry_failed() {
|
|
let cli = Cli::try_parse_from(["refray", "sync", "--retry-failed"]).unwrap();
|
|
|
|
let Command::Sync(args) = cli.command else {
|
|
panic!("parsed unexpected command");
|
|
};
|
|
assert!(args.retry_failed);
|
|
}
|
|
|
|
#[test]
|
|
fn cli_accepts_webhook_serve() {
|
|
let cli = Cli::try_parse_from(["refray", "serve", "--listen", "127.0.0.1:9000"]).unwrap();
|
|
|
|
let Command::Serve(args) = cli.command else {
|
|
panic!("parsed unexpected command");
|
|
};
|
|
assert_eq!(args.listen, "127.0.0.1:9000");
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_removed_jobs_args() {
|
|
for args in [
|
|
["refray", "sync", "--jobs", "8"].as_slice(),
|
|
["refray", "serve", "--jobs", "2"].as_slice(),
|
|
["refray", "webhook", "install", "--jobs", "6"].as_slice(),
|
|
["refray", "webhook", "uninstall", "--jobs", "3"].as_slice(),
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"update",
|
|
"https://new.example.test/webhook",
|
|
"--jobs",
|
|
"5",
|
|
]
|
|
.as_slice(),
|
|
] {
|
|
assert!(Cli::try_parse_from(args).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_removed_serve_args() {
|
|
for args in [
|
|
["refray", "serve", "--secret", "secret"].as_slice(),
|
|
["refray", "serve", "--secret-env", "WEBHOOK_SECRET"].as_slice(),
|
|
["refray", "serve", "--full-sync-interval-minutes", "30"].as_slice(),
|
|
["refray", "serve", "--work-dir", "/tmp/refray"].as_slice(),
|
|
] {
|
|
assert!(Cli::try_parse_from(args).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn cli_accepts_webhook_install() {
|
|
let cli = Cli::try_parse_from(["refray", "webhook", "install"]).unwrap();
|
|
|
|
let Command::Webhook(WebhookCommand::Install(args)) = cli.command else {
|
|
panic!("parsed unexpected command");
|
|
};
|
|
assert!(!args.dry_run);
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_removed_webhook_install_args() {
|
|
for args in [
|
|
["refray", "webhook", "install", "repo-one"].as_slice(),
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"install",
|
|
"--url",
|
|
"https://mirror.example.test/webhook",
|
|
]
|
|
.as_slice(),
|
|
["refray", "webhook", "install", "--group", "sync-1"].as_slice(),
|
|
["refray", "webhook", "install", "--work-dir", "/tmp/refray"].as_slice(),
|
|
["refray", "webhook", "install", "--secret", "secret"].as_slice(),
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"install",
|
|
"--secret-env",
|
|
"WEBHOOK_SECRET",
|
|
]
|
|
.as_slice(),
|
|
["refray", "webhook", "install", "--repo-pattern", "^repo$"].as_slice(),
|
|
] {
|
|
assert!(Cli::try_parse_from(args).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn cli_accepts_webhook_uninstall() {
|
|
let cli = Cli::try_parse_from(["refray", "webhook", "uninstall", "--dry-run"]).unwrap();
|
|
|
|
let Command::Webhook(WebhookCommand::Uninstall(args)) = cli.command else {
|
|
panic!("parsed unexpected command");
|
|
};
|
|
assert_eq!(args.url, None);
|
|
assert!(args.dry_run);
|
|
}
|
|
|
|
#[test]
|
|
fn cli_accepts_webhook_uninstall_url() {
|
|
let cli = Cli::try_parse_from([
|
|
"refray",
|
|
"webhook",
|
|
"uninstall",
|
|
"https://old.example.test/webhook",
|
|
])
|
|
.unwrap();
|
|
|
|
let Command::Webhook(WebhookCommand::Uninstall(args)) = cli.command else {
|
|
panic!("parsed unexpected command");
|
|
};
|
|
assert_eq!(
|
|
args.url,
|
|
Some("https://old.example.test/webhook".to_string())
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_removed_webhook_uninstall_args() {
|
|
for args in [
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"uninstall",
|
|
"--url",
|
|
"https://mirror.example.test/webhook",
|
|
]
|
|
.as_slice(),
|
|
["refray", "webhook", "uninstall", "--group", "sync-1"].as_slice(),
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"uninstall",
|
|
"--work-dir",
|
|
"/tmp/refray",
|
|
]
|
|
.as_slice(),
|
|
] {
|
|
assert!(Cli::try_parse_from(args).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_invalid_webhook_uninstall_url() {
|
|
for args in [
|
|
["refray", "webhook", "uninstall", "repo-one"].as_slice(),
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"uninstall",
|
|
"ftp://example.test/webhook",
|
|
]
|
|
.as_slice(),
|
|
] {
|
|
assert!(Cli::try_parse_from(args).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn webhook_uninstall_url_uses_arg_before_config() {
|
|
let config = Config {
|
|
jobs: crate::config::DEFAULT_JOBS,
|
|
webhook: None,
|
|
..Config::default()
|
|
};
|
|
|
|
let url = resolve_uninstall_webhook_url(
|
|
&config,
|
|
Some("https://old.example.test/webhook".to_string()),
|
|
)
|
|
.unwrap();
|
|
|
|
assert_eq!(url, "https://old.example.test/webhook");
|
|
}
|
|
|
|
#[test]
|
|
fn cli_accepts_webhook_update() {
|
|
let cli = Cli::try_parse_from([
|
|
"refray",
|
|
"webhook",
|
|
"update",
|
|
"https://new.example.test/webhook",
|
|
])
|
|
.unwrap();
|
|
|
|
let Command::Webhook(WebhookCommand::Update(args)) = cli.command else {
|
|
panic!("parsed unexpected command");
|
|
};
|
|
assert_eq!(args.url, "https://new.example.test/webhook");
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_removed_webhook_update_secret_args() {
|
|
for args in [
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"update",
|
|
"--url",
|
|
"https://new.example.test/webhook",
|
|
]
|
|
.as_slice(),
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"update",
|
|
"https://new.example.test/webhook",
|
|
"--secret",
|
|
"secret",
|
|
]
|
|
.as_slice(),
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"update",
|
|
"https://new.example.test/webhook",
|
|
"--secret-env",
|
|
"WEBHOOK_SECRET",
|
|
]
|
|
.as_slice(),
|
|
[
|
|
"refray",
|
|
"webhook",
|
|
"update",
|
|
"https://new.example.test/webhook",
|
|
"--work-dir",
|
|
"/tmp/refray",
|
|
]
|
|
.as_slice(),
|
|
] {
|
|
assert!(Cli::try_parse_from(args).is_err());
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn cli_rejects_scoped_webhook_update() {
|
|
let result = Cli::try_parse_from([
|
|
"refray",
|
|
"webhook",
|
|
"update",
|
|
"repo-one",
|
|
"https://new.example.test/webhook",
|
|
]);
|
|
|
|
assert!(result.is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn missing_config_error_asks_user_to_run_config() {
|
|
let temp = tempfile::tempdir().unwrap();
|
|
let path = temp.path().join("config.toml");
|
|
|
|
let error = load_config(&path).unwrap_err().to_string();
|
|
|
|
assert!(error.contains("config not found at"));
|
|
assert!(error.contains("Run `refray config` first"));
|
|
}
|