use super::{BINDINGS, CLOSE, HEADING, NOT_ANSWERED, NOTHING, OPEN};
use crate::paint_probe::frame::Window;
use crate::test_support::window::{boarded, click, own, painted, seated};
use crate::ui::{Bindings, Columns, Model};
#[test]
fn the_roster_s_control_opens_the_pane() {
let mut model = Model::default();
let window = Window::new();
click(&window, OPEN, |ctx| crate::ui::render(ctx, &mut model));
assert!(model.boarding(), "the control opened nothing");
let glass = painted(&mut model);
assert!(glass.contains(HEADING), "{glass}");
assert!(!glass.contains(OPEN), "{glass}");
}
#[test]
fn the_close_puts_the_pane_down() {
let mut model = boarded();
let window = Window::new();
click(&window, CLOSE, |ctx| crate::ui::render(ctx, &mut model));
assert!(!model.boarding());
}
#[test]
fn each_emptiness_says_which_one_it_is() {
let mut unheard = Model {
lookup: Some(crate::ui::Lookup::Board),
..Model::default()
};
let glass = painted(&mut unheard);
assert!(glass.contains(NOT_ANSWERED), "{glass}");
let mut quiet = Model {
lookup: Some(crate::ui::Lookup::Board),
columns: vec![Columns {
channel: own().channel,
board: crate::reply::board::Board {
rows: Vec::new(),
fleet: Vec::new(),
},
}],
bindings: vec![Bindings {
channel: own().channel,
rows: Vec::new(),
}],
..Model::default()
};
let glass = painted(&mut quiet);
assert!(glass.contains(NOTHING), "{glass}");
assert!(!glass.contains(NOT_ANSWERED), "{glass}");
}
#[test]
fn an_aimed_seat_waits_on_the_wall_and_on_the_channels_separately() {
let mut model = Model {
lookup: Some(crate::ui::Lookup::Board),
..seated()
};
let glass = painted(&mut model);
assert!(glass.contains(NOT_ANSWERED), "{glass}");
assert!(glass.contains(super::wall::NOT_ANSWERED), "{glass}");
assert!(!glass.contains(NOTHING), "{glass}");
}
#[test]
fn every_line_the_pane_paints_reaches_the_glass() {
let mut model = boarded();
let glass = painted(&mut model);
for said in [
"bl-1",
"claimed · bound",
"held by alba",
"under bl-epic",
"gated by bl-gate",
"worked by Cobalt",
"$1.50",
"under it",
"4/4 drones",
"ceiling: over budget",
BINDINGS,
"unheld",
"tracking tasks on balls/tasks",
"$2.50",
] {
assert!(glass.contains(said), "{said:?} is on no row: {glass}");
}
}
#[test]
fn a_channel_holding_nothing_gets_no_header() {
let mut model = boarded();
let quiet = crate::ui::Channel {
name: "elsewhere".to_owned(),
..own().channel
};
model.columns.push(Columns {
channel: quiet.clone(),
board: crate::reply::board::Board {
rows: Vec::new(),
fleet: Vec::new(),
},
});
model.bindings.push(Bindings {
channel: quiet,
rows: Vec::new(),
});
let glass = painted(&mut model);
assert!(!glass.contains("elsewhere"), "{glass}");
}
#[test]
fn a_channel_with_a_loop_and_no_rows_still_says_so() {
let mut model = boarded();
model.columns[0].board.rows.clear();
let glass = painted(&mut model);
assert!(glass.contains("4/4 drones"), "{glass}");
}