use super::*;
use crate::control::judge::Ruling;
#[test]
fn every_verdict_round_trips_and_the_id_is_never_on_the_wire() {
for ruling in [Ruling::Pass, Ruling::Hold, Ruling::Refuse] {
let gesture = Gesture::Act(Action::AnswerHold {
workspace: "ws".into(),
agent: "c-1".into(),
ruling,
});
rt(gesture.clone());
let envelope = encode(&gesture).to_string();
assert!(!envelope.contains("tool_use"), "{envelope}");
}
}
#[test]
fn an_unknown_verdict_is_refused() {
let refused = decode(&serde_json::json!({
"op": "answer", "workspace": "/ws", "agent": "c-1", "verdict": "maybe"
}));
assert_eq!(
refused,
Err("answer: unknown verdict \"maybe\"; say pass, hold or refuse".to_owned())
);
assert!(decode(&serde_json::json!({ "op": "answer", "agent": "c-1" })).is_err());
assert!(decode(&serde_json::json!({ "op": "answer", "workspace": "/ws" })).is_err());
}
#[test]
fn the_floor_round_trips_in_both_directions() {
for raised in [true, false] {
let gesture = Gesture::Act(Action::Floor {
workspace: "ws".into(),
agent: "c-1".into(),
raised,
});
rt(gesture.clone());
let envelope = encode(&gesture).to_string();
let op = if raised { "revoke" } else { "restore" };
assert!(envelope.contains(op), "{envelope}");
assert!(!envelope.contains("raised"), "{envelope}");
}
assert!(decode(&serde_json::json!({ "op": "revoke", "agent": "c-1" })).is_err());
assert!(decode(&serde_json::json!({ "op": "restore", "workspace": "/ws" })).is_err());
}