use super::*;
use oa_core::view_options::{ExchangeLabels, RelationKinds};
#[test]
fn communication_svg_uses_saved_visibility_labels_and_direction() {
let mut p = Project::empty();
let a = p
.add_element(Kind::Entity, Layer::Oa, "Crew", None)
.unwrap();
let b = p
.add_element(Kind::Actor, Layer::Oa, "Station", None)
.unwrap();
let item = p
.add_element(Kind::ExchangeItem, Layer::Oa, "Data & status", None)
.unwrap();
let edge = p.relate(RelationKind::CommunicationMean, "Radio ", a, b);
let RelationBody::CommunicationMean { items, .. } =
&mut p.relations.get_mut(&edge).unwrap().body
else {
unreachable!()
};
items.push(item);
let diagram = p.ensure_diagram(Layer::Oa);
p.diagrams.get_mut(&diagram).unwrap().projection = ProjectionKind::Overview;
p.place(diagram, a, Position { x: 50., y: 80. });
p.place(diagram, b, Position { x: 650., y: 80. });
validate_candidate(&p).unwrap();
let initial = p.clone();
let path_key = format!("")
.next()
.unwrap();
assert!(!edge_path.contains("marker-end"));
assert!(svg.contains("Radio <link>"));
assert_eq!(
p, initial,
"Export must not author presentation or model changes"
);
p.diagrams
.get_mut(&diagram)
.unwrap()
.view_options
.exchange_labels = ExchangeLabels::Items;
let items_svg = export_svg(&p, diagram);
assert!(items_svg.contains("Data & status"));
let RelationBody::CommunicationMean { oriented, .. } =
&mut p.relations.get_mut(&edge).unwrap().body
else {
unreachable!()
};
*oriented = true;
let svg = export_svg(&p, diagram);
assert!(
svg.split(&path_key)
.nth(1)
.unwrap()
.split("")
.next()
.unwrap()
.contains("marker-end")
);
let placements = p.diagrams[&diagram].nodes.clone();
p.diagrams
.get_mut(&diagram)
.unwrap()
.view_options
.hidden_edges
.push(edge);
assert!(!export_svg(&p, diagram).contains(&path_key));
p.diagrams
.get_mut(&diagram)
.unwrap()
.view_options
.hidden_edges
.clear();
p.diagrams
.get_mut(&diagram)
.unwrap()
.view_options
.relation_kinds = RelationKinds::Only(vec![]);
assert!(!export_svg(&p, diagram).contains(&path_key));
assert_eq!(p.diagrams[&diagram].nodes, placements);
assert_eq!(language::parse(&language::format(&p)).unwrap(), p);
}