From f83d6cf7f5cc6c888ba893b3127060f5ff709abc Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Mon, 2 Feb 2026 21:36:48 +0000 Subject: [PATCH] Add unit tests for parsers --- tests/unit/test_parsers.py | 149 +++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 tests/unit/test_parsers.py diff --git a/tests/unit/test_parsers.py b/tests/unit/test_parsers.py new file mode 100644 index 0000000..c70373b --- /dev/null +++ b/tests/unit/test_parsers.py @@ -0,0 +1,149 @@ +import json +import pytest +from pathlib import Path + +from depaudit.parsers import Parser, ParsedManifest +from depaudit.parsers.javascript import JavaScriptParser +from depaudit.parsers.python import PythonParser +from depaudit.parsers.go import GoParser +from depaudit.parsers.rust import RustParser +from depaudit.parsers.java import JavaParser + + +class TestJavaScriptParser: + def test_can_parse_package_json(self, temp_dir, sample_package_json): + parser = JavaScriptParser() + file_path = temp_dir / "package.json" + file_path.write_text(json.dumps(sample_package_json)) + assert parser.can_parse(file_path) is True + + def test_can_parse_package_lock_json(self, temp_dir): + parser = JavaScriptParser() + file_path = temp_dir / "package-lock.json" + file_path.write_text("{}") + assert parser.can_parse(file_path) is True + + def test_parse_package_json(self, temp_dir, sample_package_json): + parser = JavaScriptParser() + file_path = temp_dir / "package.json" + file_path.write_text(json.dumps(sample_package_json)) + + manifest = parser.parse(file_path) + + assert manifest.language == "javascript" + assert manifest.project_name == "test-project" + assert manifest.project_version == "1.0.0" + assert len(manifest.dependencies) == 4 + + dep_names = {d.name for d in manifest.dependencies} + assert "express" in dep_names + assert "lodash" in dep_names + assert "jest" in dep_names + assert "fsevents" in dep_names + + +class TestPythonParser: + def test_can_parse_requirements_txt(self, temp_dir): + parser = PythonParser() + file_path = temp_dir / "requirements.txt" + file_path.write_text("") + assert parser.can_parse(file_path) is True + + def test_can_parse_pyproject_toml(self, temp_dir): + parser = PythonParser() + file_path = temp_dir / "pyproject.toml" + file_path.write_text("") + assert parser.can_parse(file_path) is True + + def test_parse_requirements_txt(self, temp_dir, sample_requirements_txt): + parser = PythonParser() + file_path = temp_dir / "requirements.txt" + file_path.write_text(sample_requirements_txt) + + manifest = parser.parse(file_path) + + assert manifest.language == "python" + dep_names = {d.name for d in manifest.dependencies} + assert "requests" in dep_names + assert "flask" in dep_names + assert "pytest" in dep_names + + +class TestGoParser: + def test_can_parse_go_mod(self, temp_dir): + parser = GoParser() + file_path = temp_dir / "go.mod" + file_path.write_text("") + assert parser.can_parse(file_path) is True + + def test_parse_go_mod(self, temp_dir, sample_go_mod): + parser = GoParser() + file_path = temp_dir / "go.mod" + file_path.write_text(sample_go_mod) + + manifest = parser.parse(file_path) + + assert manifest.language == "go" + assert "github.com/test/project" in (manifest.project_name or "") + + dep_names = {d.name for d in manifest.dependencies} + assert "github.com/gin-gonic/gin" in dep_names + assert "github.com/spf13/viper" in dep_names + + +class TestRustParser: + def test_can_parse_cargo_toml(self, temp_dir): + parser = RustParser() + file_path = temp_dir / "Cargo.toml" + file_path.write_text("") + assert parser.can_parse(file_path) is True + + def test_parse_cargo_toml(self, temp_dir, sample_cargo_toml): + parser = RustParser() + file_path = temp_dir / "Cargo.toml" + file_path.write_text(sample_cargo_toml) + + manifest = parser.parse(file_path) + + assert manifest.language == "rust" + assert manifest.project_name == "test-project" + + dep_names = {d.name for d in manifest.dependencies} + assert "serde" in dep_names + assert "tokio" in dep_names + + +class TestJavaParser: + def test_can_parse_pom_xml(self, temp_dir): + parser = JavaParser() + file_path = temp_dir / "pom.xml" + file_path.write_text("") + assert parser.can_parse(file_path) is True + + def test_parse_pom_xml(self, temp_dir, sample_pom_xml): + parser = JavaParser() + file_path = temp_dir / "pom.xml" + file_path.write_text(sample_pom_xml) + + manifest = parser.parse(file_path) + + assert manifest.language == "java" + assert "com.example" in (manifest.project_name or "") + + +class TestParserFactory: + def test_get_parser_for_package_json(self, temp_dir): + from depaudit.parsers.factory import ParserFactory + file_path = temp_dir / "package.json" + file_path.write_text("{}") + parser = ParserFactory.get_parser(file_path) + assert parser is not None + assert isinstance(parser, JavaScriptParser) + + def test_get_parser_for_requirements_txt(self, temp_dir): + from depaudit.parsers.factory import ParserFactory + file_path = temp_dir / "requirements.txt" + file_path.write_text("") + parser = ParserFactory.get_parser(file_path) + assert parser is not None + assert isinstance(parser, PythonParser)