use crate::test_support::window::{drilled, recorded, seated};
use crate::ui::Model;
use serde_json::json;
#[test]
fn asking_for_a_step_posts_a_read_carrying_its_seq() {
let mut model = recorded();
model.ask_step("002");
assert_eq!(
model.outbox,
vec![crate::ui::Posted::read(json!({
"op": "step", "workspace": "home",
"agent": "20260830T051200Z-a1b2", "seq": "002"
}))]
);
}
#[test]
fn asking_with_no_subject_composes_nothing() {
let mut nowhere = Model::default();
nowhere.ask_step("001");
assert!(nowhere.outbox.is_empty(), "nothing is aimed at");
let mut unselected = Model {
conversation: None,
..seated()
};
unselected.ask_step("001");
assert!(unselected.outbox.is_empty(), "nothing is selected");
}
#[test]
fn the_drill_in_belongs_to_the_row_the_answer_names() {
let mut model = recorded();
model.records.drilled = Some(drilled("002"));
assert_eq!(model.drilled_into("002"), Some(drilled("002")));
assert_eq!(model.drilled_into("001"), None, "another row's records");
model.records.drilled = None;
assert_eq!(model.drilled_into("002"), None);
}
#[test]
fn moving_the_selection_takes_all_three_deeper_answers() {
let mut model = recorded();
model.records.drilled = Some(drilled("001"));
model.select("some-other-conversation");
assert!(model.records.agent.is_none());
assert!(model.records.mail.is_none());
assert!(model.records.drilled.is_none());
}
#[test]
fn the_deeper_three_are_filed_by_the_one_door() {
let answered = recorded();
let mut model = seated();
let channel = crate::test_support::window::own().channel;
model.absorb(
&channel,
crate::reply::Read::Answer(crate::reply::Reply::Agent(Box::new(
answered
.records
.agent
.clone()
.expect("the fixture answers a row"),
))),
);
model.absorb(
&channel,
crate::reply::Read::Answer(crate::reply::Reply::Inbox(
answered.records.mail.clone().expect("and its mail"),
)),
);
model.absorb(
&channel,
crate::reply::Read::Answer(crate::reply::Reply::Step(Box::new(drilled("001")))),
);
assert_eq!(model.records.agent, answered.records.agent);
assert_eq!(model.records.mail, answered.records.mail);
assert_eq!(model.records.drilled, Some(drilled("001")));
}