use assert_cmd::Command;
use predicates::prelude::*;
fn bin() -> Command {
Command::cargo_bin("youtube-legend-cli").expect("binary")
}
#[test]
fn provider_auto_parses_and_help_shows_noteey() {
let assert = bin()
.arg("--provider")
.arg("auto")
.arg("--timeout")
.arg("1")
.arg("--no-cache")
.arg("https://youtu.be/dQw4w9WgXcQ")
.timeout(std::time::Duration::from_secs(15))
.assert();
let code = assert.get_output().status.code().unwrap_or(1);
assert_ne!(code, 2, "exit 2 means clap rejected --provider auto");
let help = bin()
.arg("--help")
.timeout(std::time::Duration::from_secs(5))
.assert()
.success()
.get_output()
.stdout
.clone();
let help_str = String::from_utf8_lossy(&help);
assert!(help_str.contains("auto"), "--help missing `auto` token");
assert!(
help_str.contains("provider-noteey"),
"--help missing `provider-noteey` token"
);
}
#[test]
fn provider_noteey_parses() {
bin()
.arg("--provider")
.arg("provider-noteey")
.arg("--timeout")
.arg("1")
.arg("https://youtu.be/INVALID_ID_FOR_TEST")
.timeout(std::time::Duration::from_secs(10))
.assert()
.failure();
}
#[test]
fn removed_provider_youtube_direct_rejected() {
bin()
.arg("--provider")
.arg("youtube-direct")
.arg("https://youtu.be/dQw4w9WgXcQ")
.timeout(std::time::Duration::from_secs(5))
.assert()
.failure()
.code(2)
.stderr(predicate::str::contains("invalid value"));
}