use std::process::Command;
#[path = "support/provider_pack.rs"]
mod provider_pack;
use provider_pack::{build_provider_gtpack, example_pack_path};
#[test]
fn multi_target_generate_cli_renders_json_output() {
let dir = tempfile::tempdir().expect("tempdir");
let provider_pack = dir.path().join("provider.gtpack");
build_provider_gtpack("terraform", &provider_pack, "greentic.deploy.terraform");
let pack = example_pack_path();
let output = Command::new(env!("CARGO_BIN_EXE_greentic-deployer"))
.args([
"multi-target",
"generate",
"--provider",
"generic",
"--strategy",
"terraform",
"--tenant",
"acme",
"--pack",
pack.to_str().expect("pack path"),
"--provider-pack",
provider_pack.to_str().expect("provider pack"),
"--output",
"json",
])
.output()
.expect("run greentic-deployer");
assert!(
output.status.success(),
"stdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8(output.stdout).expect("utf8 stdout");
assert!(stdout.contains("\"capability\": \"generate\""));
assert!(stdout.contains("\"provider\": \"generic\""));
assert!(stdout.contains("\"strategy\": \"terraform\""));
}
#[test]
fn multi_target_generate_cli_renders_text_output() {
let dir = tempfile::tempdir().expect("tempdir");
let provider_pack = dir.path().join("provider.gtpack");
build_provider_gtpack("terraform", &provider_pack, "greentic.deploy.terraform");
let pack = example_pack_path();
let output = Command::new(env!("CARGO_BIN_EXE_greentic-deployer"))
.args([
"multi-target",
"generate",
"--provider",
"generic",
"--strategy",
"terraform",
"--tenant",
"acme",
"--pack",
pack.to_str().expect("pack path"),
"--provider-pack",
provider_pack.to_str().expect("provider pack"),
"--output",
"text",
])
.output()
.expect("run greentic-deployer");
assert!(
output.status.success(),
"stdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8(output.stdout).expect("utf8 stdout");
assert!(stdout.contains("capability=generate"));
assert!(stdout.contains("payload_kind=generate"));
assert!(stdout.contains("strategy=terraform"));
}
#[test]
fn multi_target_plan_cli_renders_json_output() {
let dir = tempfile::tempdir().expect("tempdir");
let provider_pack = dir.path().join("provider.gtpack");
build_provider_gtpack("terraform", &provider_pack, "greentic.deploy.terraform");
let pack = example_pack_path();
let output = Command::new(env!("CARGO_BIN_EXE_greentic-deployer"))
.args([
"multi-target",
"plan",
"--provider",
"generic",
"--strategy",
"terraform",
"--tenant",
"acme",
"--pack",
pack.to_str().expect("pack path"),
"--provider-pack",
provider_pack.to_str().expect("provider pack"),
"--output",
"json",
])
.output()
.expect("run greentic-deployer");
assert!(
output.status.success(),
"stdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8(output.stdout).expect("utf8 stdout");
assert!(stdout.contains("\"capability\": \"plan\""));
assert!(stdout.contains("\"pack_id\": \"greentic.deploy.terraform\""));
assert!(stdout.contains("\"flow_id\": \"plan_terraform\""));
}
#[test]
fn multi_target_apply_cli_preview_renders_json_output() {
let dir = tempfile::tempdir().expect("tempdir");
let provider_pack = dir.path().join("provider.gtpack");
build_provider_gtpack("terraform", &provider_pack, "greentic.deploy.terraform");
let pack = example_pack_path();
let output = Command::new(env!("CARGO_BIN_EXE_greentic-deployer"))
.args([
"multi-target",
"apply",
"--provider",
"generic",
"--strategy",
"terraform",
"--tenant",
"acme",
"--pack",
pack.to_str().expect("pack path"),
"--provider-pack",
provider_pack.to_str().expect("provider pack"),
"--preview",
"--output",
"json",
])
.output()
.expect("run greentic-deployer");
assert!(
output.status.success(),
"stdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8(output.stdout).expect("utf8 stdout");
assert!(stdout.contains("\"capability\": \"apply\""));
assert!(stdout.contains("\"preview\": true"));
assert!(stdout.contains("\"kind\": \"apply\""));
}
#[test]
fn multi_target_status_cli_renders_json_output() {
let dir = tempfile::tempdir().expect("tempdir");
let provider_pack = dir.path().join("provider.gtpack");
build_provider_gtpack("k8s-raw", &provider_pack, "greentic.deploy.k8s");
let pack = example_pack_path();
let output = Command::new(env!("CARGO_BIN_EXE_greentic-deployer"))
.args([
"multi-target",
"status",
"--provider",
"k8s",
"--strategy",
"iac-only",
"--tenant",
"acme",
"--pack",
pack.to_str().expect("pack path"),
"--provider-pack",
provider_pack.to_str().expect("provider pack"),
"--output",
"json",
])
.output()
.expect("run greentic-deployer");
assert!(
output.status.success(),
"stdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8(output.stdout).expect("utf8 stdout");
assert!(stdout.contains("\"capability\": \"status\""));
assert!(stdout.contains("\"pack_id\": \"greentic.deploy.k8s\""));
assert!(stdout.contains("\"flow_id\": \"status_k8s_raw\""));
}
#[test]
fn multi_target_rollback_cli_preview_renders_json_output() {
let dir = tempfile::tempdir().expect("tempdir");
let provider_pack = dir.path().join("provider.gtpack");
build_provider_gtpack("terraform", &provider_pack, "greentic.deploy.terraform");
let pack = example_pack_path();
let output = Command::new(env!("CARGO_BIN_EXE_greentic-deployer"))
.args([
"multi-target",
"rollback",
"--provider",
"generic",
"--strategy",
"terraform",
"--tenant",
"acme",
"--pack",
pack.to_str().expect("pack path"),
"--provider-pack",
provider_pack.to_str().expect("provider pack"),
"--preview",
"--output",
"json",
])
.output()
.expect("run greentic-deployer");
assert!(
output.status.success(),
"stdout: {}\nstderr: {}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8(output.stdout).expect("utf8 stdout");
assert!(stdout.contains("\"capability\": \"rollback\""));
assert!(stdout.contains("\"preview\": true"));
assert!(stdout.contains("\"target_capability\": \"apply\""));
}