use assert_cmd::prelude::*;
use std::process::Command;
use tempfile::TempDir;
fn bin() -> Command {
Command::cargo_bin("grex").expect("grex binary built")
}
const DEPRECATION_MARKER: &str = "--workspace is deprecated";
const PACK_HINT: &str = "--pack";
#[test]
fn cli_workspace_alias_emits_deprecation_warn() {
let tmp = TempDir::new().expect("tempdir");
let out = bin()
.arg("sync")
.arg(tmp.path())
.arg("--workspace")
.arg(tmp.path())
.arg("--dry-run")
.arg("--no-validate")
.output()
.expect("spawn grex sync");
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
stderr.contains(DEPRECATION_MARKER),
"stderr must contain `{DEPRECATION_MARKER}` when --workspace is used; got:\n---\n{stderr}\n---"
);
assert!(
stderr.contains(PACK_HINT),
"deprecation diagnostic must mention the canonical `--pack` flag; got:\n---\n{stderr}\n---"
);
}
#[test]
fn cli_pack_flag_does_not_emit_warn() {
let tmp = TempDir::new().expect("tempdir");
let out = bin()
.arg("sync")
.arg(tmp.path())
.arg("--pack")
.arg(tmp.path())
.arg("--dry-run")
.arg("--no-validate")
.output()
.expect("spawn grex sync --pack");
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
!stderr.contains(DEPRECATION_MARKER),
"stderr must NOT contain the deprecation marker when --pack is used; got:\n---\n{stderr}\n---"
);
}
#[test]
fn cli_workspace_alias_emits_deprecation_on_teardown() {
let tmp = TempDir::new().expect("tempdir");
let out = bin()
.arg("teardown")
.arg(tmp.path())
.arg("--workspace")
.arg(tmp.path())
.arg("--no-validate")
.output()
.expect("spawn grex teardown");
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
stderr.contains(DEPRECATION_MARKER),
"stderr must contain `{DEPRECATION_MARKER}` on teardown --workspace; got:\n---\n{stderr}\n---"
);
}