init: archlens — architecture diagram generator
Some checks failed
CI / Check / Test (push) Failing after 1m24s
Some checks failed
CI / Check / Test (push) Failing after 1m24s
Hex arch + DDD, tree-sitter parsing, Mermaid/ASCII output. Supports Rust + Python. 92 tests. CI, diff, --check for staleness detection.
This commit is contained in:
71
crates/adapters/walkdir/tests/walkdir_discovery_tests.rs
Normal file
71
crates/adapters/walkdir/tests/walkdir_discovery_tests.rs
Normal file
@@ -0,0 +1,71 @@
|
||||
use std::fs;
|
||||
|
||||
use archlens_domain::{AnalysisConfig, Language, ports::FileDiscovery};
|
||||
use archlens_walkdir::WalkdirDiscovery;
|
||||
|
||||
fn create_test_tree(dir: &std::path::Path) {
|
||||
fs::create_dir_all(dir.join("src/orders")).unwrap();
|
||||
fs::create_dir_all(dir.join("src/billing")).unwrap();
|
||||
fs::write(dir.join("src/orders/service.rs"), "struct OrderService;").unwrap();
|
||||
fs::write(dir.join("src/orders/model.py"), "class Order: pass").unwrap();
|
||||
fs::write(dir.join("src/billing/invoice.cs"), "class Invoice {}").unwrap();
|
||||
fs::write(dir.join("src/readme.txt"), "not source code").unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn discovers_rust_python_and_csharp_files() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
create_test_tree(dir.path());
|
||||
|
||||
let discovery = WalkdirDiscovery::new();
|
||||
let files = discovery
|
||||
.discover(dir.path(), &AnalysisConfig::default())
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(files.len(), 3);
|
||||
|
||||
let languages: Vec<Language> = files.iter().map(|f| f.language()).collect();
|
||||
assert!(languages.contains(&Language::Rust));
|
||||
assert!(languages.contains(&Language::Python));
|
||||
assert!(languages.contains(&Language::CSharp));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ignores_non_source_files() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
create_test_tree(dir.path());
|
||||
|
||||
let discovery = WalkdirDiscovery::new();
|
||||
let files = discovery
|
||||
.discover(dir.path(), &AnalysisConfig::default())
|
||||
.unwrap();
|
||||
|
||||
let paths: Vec<&str> = files.iter().map(|f| f.path().as_str()).collect();
|
||||
assert!(!paths.iter().any(|p| p.ends_with(".txt")));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn respects_exclude_patterns() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
create_test_tree(dir.path());
|
||||
|
||||
let config = AnalysisConfig::default().with_excludes(vec!["billing".to_string()]);
|
||||
|
||||
let discovery = WalkdirDiscovery::new();
|
||||
let files = discovery.discover(dir.path(), &config).unwrap();
|
||||
|
||||
assert_eq!(files.len(), 2);
|
||||
assert!(!files.iter().any(|f| f.path().as_str().contains("billing")));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn empty_directory_returns_no_files() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
|
||||
let discovery = WalkdirDiscovery::new();
|
||||
let files = discovery
|
||||
.discover(dir.path(), &AnalysisConfig::default())
|
||||
.unwrap();
|
||||
|
||||
assert!(files.is_empty());
|
||||
}
|
||||
Reference in New Issue
Block a user