Correct excluded-projection fixture and separate routing guide steps
This commit is contained in:
@@ -977,30 +977,55 @@ fn layout_batch_uses_staged_visibility_and_one_final_validation_history_boundary
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn layout_outside_projection_routes_keep_overrides_and_normal_translation() {
|
||||
fn layout_outside_projection_routes_keep_overrides_and_inactive_owner_positions() {
|
||||
let mut f = fixture();
|
||||
f.project.diagrams.get_mut(&f.diagram).unwrap().projection = ProjectionKind::Decomposition;
|
||||
// Decomposition admits ordinary relations, including FunctionalExchange.
|
||||
// Capabilities explicitly excludes those edges and their Function owners;
|
||||
// retain their authored placements while arranging a real visible node.
|
||||
let capability = f
|
||||
.project
|
||||
.add_element(
|
||||
Kind::SystemCapability,
|
||||
Layer::Sa,
|
||||
"Visible capability",
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let capability_node = f
|
||||
.project
|
||||
.place(f.diagram, capability, Position { x: 100., y: 100. });
|
||||
f.project.diagrams.get_mut(&f.diagram).unwrap().projection = ProjectionKind::Capabilities;
|
||||
let base = execute_batch(&f.project, &[Command::Layout(f.diagram)]).unwrap();
|
||||
f.project = base.clone();
|
||||
shift_all(&mut f.project, f.diagram, 40., 60.);
|
||||
f.project.diagrams.get_mut(&f.diagram).unwrap().routes = vec![route(f.edge), route(f.external)];
|
||||
validate_candidate(&f.project).unwrap();
|
||||
let projected = projection::project_view(&f.project, f.diagram);
|
||||
assert_eq!(projected.nodes.len(), 1);
|
||||
assert_eq!(projected.nodes[0].id, capability_node);
|
||||
assert!(
|
||||
projection::project_view(&f.project, f.diagram)
|
||||
projected
|
||||
.edges
|
||||
.iter()
|
||||
.all(|edge| edge.id != f.edge && edge.id != f.external)
|
||||
);
|
||||
let mut expected = f.project.clone();
|
||||
expected.diagrams.get_mut(&f.diagram).unwrap().nodes.insert(
|
||||
capability_node,
|
||||
base.diagrams[&f.diagram].nodes[&capability_node].clone(),
|
||||
);
|
||||
let after = execute_batch(&f.project, &[Command::Layout(f.diagram)]).unwrap();
|
||||
assert_eq!(
|
||||
after.diagrams[&f.diagram].nodes,
|
||||
base.diagrams[&f.diagram].nodes
|
||||
assert_ne!(
|
||||
after.diagrams[&f.diagram].nodes[&capability_node].position,
|
||||
f.project.diagrams[&f.diagram].nodes[&capability_node].position
|
||||
);
|
||||
assert_eq!(
|
||||
after.diagrams[&f.diagram].routes,
|
||||
vec![
|
||||
translated_expected(route(f.edge), -40., -60.),
|
||||
translated_expected(route(f.external), -40., -60.)
|
||||
]
|
||||
vec![route(f.edge), route(f.external)]
|
||||
);
|
||||
assert_eq!(
|
||||
after, expected,
|
||||
"Owners excluded by the projection receive no Layout delta; their pins stay fixed"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user