fix: resolve CI test failures
Some checks failed
CI / test (push) Has been cancelled
ErrorFix CLI CI / test (push) Has been cancelled

This commit is contained in:
2026-02-01 04:18:16 +00:00
parent 5f9296ee67
commit 28dd456617

View File

@@ -0,0 +1,134 @@
import pytest
import json
import tempfile
import os
from errorfix.rules.rule import Rule, Severity
from errorfix.rules.loader import RuleLoader
class TestRule:
def test_rule_creation(self):
rule = Rule(
id="py001",
name="Undefined Variable",
pattern=r"NameError: name '(\w+)' is not defined",
fix="Declare '{name}' before using it or check for typos",
description="NameError occurs when trying to use an undefined variable",
severity="error",
language="python"
)
assert rule.id == "py001"
assert rule.name == "Undefined Variable"
assert rule.pattern == r"NameError: name '(\w+)' is not defined"
assert "name" in rule.fix
assert rule.language == "python"
assert rule.severity == Severity.ERROR
def test_rule_with_capture_groups(self):
rule = Rule(
id="py002",
name="Unexpected Indent",
pattern=r"SyntaxError: unexpected indent around line (?P<line>\d+)",
fix="Remove the extra indentation on line {line}",
description="Unexpected indentation error",
severity="error",
language="python"
)
assert "{line}" in rule.fix
def test_rule_to_dict(self):
rule = Rule(
id="test001",
name="Test Rule",
pattern="Test pattern",
fix="Test fix",
description="Test description"
)
data = rule.to_dict()
assert data["id"] == "test001"
assert data["name"] == "Test Rule"
assert data["severity"] == "error"
def test_rule_from_dict(self):
data = {
"id": "from_dict_test",
"name": "From Dict",
"pattern": ".*",
"fix": "fix",
"description": "desc"
}
rule = Rule.from_dict(data)
assert rule.id == "from_dict_test"
class TestRuleLoader:
def test_load_yaml_rules(self, tmp_path):
rules_file = tmp_path / "python_errors.yaml"
rules_file.write_text("""[
{
"id": "py001",
"name": "Undefined Variable",
"pattern": "NameError: name '([\\\\w]+)' is not defined",
"fix": "Declare before using",
"description": "Undefined variable error",
"severity": "error",
"language": "python"
}
]
""")
loader = RuleLoader()
rules = loader.load_yaml(str(rules_file))
assert len(rules) == 1
assert rules[0].language == "python"
def test_load_json_rules(self, tmp_path):
rules_file = tmp_path / "js_errors.json"
rules_file.write_text('''[
{
"id": "js001",
"name": "Reference Error",
"pattern": "ReferenceError: ([\\\\w]+) is not defined",
"fix": "Ensure declared before use",
"description": "Reference to undefined variable",
"severity": "error",
"language": "javascript"
}
]
''')
loader = RuleLoader()
rules = loader.load_json(str(rules_file))
assert len(rules) == 1
assert rules[0].language == "javascript"
def test_load_directory(self, tmp_path):
subdir = tmp_path / "python"
subdir.mkdir()
rules_file = subdir / "errors.yaml"
rules_file.write_text("""
- id: py_test
name: Test Rule
pattern: "TestError"
fix: "Fix the test"
description: "Test rule"
severity: "info"
language: "python"
""")
loader = RuleLoader()
rules = loader.load_directory(str(tmp_path))
assert len(rules) >= 1
def test_filter_rules_by_language(self):
loader = RuleLoader()
from errorfix.rules.rule import Rule
rules = [
Rule(id="p1", name="P1", pattern=".*", fix="f", description="d", language="python"),
Rule(id="p2", name="P2", pattern=".*", fix="f", description="d", language="javascript"),
Rule(id="p3", name="P3", pattern=".*", fix="f", description="d", language="python"),
]
filtered = loader.filter_rules(rules, language="python")
assert len(filtered) == 2
def test_load_nonexistent_file(self):
loader = RuleLoader()
with pytest.raises(FileNotFoundError):
loader.load_yaml("/nonexistent/path.yaml")