Add unit tests for parsers

This commit is contained in:
2026-02-02 21:36:48 +00:00
parent 25fce2dce5
commit f83d6cf7f5

149
tests/unit/test_parsers.py Normal file
View File

@@ -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)