use assert_cmd::Command;
use predicates::prelude::*;
fn net_mesh() -> Command {
Command::cargo_bin("net-mesh").expect("net-mesh binary")
}
const CAP: &str = "homelab/github.create_issue";
#[test]
fn pin_approve_then_list_then_reject_round_trips() {
let dir = tempfile::tempdir().expect("tempdir");
let store = dir.path().join("pins.json");
net_mesh()
.args([
"mcp",
"pin",
"approve",
CAP,
"--output",
"json",
"--pin-store",
])
.arg(&store)
.assert()
.success()
.stdout(predicate::str::contains(CAP))
.stdout(predicate::str::contains("approved"));
net_mesh()
.args(["mcp", "pin", "list", "--output", "json", "--pin-store"])
.arg(&store)
.assert()
.success()
.stdout(predicate::str::contains(CAP))
.stdout(predicate::str::contains("approved"));
net_mesh()
.args([
"mcp",
"pin",
"reject",
CAP,
"--output",
"json",
"--pin-store",
])
.arg(&store)
.assert()
.success()
.stdout(predicate::str::contains("rejected"));
net_mesh()
.args(["mcp", "pin", "list", "--output", "json", "--pin-store"])
.arg(&store)
.assert()
.success()
.stdout(predicate::str::contains(CAP).not());
}
#[test]
fn pin_approve_rejects_a_malformed_cap_id() {
let dir = tempfile::tempdir().expect("tempdir");
let store = dir.path().join("pins.json");
net_mesh()
.args(["mcp", "pin", "approve", "bareword", "--pin-store"])
.arg(&store)
.assert()
.failure();
}