use super::super::{Row, rows};
use super::of;
use crate::reply::transcript::{Block, EntryKind, Transcript, Usage};
use crate::test_support::window::said;
use crate::ui::theme::Speaker;
#[test]
fn a_delivered_message_names_its_sender_and_its_ending() {
assert_eq!(
rows(
&Transcript {
entries: vec![said("op", "port it")]
},
None
),
vec![
Row::plain("op".to_owned(), "port it".to_owned(), Speaker::Operator,).from("001-op.md")
]
);
let ended = of(EntryKind::Delivered {
sender: "child".to_owned(),
sender_name: None,
epitaph: Some("delivered".to_owned()),
body: "landed".to_owned(),
});
assert_eq!(rows(&ended, None)[0].who, "child (delivered)");
}
#[test]
fn a_model_turn_becomes_one_row_per_block() {
let turn = of(EntryKind::Model {
model_id: "model-a".to_owned(),
blocks: vec![
Block::Thinking("weighing two seams".to_owned()),
Block::Text("the seam is real".to_owned()),
Block::ToolUse {
id: "tu-1".to_owned(),
name: "read".to_owned(),
input: "src/ui.rs".to_owned(),
},
Block::Unknown("citation".to_owned()),
],
usage: Usage::new(),
});
let who: Vec<String> = rows(&turn, None).into_iter().map(|r| r.who).collect();
assert_eq!(
who,
vec![
"model-a (thinking)",
"model-a",
"read(src/ui.rs)",
"model-a (citation, which this version of lernie cannot read)",
]
);
}
#[test]
fn a_tool_result_says_whether_it_failed() {
for (is_error, word) in [(false, "returned"), (true, "failed")] {
let entry = of(EntryKind::ToolResult {
tool_use_id: "tu-1".to_owned(),
content: "done".to_owned(),
is_error,
});
assert_eq!(rows(&entry, None)[0].who, word);
}
}