import pytest from pathlib import Path from codechunk.core.dependency import DependencyAnalyzer, DependencyNode from codechunk.core.chunking import ParsedChunk, ChunkMetadata class TestDependencyAnalyzer: """Tests for DependencyAnalyzer.""" def test_analyze_dependencies_basic(self, tmp_path): """Test basic dependency analysis.""" main_code = ''' import os import json def main(): pass ''' utils_code = ''' from typing import List def helper(): pass ''' (tmp_path / "main.py").write_text(main_code) (tmp_path / "utils.py").write_text(utils_code) from codechunk.core.parser import CodeParser parser = CodeParser() parser.discover_files(tmp_path, ["*.py"], []) chunks = parser.parse_all() analyzer = DependencyAnalyzer() graph = analyzer.analyze_dependencies(chunks, parser.files) assert len(graph) >= 2 def test_get_essential_chunks(self): """Test getting essential chunks including dependencies.""" analyzer = DependencyAnalyzer() analyzer.dependency_graph = { "main": DependencyNode( chunk_name="main", file_path=Path("main.py"), module_name="main", dependencies={"utils", "helper"} ), "utils": DependencyNode( chunk_name="utils", file_path=Path("utils.py"), module_name="utils", dependencies={"helper"} ), "helper": DependencyNode( chunk_name="helper", file_path=Path("helper.py"), module_name="helper", dependencies=set() ), } essential = analyzer.get_essential_chunks(["main"]) assert "main" in essential assert "utils" in essential assert "helper" in essential def test_empty_project(self): """Test dependency analysis with no chunks.""" analyzer = DependencyAnalyzer() graph = analyzer.analyze_dependencies([], []) assert len(graph) == 0 class TestDependencyNode: """Tests for DependencyNode dataclass.""" def test_dependency_node_creation(self): """Test creating a dependency node.""" node = DependencyNode( chunk_name="test", file_path=Path("test.py"), module_name="test", dependencies={"dep1", "dep2"}, dependents={"parent"} ) assert node.chunk_name == "test" assert node.dependencies == {"dep1", "dep2"}