use assert_cmd::Command;
use predicates::prelude::*;
mod helpers;
use helpers::cli_cmd;
fn check_e2e_environment() -> bool {
std::env::var("OAUTH_DB_SERVER")
.unwrap_or_else(|_| "http://localhost:28080".to_string())
.contains("28080")
}
macro_rules! skip_if_not_e2e {
() => {
if !check_e2e_environment() {
eprintln!("⚠ 跳过测试:需要 E2E 环境(运行 ./tests/e2e_setup.sh)");
return;
}
};
}
#[test]
fn test_version() {
let mut cmd = cli_cmd();
cmd.arg("--version")
.assert()
.success()
.stdout(predicates::str::contains("oauth-db"));
}
#[test]
fn test_help() {
let mut cmd = cli_cmd();
cmd.arg("--help")
.assert()
.success()
.stdout(predicates::str::contains("OAuth-DB CLI"))
.stdout(predicates::str::contains("Commands:"))
.stdout(predicates::str::contains("login"))
.stdout(predicates::str::contains("logout"))
.stdout(predicates::str::contains("whoami"))
.stdout(predicates::str::contains("app"))
.stdout(predicates::str::contains("user"))
.stdout(predicates::str::contains("admin"))
.stdout(predicates::str::contains("config"));
}
#[test]
fn test_app_help() {
let mut cmd = cli_cmd();
cmd.arg("app")
.arg("--help")
.assert()
.success()
.stdout(predicates::str::contains("Manage applications"))
.stdout(predicates::str::contains("create"))
.stdout(predicates::str::contains("list"))
.stdout(predicates::str::contains("show"))
.stdout(predicates::str::contains("update"))
.stdout(predicates::str::contains("delete"));
}
#[test]
fn test_user_help() {
let mut cmd = cli_cmd();
cmd.arg("user")
.arg("--help")
.assert()
.success()
.stdout(predicates::str::contains("Manage application users"))
.stdout(predicates::str::contains("create"))
.stdout(predicates::str::contains("list"))
.stdout(predicates::str::contains("show"))
.stdout(predicates::str::contains("update"))
.stdout(predicates::str::contains("delete"));
}
#[test]
fn test_admin_help() {
let mut cmd = cli_cmd();
cmd.arg("admin")
.arg("--help")
.assert()
.success()
.stdout(predicates::str::contains("Platform administration"))
.stdout(predicates::str::contains("users"))
.stdout(predicates::str::contains("stats"));
}
#[test]
fn test_invalid_command() {
let mut cmd = cli_cmd();
cmd.arg("invalid-command")
.assert()
.failure()
.stderr(predicates::str::contains("unrecognized subcommand"));
}
#[test]
fn test_app_create_help() {
let mut cmd = cli_cmd();
cmd.arg("app")
.arg("create")
.arg("--help")
.assert()
.success()
.stdout(predicates::str::contains("Create a new application"))
.stdout(predicates::str::contains("<NAME>"))
.stdout(predicates::str::contains("--default-db"))
.stdout(predicates::str::contains("--allowed-dbs"))
.stdout(predicates::str::contains("--max-users"))
.stdout(predicates::str::contains("--storage-quota"));
}
#[test]
fn test_user_create_help() {
let mut cmd = cli_cmd();
cmd.arg("user")
.arg("create")
.arg("--help")
.assert()
.success()
.stdout(predicates::str::contains("Create a new application user"))
.stdout(predicates::str::contains("<APP_ID>"))
.stdout(predicates::str::contains("--token"))
.stdout(predicates::str::contains("--label"))
.stdout(predicates::str::contains("--storage-quota"));
}