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); }