greentic-secrets-dev 1.2.30146016034

CLI for Greentic secrets (dev tooling, scaffold/wizard/apply/init).
use assert_cmd::Command;
use std::fs;
use tempfile::TempDir;

fn cli_cmd(tmp: &TempDir) -> Command {
    let root = tmp.path().join("greentic-root");
    let state = root.join("state");
    fs::create_dir_all(&state).expect("state dir");
    let mut cmd = assert_cmd::cargo::cargo_bin_cmd!("greentic-secrets");
    cmd.current_dir(tmp.path())
        .arg("--greentic-root")
        .arg(root)
        .arg("--state-dir")
        .arg(state);
    cmd
}

#[test]
fn help_works() {
    let tmp = TempDir::new().unwrap();
    cli_cmd(&tmp)
        .arg("--help")
        .assert()
        .success()
        .stdout(predicates::str::contains("Greentic secrets CLI"));
}

#[test]
fn config_show_defaults() {
    let tmp = TempDir::new().unwrap();
    cli_cmd(&tmp)
        .args(["config", "show"])
        .assert()
        .success()
        .stdout(predicates::str::contains("schema_version"));
}

#[test]
fn ctx_roundtrip() {
    let tmp = TempDir::new().unwrap();
    let mut set = cli_cmd(&tmp);
    set.args([
        "ctx", "set", "--env", "dev", "--tenant", "tenant-a", "--team", "team-a",
    ])
    .assert()
    .success();

    let mut show = cli_cmd(&tmp);
    let output = show
        .args(["ctx", "show"])
        .assert()
        .success()
        .get_output()
        .stdout
        .clone();
    let text = String::from_utf8_lossy(&output);
    assert!(text.contains("env=dev"));
    assert!(text.contains("tenant=tenant-a"));
    assert!(text.contains("team=team-a"));
}

#[test]
fn dev_store_up_and_down() {
    let tmp = TempDir::new().unwrap();
    let store_path = tmp.path().join("dev-store.db");

    cli_cmd(&tmp)
        .args(["dev", "up", "--store-path", store_path.to_str().unwrap()])
        .assert()
        .success();
    assert!(store_path.exists(), "dev store should be created");

    cli_cmd(&tmp)
        .args([
            "dev",
            "down",
            "--destroy",
            "--store-path",
            store_path.to_str().unwrap(),
        ])
        .assert()
        .success();
    assert!(
        !store_path.exists(),
        "dev store should be removed with --destroy"
    );
}