diff --git a/tests/test_dependency.py b/tests/test_dependency.py new file mode 100644 index 0000000..fcb65ae --- /dev/null +++ b/tests/test_dependency.py @@ -0,0 +1,92 @@ +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"}