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:
78
crates/application/tests/render_diagrams_tests.rs
Normal file
78
crates/application/tests/render_diagrams_tests.rs
Normal file
@@ -0,0 +1,78 @@
|
||||
mod fakes;
|
||||
|
||||
use archlens_application::queries::RenderDiagrams;
|
||||
use archlens_domain::{
|
||||
CodeElement, CodeElementKind, CodeGraph, FilePath, ModuleName, OutputConfig,
|
||||
};
|
||||
|
||||
use fakes::{FakeDiagramRenderer, FakeOutputWriter};
|
||||
|
||||
fn build_graph() -> CodeGraph {
|
||||
let mut graph = CodeGraph::new();
|
||||
graph.add_element(
|
||||
CodeElement::new(
|
||||
"OrderService",
|
||||
CodeElementKind::Class,
|
||||
FilePath::new("src/service.rs").unwrap(),
|
||||
1,
|
||||
)
|
||||
.unwrap()
|
||||
.with_module(ModuleName::new("Orders").unwrap()),
|
||||
);
|
||||
graph.add_element(
|
||||
CodeElement::new(
|
||||
"BillingService",
|
||||
CodeElementKind::Class,
|
||||
FilePath::new("src/billing.rs").unwrap(),
|
||||
1,
|
||||
)
|
||||
.unwrap()
|
||||
.with_module(ModuleName::new("Billing").unwrap()),
|
||||
);
|
||||
graph
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn renders_single_diagram_and_writes_output() {
|
||||
let renderer = FakeDiagramRenderer::new();
|
||||
let writer = FakeOutputWriter::new();
|
||||
let config = OutputConfig::default();
|
||||
|
||||
let use_case = RenderDiagrams::new(renderer, writer);
|
||||
use_case.execute(&build_graph(), &config).unwrap();
|
||||
|
||||
let outputs = use_case.writer().written_outputs();
|
||||
assert_eq!(outputs.len(), 1);
|
||||
assert_eq!(outputs[0].files().len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn split_mode_renders_overview_plus_per_module_diagrams() {
|
||||
let renderer = FakeDiagramRenderer::new();
|
||||
let writer = FakeOutputWriter::new();
|
||||
let config = OutputConfig::default().with_split_by_module(true);
|
||||
|
||||
let graph = build_graph(); // has 2 modules: Orders, Billing
|
||||
|
||||
let use_case = RenderDiagrams::new(renderer, writer);
|
||||
use_case.execute(&graph, &config).unwrap();
|
||||
|
||||
let outputs = use_case.writer().written_outputs();
|
||||
// 1 overview + 2 module diagrams = 3 writes
|
||||
assert_eq!(outputs.len(), 3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn empty_graph_still_produces_output() {
|
||||
let renderer = FakeDiagramRenderer::new();
|
||||
let writer = FakeOutputWriter::new();
|
||||
let config = OutputConfig::default();
|
||||
|
||||
let graph = CodeGraph::new();
|
||||
|
||||
let use_case = RenderDiagrams::new(renderer, writer);
|
||||
use_case.execute(&graph, &config).unwrap();
|
||||
|
||||
let outputs = use_case.writer().written_outputs();
|
||||
assert_eq!(outputs.len(), 1);
|
||||
}
|
||||
Reference in New Issue
Block a user