oauth-db-cli 0.1.0

Command-line tool for managing OAuth-DB platform
Documentation
use assert_cmd::Command;
use predicates::prelude::*;

mod helpers;
use helpers::cli_cmd;

/// 检查 E2E 环境是否就绪
fn check_e2e_environment() -> bool {
    std::env::var("OAUTH_DB_SERVER")
        .unwrap_or_else(|_| "http://localhost:28080".to_string())
        .contains("28080")
}

/// 如果不在 E2E 环境中则跳过测试
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"));
}