55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
import json
|
|
import pytest
|
|
from datetime import datetime
|
|
from ayn_antivirus.core.engine import ScanResult, ScanType, ThreatInfo, ThreatType, Severity
|
|
from ayn_antivirus.reports.generator import ReportGenerator
|
|
|
|
def _make_scan_result():
|
|
return ScanResult(
|
|
scan_id="test-001",
|
|
start_time=datetime.now(),
|
|
end_time=datetime.now(),
|
|
files_scanned=500,
|
|
files_skipped=10,
|
|
threats=[
|
|
ThreatInfo(
|
|
path="/tmp/evil.sh",
|
|
threat_name="ReverseShell",
|
|
threat_type=ThreatType.MALWARE,
|
|
severity=Severity.CRITICAL,
|
|
detector_name="heuristic",
|
|
details="Reverse shell detected",
|
|
file_hash="abc123"
|
|
)
|
|
],
|
|
scan_path="/tmp",
|
|
scan_type=ScanType.FULL
|
|
)
|
|
|
|
def test_text_report():
|
|
gen = ReportGenerator()
|
|
result = _make_scan_result()
|
|
text = gen.generate_text(result)
|
|
assert "AYN ANTIVIRUS" in text
|
|
assert "ReverseShell" in text
|
|
|
|
def test_json_report():
|
|
gen = ReportGenerator()
|
|
result = _make_scan_result()
|
|
j = gen.generate_json(result)
|
|
data = json.loads(j)
|
|
assert data["summary"]["total_threats"] == 1
|
|
|
|
def test_html_report():
|
|
gen = ReportGenerator()
|
|
result = _make_scan_result()
|
|
html = gen.generate_html(result)
|
|
assert "<html" in html
|
|
assert "ReverseShell" in html
|
|
assert "CRITICAL" in html
|
|
|
|
def test_save_report(tmp_path):
|
|
gen = ReportGenerator()
|
|
gen.save_report("test content", str(tmp_path / "report.txt"))
|
|
assert (tmp_path / "report.txt").read_text() == "test content"
|