81 lines
2.0 KiB
Rust
81 lines
2.0 KiB
Rust
//! Integration tests for the `envdiff` command.
|
|
|
|
use std::fs;
|
|
use std::path::PathBuf;
|
|
use std::sync::atomic::{AtomicU64, Ordering};
|
|
|
|
use assert_cmd::Command;
|
|
use predicates::prelude::*;
|
|
|
|
fn cargo_command() -> Command {
|
|
Command::cargo_bin("envdiff").expect("binary")
|
|
}
|
|
|
|
struct TempTestDir {
|
|
path: PathBuf,
|
|
}
|
|
|
|
impl TempTestDir {
|
|
fn path(&self) -> &std::path::Path {
|
|
&self.path
|
|
}
|
|
}
|
|
|
|
impl Drop for TempTestDir {
|
|
fn drop(&mut self) {
|
|
let _ = fs::remove_dir_all(&self.path);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn runs_cmd_and_reports_environment_diff_as_json() {
|
|
let temp = unique_temp_dir();
|
|
let script = temp.path().join("mutate.cmd");
|
|
fs::write(
|
|
&script,
|
|
"@echo off\r\nset TEST_FLAG=enabled\r\nset PATH=%PATH%;C:\\Mercury\\Bin\r\n",
|
|
)
|
|
.expect("script");
|
|
|
|
let mut command = cargo_command();
|
|
command
|
|
.arg("run")
|
|
.arg("--json")
|
|
.arg("--shell")
|
|
.arg("cmd")
|
|
.arg("--")
|
|
.arg(&script)
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("\"added\""))
|
|
.stdout(predicate::str::contains("\"name\":\"TEST_FLAG\""))
|
|
.stdout(predicate::str::contains("\"path_like_changes\""));
|
|
}
|
|
|
|
#[test]
|
|
fn help_includes_envdiff_examples() {
|
|
let mut command = cargo_command();
|
|
command
|
|
.arg("--help")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("snapshot"))
|
|
.stdout(predicate::str::contains("run --shell cmd"))
|
|
.stdout(predicate::str::contains("ConvertFrom-Json"));
|
|
}
|
|
|
|
fn unique_temp_dir() -> TempTestDir {
|
|
static NEXT_ID: AtomicU64 = AtomicU64::new(0);
|
|
|
|
loop {
|
|
let unique = NEXT_ID.fetch_add(1, Ordering::Relaxed);
|
|
let path =
|
|
std::env::temp_dir().join(format!("envdiff-test-{}-{unique}", std::process::id()));
|
|
match fs::create_dir(&path) {
|
|
Ok(()) => return TempTestDir { path },
|
|
Err(error) if error.kind() == std::io::ErrorKind::AlreadyExists => {}
|
|
Err(error) => panic!("tempdir: {error}"),
|
|
}
|
|
}
|
|
}
|