use serde_json::json;
use super::{Form, rendered, said};
use crate::test_support::corpus;
mod shapes;
#[test]
fn every_answer_in_the_corpus_renders_as_something_other_than_its_frame() {
let mut seen = 0;
for path in corpus::files("answers") {
for frame in corpus::fixture(&path).frames {
let said = rendered(&frame);
assert!(
!said.trim().is_empty(),
"{}: rendered to nothing",
path.display()
);
assert!(
!said.trim_start().starts_with('{'),
"{}: rendered as its own frame — {said}",
path.display()
);
assert!(
!said.contains("cannot read that answer"),
"{}: {said}",
path.display()
);
seen += 1;
}
}
assert!(seen > 30, "the corpus walk found {seen} answers");
}
#[test]
fn a_refusal_is_the_engines_words_and_an_unreadable_frame_names_the_escape() {
assert_eq!(
rendered(&json!({"ok": false, "error": "unknown workspace \"hoem\""})),
"refused: unknown workspace \"hoem\""
);
let said = rendered(&json!({"ok": true, "kind": "a-kind-from-2027"}));
assert!(said.contains("a-kind-from-2027"), "{said}");
assert!(said.contains("--json"), "{said}");
}
#[test]
fn the_json_form_is_the_frames_exactly_as_they_crossed() {
let frames = vec![
json!({"ok": true, "kind": "nudged"}),
json!({"ok": true, "kind": "flagged"}),
];
assert_eq!(
said(&frames, Form::Json),
"{\"kind\":\"nudged\",\"ok\":true}\n{\"kind\":\"flagged\",\"ok\":true}"
);
assert_eq!(
said(&frames, Form::Rendered),
"nudged — the advance is running\nflagged — it is on the queue now"
);
assert_eq!(Form::default(), Form::Rendered);
}
#[test]
fn an_empty_roster_names_the_act_that_founds_the_first_wall() {
let said = rendered(&json!({"ok": true, "kind": "workspaces", "rows": []}));
assert!(said.contains("lernie start home"), "{said}");
let queue = rendered(&json!({"ok": true, "kind": "attention", "rows": []}));
assert!(queue.contains("nothing is waiting on you"), "{queue}");
}
#[test]
fn a_transcript_prints_what_was_said_and_not_the_raw_bytes_beside_it() {
let frame = json!({"ok": true, "kind": "transcript", "rows": [
{"name": "001-user.md", "raw": "---\nfrom: user\n---\nship it",
"kind": "delivered", "sender": "user", "body": "ship it"}
]});
let said = rendered(&frame);
assert!(said.contains("001-user.md"), "{said}");
assert!(said.contains("from user"), "{said}");
assert!(said.contains("ship it"), "{said}");
assert!(!said.contains("---"), "the raw bytes are printed: {said}");
}