use assert_cmd::Command;
use predicates::prelude::*;
fn tsafe() -> Command {
Command::cargo_bin("tsafe").unwrap()
}
#[test]
fn ns_copy_duplicates_prefix() {
let dir = tempfile::tempdir().unwrap();
tsafe()
.args(["init"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success();
for kv in [
("prod/API_KEY", "secret-a"),
("prod/DB_URL", "postgres://x"),
] {
tsafe()
.args(["set", kv.0, kv.1])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success();
}
tsafe()
.args(["ns", "copy", "prod", "staging"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success()
.stdout(predicate::str::contains("Copied 2 key"));
tsafe()
.args(["get", "prod/API_KEY"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success()
.stdout(predicate::str::contains("secret-a"));
tsafe()
.args(["get", "staging/API_KEY"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success()
.stdout(predicate::str::contains("secret-a"));
}
#[test]
fn ns_copy_conflict_without_force() {
let dir = tempfile::tempdir().unwrap();
tsafe()
.args(["init"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success();
tsafe()
.args(["set", "prod/K", "a"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success();
tsafe()
.args(["set", "staging/K", "b"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success();
tsafe()
.args(["ns", "copy", "prod", "staging"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.failure()
.stderr(predicate::str::contains("already exists"));
}
#[test]
fn ns_move_removes_source() {
let dir = tempfile::tempdir().unwrap();
tsafe()
.args(["init"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success();
tsafe()
.args(["set", "old/X", "vx"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success();
tsafe()
.args(["ns", "move", "old", "new"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success()
.stdout(predicate::str::contains("Moved 1 key"));
tsafe()
.args(["get", "new/X"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.success()
.stdout(predicate::str::contains("vx"));
tsafe()
.args(["get", "old/X"])
.env("TSAFE_VAULT_DIR", dir.path())
.env("TSAFE_PASSWORD", "test-pw")
.assert()
.failure();
}