fix: resolve CI test failures
This commit is contained in:
88
errorfix/tests/test_formatters.py
Normal file
88
errorfix/tests/test_formatters.py
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
import pytest
|
||||||
|
from errorfix.formatters import TextFormatter, JSONFormatter, StructuredFormatter
|
||||||
|
from errorfix.patterns.matcher import MatchResult
|
||||||
|
from errorfix.rules.rule import Rule
|
||||||
|
|
||||||
|
|
||||||
|
def create_match_result(rule_id="test001", rule_name="Test Rule"):
|
||||||
|
rule = Rule(
|
||||||
|
id=rule_id,
|
||||||
|
name=rule_name,
|
||||||
|
pattern=r"TestError",
|
||||||
|
fix="Apply this fix",
|
||||||
|
description="Test error description",
|
||||||
|
severity="error",
|
||||||
|
language="python"
|
||||||
|
)
|
||||||
|
return MatchResult(
|
||||||
|
rule=rule,
|
||||||
|
matched_text="TestError: something went wrong",
|
||||||
|
groups={"1": "something"},
|
||||||
|
start_pos=0,
|
||||||
|
end_pos=30,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestTextFormatter:
|
||||||
|
def test_format_single_match(self):
|
||||||
|
formatter = TextFormatter(use_colors=False)
|
||||||
|
match = create_match_result()
|
||||||
|
result = formatter.format([match], "TestError: something went wrong")
|
||||||
|
assert "Test Rule" in result
|
||||||
|
assert "Apply this fix" in result
|
||||||
|
assert "Test error description" in result
|
||||||
|
|
||||||
|
def test_format_no_matches(self):
|
||||||
|
formatter = TextFormatter(use_colors=False)
|
||||||
|
result = formatter.format([], "Some unknown error")
|
||||||
|
assert "No matching rules found" in result
|
||||||
|
|
||||||
|
def test_format_multiple_matches(self):
|
||||||
|
formatter = TextFormatter(use_colors=False)
|
||||||
|
matches = [create_match_result("r1", "Rule 1"), create_match_result("r2", "Rule 2")]
|
||||||
|
result = formatter.format(matches, "Test error")
|
||||||
|
assert "Fix #1" in result
|
||||||
|
assert "Fix #2" in result
|
||||||
|
assert "Rule 1" in result
|
||||||
|
assert "Rule 2" in result
|
||||||
|
|
||||||
|
def test_colored_output(self):
|
||||||
|
formatter = TextFormatter(use_colors=True)
|
||||||
|
match = create_match_result()
|
||||||
|
result = formatter.format([match], "Test error")
|
||||||
|
assert "\033[" in result
|
||||||
|
|
||||||
|
|
||||||
|
class TestJSONFormatter:
|
||||||
|
def test_format_single_match(self):
|
||||||
|
formatter = JSONFormatter(pretty=True)
|
||||||
|
match = create_match_result()
|
||||||
|
result = formatter.format([match], "Test error")
|
||||||
|
import json
|
||||||
|
data = json.loads(result)
|
||||||
|
assert data["match_count"] == 1
|
||||||
|
assert data["matches"][0]["rule"]["id"] == "test001"
|
||||||
|
|
||||||
|
def test_format_empty(self):
|
||||||
|
formatter = JSONFormatter(pretty=True)
|
||||||
|
result = formatter.format([], "Test error")
|
||||||
|
import json
|
||||||
|
data = json.loads(result)
|
||||||
|
assert data["match_count"] == 0
|
||||||
|
assert len(data["matches"]) == 0
|
||||||
|
|
||||||
|
def test_pretty_false(self):
|
||||||
|
formatter = JSONFormatter(pretty=False)
|
||||||
|
match = create_match_result()
|
||||||
|
result = formatter.format([match], "Test error")
|
||||||
|
import json
|
||||||
|
data = json.loads(result)
|
||||||
|
assert data["match_count"] == 1
|
||||||
|
|
||||||
|
|
||||||
|
class TestStructuredFormatter:
|
||||||
|
def test_format_returns_dict_string(self):
|
||||||
|
formatter = StructuredFormatter()
|
||||||
|
match = create_match_result()
|
||||||
|
result = formatter.format([match], "Test error")
|
||||||
|
assert "rule_id" in result or "dict" in result.lower()
|
||||||
Reference in New Issue
Block a user