tvc 0.13.0

CLI for Turnkey Verifiable Cloud
Documentation
use assert_cmd::cargo::cargo_bin_cmd;
use predicates::prelude::*;

const DEPLOYMENT_ID: &str = "33333333-3333-4333-8333-333333333333";
const OPERATOR_ID: &str = "11111111-1111-4111-8111-111111111111";

#[test]
fn deploy_help_lists_provision_subcommand() {
    cargo_bin_cmd!("tvc")
        .arg("deploy")
        .arg("--help")
        .assert()
        .success()
        .stdout(predicate::str::contains("provision"))
        .stdout(predicate::str::contains(
            "Provision one hosted quorum-key share for a deployment",
        ));
}

#[test]
fn provision_help_lists_only_singular_live_inputs() {
    cargo_bin_cmd!("tvc")
        .arg("deploy")
        .arg("provision")
        .arg("--help")
        .assert()
        .success()
        .stdout(predicate::str::contains("--deploy-id <DEPLOY_ID>"))
        .stdout(predicate::str::contains("--operator-id <OPERATOR_ID>"))
        .stdout(predicate::str::contains("--dangerous-skip-verification"))
        .stdout(predicate::str::contains("TVC_DEPLOY_ID"))
        .stdout(predicate::str::contains("TVC_OPERATOR_ID"))
        .stdout(predicate::str::contains("--provision-bundle").not())
        .stdout(predicate::str::contains("--operators").not());
}

#[test]
fn provision_requires_deployment_and_operator_ids() {
    cargo_bin_cmd!("tvc")
        .env_clear()
        .arg("deploy")
        .arg("provision")
        .assert()
        .failure()
        .stderr(predicate::str::contains(
            "the following required arguments were not provided",
        ))
        .stderr(predicate::str::contains("--deploy-id <DEPLOY_ID>"))
        .stderr(predicate::str::contains("--operator-id <OPERATOR_ID>"));
}

#[test]
fn provision_reads_ids_from_environment() {
    let temp = tempfile::TempDir::new().unwrap();

    cargo_bin_cmd!("tvc")
        .env_clear()
        .env("HOME", temp.path())
        .env("TVC_DEPLOY_ID", DEPLOYMENT_ID)
        .env("TVC_OPERATOR_ID", OPERATOR_ID)
        .arg("deploy")
        .arg("provision")
        .assert()
        .failure()
        .stderr(predicate::str::contains("No active organization"))
        .stderr(predicate::str::contains("required arguments").not());
}

#[test]
fn provision_rejects_malformed_uuids_during_parsing() {
    for (deploy_id, operator_id) in [("not-a-uuid", OPERATOR_ID), (DEPLOYMENT_ID, "not-a-uuid")] {
        cargo_bin_cmd!("tvc")
            .env_clear()
            .arg("deploy")
            .arg("provision")
            .arg("--deploy-id")
            .arg(deploy_id)
            .arg("--operator-id")
            .arg(operator_id)
            .assert()
            .failure()
            .stderr(predicate::str::contains("invalid value 'not-a-uuid'"));
    }
}