use super::conversations;
use crate::reply::convs::{AgentState, ConvRow, Tone};
fn row(display: &str, depth: u64, members: u64) -> ConvRow {
ConvRow {
root_id: format!("c-{display}"),
display: display.to_owned(),
name: Some(display.to_owned()),
state: AgentState::Quiescent,
uncertain: false,
preview: String::new(),
age_secs: 9,
attention: 0,
members,
depth,
tone: Tone::Plain,
failure: None,
}
}
#[test]
fn a_subtree_is_named_under_its_root_rather_than_listed_beside_it() {
let said = conversations(&[
row("rsroman", 0, 4),
row("TrellisCopper", 1, 1),
row("ShoalTeacup", 1, 1),
row("FrostyHillside", 1, 1),
row("ballfix", 0, 1),
]);
let rows: Vec<&str> = said
.lines()
.filter(|line| line.contains("quiescent"))
.collect();
assert_eq!(rows.len(), 2, "two roots, not five rows: {said}");
assert!(
said.contains("3 under it: TrellisCopper, ShoalTeacup, FrostyHillside"),
"{said}"
);
assert!(said.contains("4 members"), "{said}");
}
#[test]
fn a_root_standing_alone_gains_no_line() {
let said = conversations(&[row("ballfix", 0, 1)]);
assert!(!said.contains("under it"), "{said}");
}
#[test]
fn a_descendant_with_no_root_above_it_is_still_printed() {
let said = conversations(&[row("brave-fox", 2, 3), row("ballfix", 0, 1)]);
assert!(said.contains("brave-fox"), "{said}");
assert!(said.contains("2 deep"), "{said}");
assert!(!said.contains("under it"), "{said}");
}
#[test]
fn a_wide_subtree_is_elided_on_one_line() {
let mut rows = vec![row("spread", 0, 13)];
for n in 0..12 {
rows.push(row(&format!("candidate-number-{n}"), 1, 1));
}
let said = conversations(&rows);
assert!(said.contains("12 under it:"), "{said}");
assert!(said.contains('…'), "the elision is marked: {said}");
assert_eq!(
said.lines()
.filter(|line| line.contains("under it"))
.count(),
1,
"{said}"
);
}