libnoa 0.1.1

AI-native distributed version control system with per-agent workspace isolation, JSONL append-only logs, snapshot-based history, and full git protocol compatibility
Documentation
use std::process::Command;

fn noa_bin() -> Command {
    Command::new(env!("CARGO_BIN_EXE_noa"))
}

fn noa_server_bin() -> Command {
    Command::new(env!("CARGO_BIN_EXE_noa-server"))
}

#[test]
fn test_noa_version_contains_details() {
    let output = noa_bin().arg("--version").output().unwrap();
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(output.status.success());
    assert!(stdout.contains("noa "));
    assert!(stdout.contains("Authors:"));
    assert!(stdout.contains("License:"));
    assert!(stdout.contains("Repository:"));
    assert!(stdout.contains("https://github.com/celestia-island/noa"));
    assert!(stdout.contains("https://docs.rs/libnoa"));
}

#[test]
fn test_noa_no_args_shows_usage() {
    let output = noa_bin().output().unwrap();
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(output.status.success());
    assert!(stdout.contains("Usage: noa"));
    assert!(stdout.contains("Commands:"));
    assert!(stdout.contains("init"));
    assert!(stdout.contains("status"));
    assert!(stdout.contains("log"));
    assert!(stdout.contains("snapshot"));
    assert!(stdout.contains("workspace"));
    assert!(stdout.contains("push"));
    assert!(stdout.contains("pull"));
    assert!(stdout.contains("clone"));
}

#[test]
fn test_noa_help_shows_usage() {
    let output = noa_bin().arg("--help").output().unwrap();
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(output.status.success());
    assert!(stdout.contains("Usage: noa"));
    assert!(stdout.contains("AI-native distributed version control system"));
    assert!(stdout.contains("Run 'noa <COMMAND> --help'"));
}

#[test]
fn test_noa_server_version_contains_details() {
    let output = noa_server_bin().arg("--version").output().unwrap();
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(output.status.success());
    assert!(stdout.contains("noa-server "));
    assert!(stdout.contains("Authors:"));
    assert!(stdout.contains("License:"));
    assert!(stdout.contains("Repository:"));
    assert!(stdout.contains("https://github.com/celestia-island/noa"));
    assert!(stdout.contains("https://docs.rs/libnoa"));
}

#[test]
fn test_noa_server_help_shows_usage() {
    let output = noa_server_bin().arg("--help").output().unwrap();
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(output.status.success());
    assert!(stdout.contains("Usage: noa-server"));
    assert!(stdout.contains("--db-path"));
    assert!(stdout.contains("--port"));
    assert!(stdout.contains("Server for the noa distributed version control system"));
}

#[test]
fn test_noa_subcommand_help() {
    let output = noa_bin().args(["init", "--help"]).output().unwrap();
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(output.status.success());
    assert!(stdout.contains("Usage: noa init"));

    let output = noa_bin().args(["log", "--help"]).output().unwrap();
    let stdout = String::from_utf8_lossy(&output.stdout);
    assert!(output.status.success());
    assert!(stdout.contains("--workspace"));
    assert!(stdout.contains("--limit"));
    assert!(stdout.contains("--tui"));
}