use assert_cmd::Command;
use predicates::prelude::*;
fn binary() -> Command {
Command::cargo_bin("gen_pass").expect("binary built")
}
#[test]
fn help_shows_usage() {
binary()
.arg("--help")
.assert()
.success()
.stdout(predicate::str::contains("Generate secure passwords"));
}
#[test]
fn length_flag_changes_size() {
let len = 24u32;
binary()
.args(["-l", &len.to_string()])
.assert()
.success()
.stdout(predicate::function(move |out: &str| out.trim_end().len() == len as usize));
}
#[test]
fn copy_output_variant() {
binary()
.args(["-l", "10", "--output", "copy"])
.env("TEST_NO_CLIP", "1")
.assert()
.success();
}
#[test]
fn salt_flag_accepted() {
binary()
.args(["-s", "test_salt"])
.assert()
.success();
}
#[test]
fn salt_produces_consistent_output() {
let output1 = binary()
.args(["-l", "16", "-s", "fixed_test_salt"])
.output()
.expect("command ran");
let output2 = binary()
.args(["-l", "16", "-s", "fixed_test_salt"])
.output()
.expect("command ran");
assert!(output1.status.success());
assert!(output2.status.success());
}