use std::process::Command;
const CARGO_PGRX: &str = env!("CARGO_BIN_EXE_cargo-pgrx");
fn run(args: &[&str]) -> (bool, String, String) {
let output = Command::new(CARGO_PGRX).args(args).output().expect("failed to spawn cargo-pgrx");
let stdout = String::from_utf8_lossy(&output.stdout).into_owned();
let stderr = String::from_utf8_lossy(&output.stderr).into_owned();
(output.status.success(), stdout, stderr)
}
#[test]
fn upgrade_help_succeeds() {
let (success, _stdout, stderr) = run(&["pgrx", "upgrade", "--help"]);
assert!(success, "expected --help to succeed, stderr was: {stderr}");
}
#[test]
fn upgrade_to_rejects_garbage() {
let (success, _stdout, stderr) = run(&["pgrx", "upgrade", "--to", "foo"]);
assert!(!success, "expected non-zero exit for --to foo");
assert!(
stderr.contains("invalid value 'foo'") && stderr.contains("--to"),
"expected clap error mentioning the invalid value and --to flag, stderr was: {stderr}"
);
}
#[test]
fn upgrade_to_rejects_empty() {
let (success, _stdout, stderr) = run(&["pgrx", "upgrade", "--to", ""]);
assert!(!success, "expected non-zero exit for --to ''");
assert!(
stderr.contains("invalid value ''") && stderr.contains("--to"),
"expected clap error mentioning the empty value and --to flag, stderr was: {stderr}"
);
}