use serde_json::json;
use super::{ANSWER, CALL, RESTORE, REVOKE, SCOPES, VERDICTS, answer, restore, revoke};
use crate::verbs::find;
#[test]
fn each_door_builds_the_envelope_the_wire_requires() {
assert_eq!(
answer("home".to_owned(), "c-1".to_owned(), "pass".to_owned(), None),
json!({"op": "answer", "workspace": "home", "agent": "c-1", "verdict": "pass",
"scope": "call"})
);
assert_eq!(
revoke("home".to_owned(), "c-1".to_owned()),
json!({"op": "revoke", "workspace": "home", "agent": "c-1"})
);
assert_eq!(
restore("home".to_owned(), "c-1".to_owned()),
json!({"op": "restore", "workspace": "home", "agent": "c-1"})
);
}
#[test]
fn all_three_are_rows_in_the_one_table() {
for verb in [ANSWER, REVOKE, RESTORE] {
assert_eq!(find(verb.word), Some(verb), "{}", verb.word);
}
}
#[test]
fn the_verdicts_are_the_wires_own_words() {
assert_eq!(VERDICTS, ["pass", "refuse", "hold"]);
for word in VERDICTS {
let built = answer("home".to_owned(), "c-1".to_owned(), word.to_owned(), None);
assert_eq!(built["verdict"], word);
}
}
#[test]
fn every_answer_states_its_reach_and_an_untyped_one_states_the_narrow_word() {
assert_eq!(SCOPES, ["call", "conversation", "workspace"]);
assert_eq!(SCOPES[0], CALL);
let unstated = answer("home".to_owned(), "c-1".to_owned(), "pass".to_owned(), None);
assert_eq!(unstated["scope"], CALL);
for scope in SCOPES {
let built = answer(
"home".to_owned(),
"c-1".to_owned(),
"pass".to_owned(),
Some(scope.to_owned()),
);
assert_eq!(built["scope"], scope);
}
}