facett-brokkrview/tests/flow_lane.rs
use egui::{pos2, vec2};
use egui_kittest::{Harness, kittest::Queryable};
use facett_brokkrview::{BrokkrView, BrokkrViewMsg, FinishedRun, ViewMode};
use facett_core::{Elm, Facet};
#[test]
fn status_updates_and_camera_keep_geometry_and_original_dag_json() {
let mut v = BrokkrView::demo("Brokkr");
let generation = v.scene_generation();
let dag = v.state_json()["dag"].clone();
v.update(BrokkrViewMsg::Pan(vec2(25.0, 10.0)));
v.update(BrokkrViewMsg::Zoom {
factor: 1.5,
anchor: pos2(60.0, 60.0),
});
assert_eq!(v.scene_generation(), generation);
assert_eq!(v.state_json()["dag"], dag);
let run: FinishedRun = serde_json::from_value(serde_json::json!({
"run_id":"failed-run", "pipeline":"nornir-ci", "status":"failed", "steps":{"compile":"failed"}
})).unwrap();
v.update(BrokkrViewMsg::RunFinished(run));
assert_eq!(v.scene_generation(), generation);
assert_eq!(v.state_json()["dag"]["all_green"], false);
assert_eq!(v.state_json()["nav"]["scale"], 1.5);
}
#[test]
fn accessible_dag_node_selects_and_camera_fits() {
let mut v = BrokkrView::demo("Brokkr");
v.update(BrokkrViewMsg::SetView(ViewMode::Dag));
let mut h = Harness::builder()
.with_size(vec2(900.0, 600.0))
.build_ui_state(|ui, v: &mut BrokkrView| Facet::ui(v, ui), v);
h.run();
assert!(h.state().state_json()["fitted"].as_bool().unwrap());
let label = h
.state()
.model()
.dag
.nodes
.iter()
.find(|n| n.step == "compile")
.map(|n| match &n.disposition {
Some(d) => format!("{} · {} · {} · {}", n.step, n.stage, n.status, d),
None => format!("{} · {} · {}", n.step, n.stage, n.status),
})
.unwrap();
h.get_by_label(&label).click();
h.run();
assert_eq!(h.state().state_json()["selected_step"], "compile");
}