use super::super::{ELSEWHERE, KEPT};
use super::{CA, CERT, KEY, acted, as_form, minted, spent, tree};
use crate::cli::Stream;
use crate::render::Form;
use crate::test_support::{Scratch, wire};
#[test]
fn the_symbol_and_the_line_it_encodes_are_both_said() {
let (verdict, ..) = spent(vec![minted()]);
assert_eq!(verdict.stream, Stream::Out);
assert_eq!(verdict.code, 0, "{}", verdict.text);
let envelope = crate::reply::enrolled::Enrolled {
grade: "foot".to_owned(),
name: "phone-1".to_owned(),
address: "engine.invalid:7737".to_owned(),
ca: CA.to_owned(),
cert: CERT.to_owned(),
key: KEY.to_owned(),
}
.envelope();
assert!(envelope.contains(r#""yog-enroll":1"#), "{envelope}");
for absent in [r#""ok""#, r#""kind""#] {
assert!(!envelope.contains(absent), "{absent} travelled: {envelope}");
}
assert!(
verdict.text.contains(&envelope),
"the envelope was not said:\n{}",
verdict.text
);
assert!(
verdict.text.lines().any(|line| line == envelope),
"the envelope was said across more than one line"
);
assert!(verdict.text.contains("phone-1"), "{}", verdict.text);
assert!(
verdict.text.contains("engine.invalid:7737"),
"{}",
verdict.text
);
assert!(verdict.text.contains(KEPT), "{}", verdict.text);
assert!(
verdict.text.contains('\u{2588}') || verdict.text.contains('\u{2580}'),
"no symbol was drawn:\n{}",
verdict.text
);
}
#[test]
fn a_named_destination_gets_the_four_files_and_the_material_is_not_said() {
let scratch = Scratch::new();
let _engine = wire::wired(&scratch, &wire::flat(), vec![vec![minted()]]);
let into = scratch.path().join("carry");
let (verdict, _) = acted(
scratch.path(),
"phone-1",
"foot",
None,
Some(&into),
Form::Rendered,
);
assert_eq!(verdict.code, 0, "{}", verdict.text);
assert_eq!(verdict.stream, Stream::Out);
assert!(
verdict.text.contains("filed as an entry"),
"{}",
verdict.text
);
assert_eq!(
tree(&into),
vec![
format!("address ({})", "engine.invalid:7737\n".len()),
format!("ca.pem ({})", CA.len()),
format!("client.key ({})", KEY.len()),
format!("client.pem ({})", CERT.len()),
]
);
for withheld in [KEY, "notreal-key", "-----BEGIN", "yog-enroll"] {
assert!(
!verdict.text.contains(withheld),
"{withheld:?} reached stdout after the material was filed:\n{}",
verdict.text
);
}
for glyph in ['\u{2588}', '\u{2580}'] {
assert!(
!verdict.text.contains(glyph),
"the symbol was drawn beside the files:\n{}",
verdict.text
);
}
assert!(verdict.text.contains("phone-1"), "{}", verdict.text);
assert!(verdict.text.contains(ELSEWHERE), "{}", verdict.text);
assert!(!verdict.text.contains(KEPT), "{}", verdict.text);
}
#[test]
fn the_act_writes_no_file_at_all() {
let (verdict, before, after) = spent(vec![minted()]);
assert_eq!(verdict.code, 0, "{}", verdict.text);
assert_eq!(before, after, "the enrollment left something on the disk");
}
#[test]
fn the_gesture_that_crossed_is_the_verb_table_s_own() {
let scratch = Scratch::new();
let engine = wire::wired(&scratch, &wire::flat(), vec![vec![minted()]]);
let _ = acted(
scratch.path(),
"phone-1",
"foot",
None,
None,
Form::Rendered,
);
let heard = engine.heard();
let request = heard.last().expect("the engine was handed a request");
assert_eq!(
request,
&crate::verbs::enroll(
"home".to_owned(),
"phone-1".to_owned(),
"foot".to_owned(),
None,
)
);
}
#[test]
fn a_stated_route_crosses_as_the_enrollment_s_address() {
let scratch = Scratch::new();
let engine = wire::wired(&scratch, &wire::flat(), vec![vec![minted()]]);
let (verdict, _) = acted(
scratch.path(),
"phone-1",
"foot",
Some("host.containers.internal:7773".to_owned()),
None,
Form::Rendered,
);
assert_eq!(verdict.code, 0, "{}", verdict.text);
let heard = engine.heard();
let request = heard.last().expect("the engine was handed a request");
assert_eq!(
request.get(crate::verbs::ADDRESS),
Some(&serde_json::Value::String(
"host.containers.internal:7773".to_owned()
)),
"{request}"
);
}
#[test]
fn the_machine_form_is_the_envelope_alone() {
let (verdict, warned) = as_form(None, Form::Json);
assert_eq!(verdict.code, 0, "{}", verdict.text);
assert_eq!(verdict.stream, Stream::Out);
assert!(warned.is_empty(), "{warned:?}");
let parsed: serde_json::Value =
serde_json::from_str(&verdict.text).expect("the whole of stdout parses as the envelope");
assert_eq!(
parsed.get("yog-enroll").and_then(serde_json::Value::as_u64),
Some(1)
);
assert_eq!(verdict.text.lines().count(), 1, "{}", verdict.text);
for absent in ["\u{2588}", "\u{2580}", "\u{1b}[", KEPT, " — foot at "] {
assert!(
!verdict.text.contains(absent),
"{absent:?} reached the frame stream: {}",
verdict.text
);
}
}
#[test]
fn a_machine_form_that_filed_says_nothing_on_stdout() {
let scratch = Scratch::new();
let _engine = wire::wired(&scratch, &wire::flat(), vec![vec![minted()]]);
let into = scratch.path().join("carry");
let (verdict, warned) = acted(
scratch.path(),
"phone-1",
"foot",
None,
Some(&into),
Form::Json,
);
assert_eq!(verdict.code, 0, "{}", verdict.text);
assert_eq!(verdict.text, "", "{}", verdict.text);
assert_eq!(tree(&into).len(), 4, "the four files were still laid down");
let told = warned.concat();
assert!(told.contains("filed as an entry"), "{told}");
assert!(told.contains(ELSEWHERE), "{told}");
assert!(
!told.contains("yog-enroll"),
"the material was said: {told}"
);
}
#[test]
fn a_refused_destination_leaves_the_machine_form_intact() {
let scratch = Scratch::new();
let _engine = wire::wired(&scratch, &wire::flat(), vec![vec![minted()]]);
let blocked = scratch.path().join("occupied");
std::fs::write(&blocked, "notreal").expect("the blocker was written");
let (verdict, warned) = acted(
scratch.path(),
"phone-1",
"foot",
None,
Some(&blocked.join("under")),
Form::Json,
);
assert_eq!(verdict.code, 1, "{}", verdict.text);
assert_eq!(verdict.stream, Stream::Out);
assert_eq!(verdict.text.lines().count(), 1, "{}", verdict.text);
assert!(verdict.text.contains("yog-enroll"), "{}", verdict.text);
assert!(warned.concat().contains("not filed"), "{warned:?}");
}