use clap::Parser as _;
use super::{Cli, Ticket, TokenPolicy, qr, token_policy};
#[test]
fn the_flag_surface_is_internally_consistent() {
use clap::CommandFactory;
Cli::command().debug_assert();
}
#[test]
fn a_supplied_token_wins_and_absence_generates_one() {
assert!(matches!(
token_policy(Some("k".to_owned()), None, false).unwrap(),
TokenPolicy::Supplied(t) if t == "k"
));
assert!(matches!(
token_policy(None, None, false).unwrap(),
TokenPolicy::Generate
));
assert!(matches!(
token_policy(None, None, true).unwrap(),
TokenPolicy::InsecureNoAuth
));
}
#[test]
fn a_token_file_is_read_and_its_trailing_newline_trimmed() {
let dir = std::env::temp_dir().join(format!("modelpipe-cli-{}", std::process::id()));
std::fs::create_dir_all(&dir).unwrap();
for (contents, expected) in [
("secret", "secret"),
("secret\n", "secret"),
("secret\r\n", "secret"),
("secret\n\n", "secret"),
] {
let path = dir.join("token");
std::fs::write(&path, contents).unwrap();
assert!(
matches!(
token_policy(None, Some(path.clone()), false).unwrap(),
TokenPolicy::Supplied(t) if t == expected
),
"{contents:?} should yield {expected:?}"
);
}
let path = dir.join("token");
std::fs::write(&path, "\n").unwrap();
assert!(token_policy(None, Some(path), false).is_err());
let missing = dir.join("does-not-exist");
assert!(token_policy(None, Some(missing), false).is_err());
std::fs::remove_dir_all(&dir).ok();
}
#[test]
fn the_qr_encodes_an_uppercased_ticket_that_still_parses() {
let text = "pipeadlvvgabqkyqvn6vjp7nhslea45a5yls6pnkmizfv4bbu2hxa5iruaaauhlp2na";
let ticket: Ticket = text.parse().expect("a normative vector");
let upper = ticket.to_string().to_uppercase();
assert_eq!(
upper.parse::<Ticket>().expect("the scan must parse"),
ticket,
"an upcased ticket is the same ticket"
);
assert!(qr(&ticket).is_some(), "and it must fit a QR code");
}
#[test]
fn an_empty_supplied_token_is_refused_rather_than_enforced() {
for empty in ["", " ", "\t", "\n"] {
assert!(
token_policy(Some(empty.to_owned()), None, false).is_err(),
"{empty:?} must not become a credential"
);
}
assert!(matches!(
token_policy(Some(" sk-real ".to_owned()), None, false).unwrap(),
TokenPolicy::Supplied(t) if t == " sk-real "
));
}
#[test]
fn the_help_text_never_renders_the_environment_token() {
use clap::CommandFactory;
let serve = Cli::command();
let serve = serve
.get_subcommands()
.find(|c| c.get_name() == "serve")
.expect("serve");
let token = serve
.get_arguments()
.find(|a| a.get_id() == "token")
.expect("--token");
assert!(
token.is_hide_env_values_set(),
"`--help` would print the value of MODELPIPE_TOKEN"
);
}
#[test]
fn verbosity_is_accepted_on_either_side_of_the_subcommand() {
let leading = Cli::try_parse_from(["modelpipe", "-vv", "serve", "http://127.0.0.1:11434"])
.expect("-vv before the subcommand");
let trailing = Cli::try_parse_from(["modelpipe", "serve", "http://127.0.0.1:11434", "-vv"])
.expect("-vv after the subcommand");
assert_eq!(leading.verbose, 2);
assert_eq!(trailing.verbose, 2);
}
#[test]
fn verbosity_counts_what_was_typed() {
let none = Cli::try_parse_from(["modelpipe", "serve", "http://127.0.0.1:11434"]).expect("none");
let one =
Cli::try_parse_from(["modelpipe", "serve", "http://127.0.0.1:11434", "-v"]).expect("one");
let spelled = Cli::try_parse_from([
"modelpipe",
"serve",
"http://127.0.0.1:11434",
"--verbose",
"--verbose",
"--verbose",
])
.expect("the long form, thrice");
assert_eq!((none.verbose, one.verbose, spelled.verbose), (0, 1, 3));
}