Files
depaudit-cli/tests/unit/test_parsers.py
7000pctAUTO 5828a2da6c
Some checks failed
CI / test (push) Failing after 13s
fix: resolve CI linting failures
2026-02-02 21:50:41 +00:00

147 lines
5.0 KiB
Python

import json
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)