mod common;
use common::{grex, required_args_for, STUB_VERBS, VERBS};
use predicates::prelude::*;
#[test]
fn every_verb_stub_runs_and_prints_unimplemented() {
for verb in STUB_VERBS {
let mut cmd = grex();
cmd.arg(verb);
cmd.args(required_args_for(verb));
cmd.assert().success().stdout(predicate::str::contains("unimplemented"));
}
}
#[test]
fn required_positional_args_are_enforced() {
for verb in ["add", "rm", "run"] {
grex()
.arg(verb)
.assert()
.failure()
.stderr(predicate::str::contains("required").or(predicate::str::contains("Usage")));
}
}
#[test]
fn unknown_flag_fails_for_every_verb() {
for verb in VERBS {
if *verb == "exec" {
continue;
}
let mut cmd = grex();
cmd.arg(verb);
cmd.args(required_args_for(verb));
cmd.arg("--definitely-not-a-real-flag");
cmd.assert().failure().stderr(
predicate::str::contains("unexpected argument")
.or(predicate::str::contains("unknown argument")),
);
}
}
#[test]
fn bare_grex_fails_with_help_hint() {
grex()
.assert()
.failure()
.stderr(predicate::str::contains("Usage:").or(predicate::str::contains("<COMMAND>")));
}
#[test]
fn multi_verb_input_fails() {
grex().args(["init", "ls"]).assert().failure();
}
#[test]
fn init_stub() {
grex().arg("init").assert().success().stdout(predicate::str::contains("unimplemented"));
}
#[test]
fn zero_arg_verbs_succeed() {
grex().arg("status").assert().success().stdout(predicate::str::contains("unimplemented"));
}