use nusy_codegraph::ingest::ingest_directory;
use nusy_codegraph::schema::CodeEdgePredicate;
use std::path::PathBuf;
fn codegraph_crate_root() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
}
#[test]
fn test_cross_file_imports_resolved() {
let result = ingest_directory(&codegraph_crate_root()).expect("ingest");
let import_edges: Vec<_> = result
.edges
.iter()
.filter(|e| e.predicate == CodeEdgePredicate::Imports)
.collect();
assert!(
!import_edges.is_empty(),
"should have import edges from cross-file use statements"
);
let internal_imports = import_edges
.iter()
.filter(|e| !e.target_id.starts_with("ext:"))
.count();
assert!(
internal_imports > 0,
"at least some imports should resolve to internal nodes, got 0 out of {} total",
import_edges.len()
);
}
#[test]
fn test_impl_trait_edges_extracted() {
let result = ingest_directory(&codegraph_crate_root()).expect("ingest");
let impl_edges: Vec<_> = result
.edges
.iter()
.filter(|e| e.predicate == CodeEdgePredicate::ImplementsTrait)
.collect();
assert!(
!impl_edges.is_empty(),
"should extract ImplementsTrait edges from impl blocks"
);
}
#[test]
fn test_contains_edges_from_parent_id() {
let result = ingest_directory(&codegraph_crate_root()).expect("ingest");
let contains_edges: Vec<_> = result
.edges
.iter()
.filter(|e| e.predicate == CodeEdgePredicate::Contains)
.collect();
assert!(
contains_edges.len() > 50,
"should have many Contains edges, got {}",
contains_edges.len()
);
}
#[test]
fn test_edge_predicate_variants_used() {
let result = ingest_directory(&codegraph_crate_root()).expect("ingest");
let predicates: std::collections::HashSet<CodeEdgePredicate> =
result.edges.iter().map(|e| e.predicate).collect();
assert!(
predicates.contains(&CodeEdgePredicate::Contains),
"missing Contains edges"
);
assert!(
predicates.contains(&CodeEdgePredicate::Imports),
"missing Imports edges"
);
assert!(
predicates.contains(&CodeEdgePredicate::ImplementsTrait),
"missing ImplementsTrait edges"
);
}
#[test]
fn test_module_resolver_finds_crate_modules() {
let resolver =
nusy_codegraph::RustModuleResolver::from_crate(&codegraph_crate_root()).expect("resolver");
assert!(
resolver.module_count() >= 5,
"should find at least 5 modules, got {}",
resolver.module_count()
);
}