use super::{NOT_ANSWERED, costing, named};
use crate::reply::transcript::{Block, Entry, EntryKind, Transcript, Usage};
use crate::test_support::window::{pane, seated};
use crate::ui::Model;
fn answered(model: &str) -> Transcript {
Transcript {
entries: vec![
Entry {
name: "003-model.json".to_owned(),
raw: "{}".to_owned(),
kind: EntryKind::Model {
model_id: model.to_owned(),
blocks: vec![Block::Text("done".to_owned())],
usage: Usage::new(),
},
},
crate::test_support::window::said("op", "and again"),
],
}
}
fn row() -> crate::reply::agent::Agent {
crate::test_support::window::own_row()
}
#[test]
fn the_line_names_the_conversation_and_says_how_it_is_resting() {
let mut row = row();
row.display = "ZucchiniFrost".to_owned();
row.state = crate::reply::convs::AgentState::Stopped;
row.refused = false;
assert_eq!(
named(&row, &Transcript::default()),
"ZucchiniFrost — stopped"
);
row.refused = true;
assert_eq!(
named(&row, &Transcript::default()),
"ZucchiniFrost — stopped — the provider refused the latest turn"
);
}
#[test]
fn a_conversation_with_no_context_reading_says_which_model_answered_last() {
let mut row = row();
row.display = "ZucchiniFrost".to_owned();
row.state = crate::reply::convs::AgentState::Quiescent;
row.refused = false;
row.context = None;
assert_eq!(
named(&row, &answered("claude-sonnet-5")),
"ZucchiniFrost — quiescent — claude-sonnet-5"
);
let held = self::row();
assert!(!named(&held, &answered("claude-sonnet-5")).contains("claude-sonnet-5"));
assert_eq!(
named(&row, &Transcript::default()),
"ZucchiniFrost — quiescent"
);
}
#[test]
fn the_costing_line_carries_the_spend_and_the_model() {
let mut row = row();
row.spend.tokens.total = 5_089_466;
let said = costing(&row);
assert!(said.contains("5089466 tokens"), "{said}");
assert!(
said.contains(&row.context.expect("the fixture is in flight").model),
"{said}"
);
}
#[test]
fn the_pane_says_which_conversation_it_is_showing() {
let mut model = seated();
let mut row = row();
row.display = "ZucchiniFrost".to_owned();
row.state = crate::reply::convs::AgentState::Stopped;
row.refused = false;
row.spend.tokens.total = 5_089_466;
model.records.agent = Some(row);
let painted = pane(|ui| crate::ui::chat::render(ui, &model));
assert!(painted.contains("ZucchiniFrost — stopped"), "{painted}");
assert!(painted.contains("5089466 tokens"), "{painted}");
}
#[test]
fn a_failed_conversation_says_so_where_it_is_being_read() {
let mut model = seated();
let mut row = row();
row.failure = Some("no credential for provider row \"work\"".to_owned());
model.records.agent = Some(row);
let painted = pane(|ui| crate::ui::chat::render(ui, &model));
assert!(
painted.contains("no credential for provider row"),
"{painted}"
);
}
#[test]
fn a_conversation_nobody_has_been_answered_about_says_so() {
let model = Model {
records: crate::ui::Records::default(),
..seated()
};
let painted = pane(|ui| crate::ui::chat::render(ui, &model));
assert!(painted.contains(NOT_ANSWERED), "{painted}");
}