use assert_cmd::Command;
use predicates::prelude::*;
use tempfile::tempdir;
fn sdkt(dir: &std::path::Path) -> Command {
let mut cmd = Command::cargo_bin("sdkt").unwrap();
cmd.env("SDKT_IDENTITY_DIR", dir.join("identity"));
cmd
}
#[test]
fn test_cli_identity_lifecycle() {
let dir = tempdir().unwrap();
sdkt(dir.path())
.args(["identity", "generate", "alice"])
.assert()
.success()
.stdout(predicates::str::contains("generated successfully"));
sdkt(dir.path())
.args(["identity", "show", "alice"])
.assert()
.success()
.stdout(predicates::str::contains("Public Key: G"));
sdkt(dir.path())
.args(["identity", "list"])
.assert()
.success()
.stdout(predicates::str::contains("alice"));
sdkt(dir.path())
.args(["identity", "default", "alice"])
.assert()
.success()
.stdout(predicates::str::contains("set as default"));
sdkt(dir.path())
.args(["identity", "delete", "alice"])
.assert()
.success()
.stdout(predicates::str::contains("removed"));
}
#[test]
fn test_cli_identity_delete_missing_errors() {
let dir = tempdir().unwrap();
sdkt(dir.path())
.args(["identity", "generate", "alice"])
.assert()
.success();
sdkt(dir.path())
.args(["identity", "delete", "alice"])
.assert()
.success()
.stdout(predicate::str::contains("Identity 'alice' removed."));
sdkt(dir.path())
.args(["identity", "delete", "alice"])
.assert()
.failure()
.stderr(predicate::str::contains("Identity 'alice' not found"))
.stdout(predicate::str::contains("removed").not());
}