use assert_cmd::{cargo::cargo_bin_cmd, Command};
use predicates::prelude::*;
const SPEC_INPUT: &str =
r#"{"v":1,"tenant":"org_abc","resource":"secrets/db","purpose":"encryption"}"#;
const SPEC_SHA256_HEX: &str = "03fdc63d2f82815eb0a97e6f1a02890e152c021a795142b9c22e2b31a3bd83eb";
const SPEC_SHA256_B64: &str = "A/3GPS+CgV6wqX5vGgKJDhUsAhp5UUK5wi4rMaO9g+s=";
fn cmd() -> Command {
cargo_bin_cmd!("canaad")
}
#[test]
fn default_format_is_hex_and_exits_zero() {
cmd()
.args(["hash", SPEC_INPUT])
.assert()
.success()
.stdout(predicate::str::is_match(r"^[0-9a-f]{64}\n$").expect("regex must compile"));
}
#[test]
fn base64_output_format() {
cmd()
.args(["hash", "-o", "base64", SPEC_INPUT])
.assert()
.success()
.stdout(predicate::str::contains(SPEC_SHA256_B64));
}
#[test]
fn spec_10_1_known_answer_vector() {
let expected = format!("{SPEC_SHA256_HEX}\n");
cmd().args(["hash", SPEC_INPUT]).assert().success().stdout(expected);
}