govctl 0.9.2

Project governance CLI for RFC, ADR, and Work Item management
use super::*;

#[test]
fn test_guard_set_command() -> common::TestResult {
    let temp_dir = init_project()?;
    write_guard(temp_dir.path(), "GUARD-ECHO", "echo old")?;

    let output = run_commands(
        temp_dir.path(),
        &[
            &["guard", "set", "GUARD-ECHO", "command", "echo new"],
            &["guard", "get", "GUARD-ECHO", "command"],
        ],
    )?;
    assert!(output.contains("echo new"), "output: {}", output);
    Ok(())
}

#[test]
fn test_guard_add_remove_refs() -> common::TestResult {
    let temp_dir = init_project()?;
    write_guard(temp_dir.path(), "GUARD-ECHO", "echo hello")?;

    let output = run_commands(
        temp_dir.path(),
        &[
            &["guard", "add", "GUARD-ECHO", "refs", "RFC-0001"],
            &["guard", "get", "GUARD-ECHO", "refs"],
            &["guard", "remove", "GUARD-ECHO", "refs", "RFC-0001"],
        ],
    )?;
    assert!(
        output.contains("Added 'RFC-0001' to GUARD-ECHO.refs"),
        "output: {}",
        output
    );
    assert!(
        output.contains("$ govctl guard get GUARD-ECHO refs\nRFC-0001"),
        "output: {}",
        output
    );
    assert!(
        output.contains("Removed 'RFC-0001' from GUARD-ECHO.refs"),
        "output: {}",
        output
    );

    let guard_path = temp_dir.path().join("gov/guard/guard-echo.toml");
    let content = fs::read_to_string(guard_path)?;
    assert!(
        !content.contains("RFC-0001"),
        "ref should be removed: {}",
        content
    );
    Ok(())
}

#[test]
fn test_guard_set_timeout_secs() -> common::TestResult {
    let temp_dir = init_project()?;
    write_guard(temp_dir.path(), "GUARD-ECHO", "true")?;

    let output = run_commands(
        temp_dir.path(),
        &[
            &["guard", "set", "GUARD-ECHO", "timeout_secs", "30"],
            &["guard", "get", "GUARD-ECHO", "timeout_secs"],
        ],
    )?;
    assert!(output.contains("30"), "output: {}", output);
    Ok(())
}

#[test]
fn test_guard_nested_object_root_edit_paths() -> common::TestResult {
    let temp_dir = init_project()?;
    write_guard(temp_dir.path(), "GUARD-ECHO", "echo old")?;

    let output = run_commands(
        temp_dir.path(),
        &[
            &[
                "guard",
                "set",
                "GUARD-ECHO",
                "check.command",
                "echo nested legacy",
            ],
            &[
                "guard",
                "edit",
                "GUARD-ECHO",
                "check.timeout_secs",
                "--set",
                "45",
            ],
            &["guard", "get", "GUARD-ECHO", "command"],
            &["guard", "get", "GUARD-ECHO", "timeout_secs"],
        ],
    )?;

    assert!(
        output.contains("Set GUARD-ECHO.check.command = echo nested legacy"),
        "output: {}",
        output
    );
    assert!(
        output.contains("Set GUARD-ECHO.check.timeout_secs = 45"),
        "output: {}",
        output
    );
    assert!(
        output.contains("$ govctl guard get GUARD-ECHO command\necho nested legacy"),
        "output: {}",
        output
    );
    assert!(
        output.contains("$ govctl guard get GUARD-ECHO timeout_secs\n45"),
        "output: {}",
        output
    );
    Ok(())
}