"""Tests for template utilities.""" from datetime import datetime from typing import Any from sslysze_scan.reporter.template_utils import ( build_template_context, generate_report_id, ) class TestGenerateReportId: """Tests for generate_report_id function.""" def test_generate_report_id_valid_and_invalid(self) -> None: """Test report ID generation with valid and invalid timestamps.""" # Valid timestamp metadata = {"timestamp": "2025-01-08T10:30:00.123456", "scan_id": 5} result = generate_report_id(metadata) assert result == "20250108_5" # Invalid timestamp falls back to current date metadata = {"timestamp": "invalid", "scan_id": 5} result = generate_report_id(metadata) today = datetime.now().strftime("%Y%m%d") assert result == f"{today}_5" class TestBuildTemplateContext: """Tests for build_template_context function.""" def test_build_template_context_complete_and_partial( self, mock_scan_data: dict[str, Any] ) -> None: """Test context building with complete and partial data.""" # Complete data context = build_template_context(mock_scan_data) assert context["scan_id"] == 5 assert context["hostname"] == "example.com" assert context["fqdn"] == "example.com" assert context["ipv4"] == "192.168.1.1" assert context["ipv6"] == "2001:db8::1" assert context["timestamp"] == "08.01.2025 10:30" assert context["duration"] == "12.34" assert context["ports"] == "443, 636" assert "summary" in context assert "ports_data" in context # Verify ports_data sorted by port ports = [p["port"] for p in context["ports_data"]] assert ports == sorted(ports) # Missing duration mock_scan_data["metadata"]["duration"] = None context = build_template_context(mock_scan_data) assert context["duration"] == "N/A"