use crate::reply::{Read, Reply};
use crate::test_support::window::{attempt, diff, fleeting, own, seated};
use crate::ui::Model;
#[test]
fn the_pane_opens_only_on_an_aimed_wall_and_closes_again() {
let mut unaimed = Model::default();
unaimed.begin_fleet();
assert!(
unaimed.fleet.is_none(),
"a pane opened with nowhere to fire"
);
let mut model = seated();
model.begin_fleet();
assert!(model.fleet.is_some());
assert!(model.covered(), "the pane covers the conversation");
model.close_fleet();
assert!(model.fleet.is_none());
}
#[test]
fn the_cap_opens_at_one() {
let mut model = seated();
model.begin_fleet();
assert_eq!(model.fleet.as_ref().expect("open").cap, 1);
}
#[test]
fn the_shared_receipt_is_filed_under_the_op_that_earned_it() {
let mut model = fleeting();
model.receipt(&own().channel, "disarm", Read::Answer(Reply::Armed(false)));
let said = model
.fleet
.as_ref()
.and_then(|held| held.said.clone())
.expect("a receipt");
assert_eq!(said.op, "disarm");
assert!(!said.armed);
}
#[test]
fn an_unstamped_armed_frame_is_filed_under_no_name() {
let mut model = fleeting();
model.absorb(&own().channel, Read::Answer(Reply::Armed(true)));
assert_eq!(
model
.fleet
.as_ref()
.and_then(|held| held.said.clone())
.expect("a receipt")
.op,
""
);
}
#[test]
fn the_two_reads_are_filed_off_the_pane() {
let mut model = seated();
model.absorb(
&own().channel,
Read::Answer(Reply::Science(vec![attempt("bl-1", "pending")])),
);
model.absorb(
&own().channel,
Read::Answer(Reply::Work(vec![diff("bl-1", "unreadable")])),
);
assert_eq!(model.attempts.as_deref().expect("answered").len(), 1);
assert_eq!(model.work.as_deref().expect("answered").len(), 1);
}
#[test]
fn an_aim_retires_the_pane_and_both_its_answers() {
let mut model = fleeting();
model.select("c-2");
assert!(
model.fleet.is_some(),
"a selection retired a pane it is not about"
);
let aim = model.aim.clone().expect("the fixture is aimed");
model.aim_at(&aim.channel, &aim.address);
assert!(model.fleet.is_none());
assert!(model.attempts.is_none());
assert!(model.work.is_none());
}
#[test]
fn an_act_is_posted_as_one() {
let mut model = fleeting();
model.post_fleet(crate::verbs::disband("home".to_owned()));
let posted = model.outbox.first().expect("a gesture");
assert!(posted.act);
assert_eq!(posted.envelope["op"], "disband");
}