Files
config-auditor-cli/tests/test_parsers.py
7000pctAUTO 3da939a38d
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled
fix: resolve CI linting failures by removing unused imports
2026-01-30 18:13:52 +00:00

172 lines
5.3 KiB
Python

from pathlib import Path
import tempfile
from config_auditor.discovery import ConfigDiscovery
from config_auditor.parsers import ParserFactory, JsonParser, YamlParser, TomlParser
from config_auditor.rules import (
RuleRegistry,
DeprecatedPackageRule,
OutdatedVersionRule,
MissingTypeCheckingRule,
MissingScriptsRule,
PythonProjectMetaRule,
)
class TestConfigDiscovery:
def test_discover_json_files(self):
with tempfile.TemporaryDirectory() as tmpdir:
(Path(tmpdir) / "package.json").write_text('{"name": "test"}')
(Path(tmpdir) / "tsconfig.json").write_text('{"compilerOptions": {}}')
discovery = ConfigDiscovery(max_depth=2)
configs = discovery.discover(Path(tmpdir))
assert len(configs) >= 2
def test_discover_nested_files(self):
with tempfile.TemporaryDirectory() as tmpdir:
nested = Path(tmpdir) / "src"
nested.mkdir()
(nested / "tsconfig.json").write_text('{"compilerOptions": {}}')
discovery = ConfigDiscovery(max_depth=3)
configs = discovery.discover(Path(tmpdir))
assert len(configs) == 1
def test_no_files_found(self):
with tempfile.TemporaryDirectory() as tmpdir:
discovery = ConfigDiscovery(max_depth=2)
configs = discovery.discover(Path(tmpdir))
assert len(configs) == 0
class TestParsers:
def test_json_parse_valid(self):
parser = JsonParser()
content = '{"name": "test", "version": "1.0.0"}'
result = parser.parse(content)
assert result is not None
assert result["name"] == "test"
assert result["version"] == "1.0.0"
def test_json_parse_invalid(self):
parser = JsonParser()
content = "not valid json"
result = parser.parse(content)
assert result is None
def test_yaml_parse_valid(self):
parser = YamlParser()
content = "key: value\nlist:\n - item1\n - item2"
result = parser.parse(content)
assert result is not None
assert result["key"] == "value"
assert len(result["list"]) == 2
def test_toml_parse_valid(self):
parser = TomlParser()
content = 'name = "test"\nversion = "1.0.0"'
result = parser.parse(content)
assert result is not None
assert result["name"] == "test"
def test_parser_factory(self):
factory = ParserFactory()
json_result = factory.parse("json", '{"test": true}')
assert json_result is not None
yaml_result = factory.parse("yaml", "test: value")
assert yaml_result is not None
toml_result = factory.parse("toml", 'test = true')
assert toml_result is not None
class TestRules:
def test_deprecated_package_rule(self):
rule = DeprecatedPackageRule()
data = {"dependencies": {"request": "^2.0.0"}}
result = rule.evaluate(data, Path("package.json"))
assert result.passed is False
assert "deprecated" in result.message.lower()
def test_no_deprecated_packages(self):
rule = DeprecatedPackageRule()
data = {"dependencies": {"express": "^4.0.0"}}
result = rule.evaluate(data, Path("package.json"))
assert result.passed is True
def test_outdated_version_rule(self):
rule = OutdatedVersionRule()
data = {"dependencies": {"express": "^0.1.0"}}
result = rule.evaluate(data, Path("package.json"))
assert result.passed is False
def test_missing_type_checking_rule(self):
rule = MissingTypeCheckingRule()
data = {"compilerOptions": {"strict": False}}
result = rule.evaluate(data, Path("tsconfig.json"))
assert result.passed is False
def test_strict_mode_enabled(self):
rule = MissingTypeCheckingRule()
data = {"compilerOptions": {"strict": True}}
result = rule.evaluate(data, Path("tsconfig.json"))
assert result.passed is True
def test_missing_scripts_rule(self):
rule = MissingScriptsRule()
data = {"scripts": {}}
result = rule.evaluate(data, Path("package.json"))
assert result.passed is False
def test_all_scripts_present(self):
rule = MissingScriptsRule()
data = {"scripts": {"test": "jest", "build": "tsc"}}
result = rule.evaluate(data, Path("package.json"))
assert result.passed is True
def test_python_project_meta_rule(self):
rule = PythonProjectMetaRule()
data = {"tool": {"poetry": {"name": "test", "version": "1.0.0"}}}
result = rule.evaluate(data, Path("pyproject.toml"))
assert result.passed is True
class TestRuleRegistry:
def test_evaluate_json_config(self):
registry = RuleRegistry()
data = {
"dependencies": {"request": "^2.0.0"},
"scripts": {}
}
issues = registry.evaluate("json", data, Path("package.json"))
issue_categories = [i.category for i in issues]
assert "deprecated-package" in issue_categories
assert "missing-scripts" in issue_categories
def test_empty_config_has_warnings(self):
registry = RuleRegistry()
issues = registry.evaluate("json", {}, Path("package.json"))
assert len(issues) > 0
categories = [i.category for i in issues]
assert "missing-scripts" in categories