tvc 0.9.0

CLI for Turnkey Verifiable Cloud
Documentation
use assert_cmd::cargo::cargo_bin_cmd;
use predicates::prelude::*;
use serde_json::json;
use std::fs;
use tempfile::NamedTempFile;
use tvc::config::deploy::DeployConfig;

const NON_INTERACTIVE_ENV: &str = "TVC_NON_INTERACTIVE";

fn write_json(value: &serde_json::Value) -> NamedTempFile {
    let file = NamedTempFile::new().unwrap();
    fs::write(file.path(), serde_json::to_string_pretty(value).unwrap()).unwrap();
    file
}

#[test]
fn deploy_create_non_interactive_reports_all_placeholder_errors() {
    let config = NamedTempFile::new().unwrap();
    fs::write(
        config.path(),
        serde_json::to_string_pretty(&DeployConfig::template(None)).unwrap(),
    )
    .unwrap();

    cargo_bin_cmd!("tvc")
        .env(NON_INTERACTIVE_ENV, "1")
        .arg("deploy")
        .arg("create")
        .arg("--config-file")
        .arg(config.path())
        .assert()
        .failure()
        .stderr(predicate::str::contains("app_id"))
        .stderr(predicate::str::contains("qos_version"))
        .stderr(predicate::str::contains("pivot_container_image_url"))
        .stderr(predicate::str::contains("pivot_path"))
        .stderr(predicate::str::contains("expected_pivot_digest"))
        .stderr(predicate::str::contains(
            "pivotContainerEncryptedPullSecret",
        ));
}

#[test]
fn app_create_non_interactive_reports_placeholder_and_structural_errors() {
    let config = write_json(&json!({
        "name": "<FILL_IN_APP_NAME>",
        "quorumPublicKey": "test-quorum-public-key",
        "manifestSetId": "manifest-set-id",
        "manifestSetParams": {
            "name": "<FILL_IN_MANIFEST_SET_NAME>",
            "threshold": 1,
            "newOperators": [{
                "name": "operator-1",
                "publicKey": "<FILL_IN_OPERATOR_PUBLIC_KEY>"
            }]
        },
        "shareSetId": "share-set-id",
        "shareSetParams": {
            "name": "share-set",
            "threshold": 1,
            "newOperators": []
        }
    }));

    cargo_bin_cmd!("tvc")
        .env(NON_INTERACTIVE_ENV, "1")
        .arg("app")
        .arg("create")
        .arg("--config-file")
        .arg(config.path())
        .assert()
        .failure()
        .stderr(predicate::str::contains("name"))
        .stderr(predicate::str::contains("manifestSetParams.name"))
        .stderr(predicate::str::contains(
            "manifestSetParams.newOperators[0].publicKey",
        ))
        .stderr(predicate::str::contains("manifestSetId"))
        .stderr(predicate::str::contains("shareSetId"))
        .stderr(predicate::str::contains("shareSetParams"))
        .stderr(predicate::str::contains("shareSetParams.threshold"));
}