refactor: extract module_edges() to CodeGraph domain — removes duplication from Mermaid and D2 renderers
This commit is contained in:
@@ -299,3 +299,59 @@ fn graph_lists_unique_modules() {
|
||||
assert!(modules.iter().any(|m| m.as_str() == "Orders"));
|
||||
assert!(modules.iter().any(|m| m.as_str() == "Billing"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn module_edges_aggregates_type_level_relationships_into_module_pairs() {
|
||||
let mut graph = CodeGraph::new();
|
||||
graph.add_element(make_element("ServiceA", Some("App")));
|
||||
graph.add_element(make_element("ServiceB", Some("App")));
|
||||
graph.add_element(make_element("Order", Some("Domain")));
|
||||
graph.add_element(make_element("Product", Some("Domain")));
|
||||
|
||||
graph.add_relationship(
|
||||
Relationship::new("ServiceA", "Order", RelationshipKind::Composition).unwrap(),
|
||||
);
|
||||
graph.add_relationship(
|
||||
Relationship::new("ServiceB", "Product", RelationshipKind::Composition).unwrap(),
|
||||
);
|
||||
|
||||
let graph = graph.qualify();
|
||||
let edges = graph.module_edges();
|
||||
|
||||
assert_eq!(edges.len(), 1, "should have one cross-module edge pair");
|
||||
assert_eq!(edges[&("App".to_string(), "Domain".to_string())], 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn module_edges_handles_direct_module_to_module_relationships() {
|
||||
let mut graph = CodeGraph::new();
|
||||
graph.add_element(make_element("Order", Some("Domain")));
|
||||
graph.add_element(make_element("Service", Some("App")));
|
||||
// Direct module-name edge (injected by merge_project_deps)
|
||||
graph.add_relationship(
|
||||
Relationship::new("App", "Domain", RelationshipKind::Composition).unwrap(),
|
||||
);
|
||||
|
||||
let graph = graph.qualify();
|
||||
let edges = graph.module_edges();
|
||||
|
||||
assert!(
|
||||
edges.contains_key(&("App".to_string(), "Domain".to_string())),
|
||||
"direct module edge should appear: {edges:?}"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn module_edges_excludes_intra_module_relationships() {
|
||||
let mut graph = CodeGraph::new();
|
||||
graph.add_element(make_element("Service", Some("App")));
|
||||
graph.add_element(make_element("Helper", Some("App")));
|
||||
graph.add_relationship(
|
||||
Relationship::new("Service", "Helper", RelationshipKind::Composition).unwrap(),
|
||||
);
|
||||
|
||||
let graph = graph.qualify();
|
||||
let edges = graph.module_edges();
|
||||
|
||||
assert!(edges.is_empty(), "intra-module relationships should not produce edges");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user