Correct excluded-projection fixture and separate routing guide steps

This commit is contained in:
2026-09-24 19:10:07 -07:00
parent 3dfbe1959d
commit 6c44a2d6a1
2 changed files with 39 additions and 12 deletions
+35 -10
View File
@@ -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"
);
}