#!/usr/bin/env python3 """ HTML Coverage Report Enhancer Post-processes pytest-cov HTML reports to add branch coverage visualization, color coding, and summary dashboard. Usage: python backend/tests/scripts/enhance_html_coverage.py [--html-path PATH] Examples: python backend/tests/scripts/enhance_html_coverage.py python backend/tests/scripts/enhance_html_coverage.py --html-path custom/htmlcov/index.html """ import argparse import re from pathlib import Path from typing import Optional def enhance_html_report(html_path: Path) -> bool: """ Enhance HTML coverage report with branch visualization and dashboard. Args: html_path: Path to htmlcov/index.html Returns: True if successful, False otherwise """ if not html_path.exists(): print(f"Error: HTML report not found: {html_path}") return False # Read HTML content with open(html_path, 'r') as f: html_content = f.read() # Enhance the HTML enhanced_html = add_color_coding(html_content) enhanced_html = add_dashboard(enhanced_html) enhanced_html = add_branch_toggle(enhanced_html) # Write enhanced version with open(html_path, 'w') as f: f.write(enhanced_html) print(f"Enhanced HTML report: {html_path}") return True def add_color_coding(html_content: str) -> str: """ Add CSS for coverage color coding. Args: html_content: Original HTML content Returns: HTML with added color coding CSS """ css_injection = """ """ # Insert CSS before closing tag if "" in html_content: return html_content.replace("", css_injection + "") else: return css_injection + html_content def add_dashboard(html_content: str) -> str: """ Add summary dashboard at top of HTML report. Args: html_content: Original HTML content Returns: HTML with added dashboard """ dashboard_html = """

Coverage Summary Dashboard

Overall Coverage
Loading...
Branch Coverage
Loading...
Modules Tested
Loading...
Uncovered Lines
Loading...
""" # Insert dashboard after opening tag if "" in html_content: return html_content.replace("", "" + dashboard_html) elif "]*>', r'\g<0>' + dashboard_html, html_content, count=1) else: return dashboard_html + html_content def add_branch_toggle(html_content: str) -> str: """ Add JavaScript for branch visibility toggle. Args: html_content: Original HTML content Returns: HTML with added branch toggle functionality """ toggle_script = """ """ # Insert before closing tag if "" in html_content: return html_content.replace("", toggle_script + "") else: return html_content + toggle_script def post_process_coverage_html() -> bool: """ Post-process all HTML coverage files to add enhancements. Returns: True if successful """ backend_dir = Path(__file__).parent.parent htmlcov_dir = backend_dir / "coverage_reports" / "html" if not htmlcov_dir.exists(): print(f"HTML coverage directory not found: {htmlcov_dir}") return False # Enhance index.html index_html = htmlcov_dir / "index.html" if index_html.exists(): enhance_html_report(index_html) else: print(f"Index HTML not found: {index_html}") return False print(f"\nEnhanced coverage report available at: file://{index_html}") return True def main(): """Main execution entry point.""" parser = argparse.ArgumentParser( description="Enhance HTML coverage reports with branch visualization" ) parser.add_argument( "--html-path", type=Path, default=None, help="Path to htmlcov/index.html (default: backend/tests/coverage_reports/html/index.html)" ) args = parser.parse_args() if args.html_path: # Enhance specific HTML file success = enhance_html_report(args.html_path) else: # Enhance default coverage report success = post_process_coverage_html() return 0 if success else 1 if __name__ == "__main__": import sys sys.exit(main())