Files
agentic_security/tests/unit/test_report_chart.py
T

78 lines
2.3 KiB
Python

import io
import matplotlib
import pytest
matplotlib.use("Agg")
from agentic_security.report_chart import (
_generate_identifiers,
generate_identifiers,
plot_security_report,
)
class TestGenerateIdentifiers:
def test_single_row(self):
data = type("DF", (), {"__len__": lambda s: 1})()
result = _generate_identifiers(data)
assert result == ["A1"]
def test_multiple_rows(self):
data = type("DF", (), {"__len__": lambda s: 5})()
result = _generate_identifiers(data)
assert result == ["A1", "A2", "A3", "A4", "A5"]
def test_alphabet_wraparound(self):
data = type("DF", (), {"__len__": lambda s: 27})()
result = _generate_identifiers(data)
assert result[0] == "A1"
assert result[25] == "A26"
assert result[26] == "B1"
def test_empty_dataframe(self):
data = type("DF", (), {"__len__": lambda s: 0})()
result = _generate_identifiers(data)
assert result == []
def test_public_generate_identifiers(self):
import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3]})
result = generate_identifiers(df)
assert result == ["A1", "A2", "A3"]
class TestPlotSecurityReport:
def test_returns_bytesio(self):
table_data = [
{"module": "test", "failureRate": 10.0, "tokens": 100},
]
result = plot_security_report(table_data)
assert isinstance(result, io.BytesIO)
def test_multiple_modules(self):
table_data = [
{"module": "mod_a", "failureRate": 5.0, "tokens": 50},
{"module": "mod_b", "failureRate": 15.0, "tokens": 200},
{"module": "mod_c", "failureRate": 25.0, "tokens": 500},
]
result = plot_security_report(table_data)
assert result.getvalue() != b""
def test_handles_empty_data(self):
result = plot_security_report([])
assert isinstance(result, io.BytesIO)
def test_handles_missing_keys(self):
table_data = [{"module": "test"}]
result = plot_security_report(table_data)
assert isinstance(result, io.BytesIO)
def test_handles_none_values(self):
table_data = [
{"module": "test", "failureRate": None, "tokens": None},
]
result = plot_security_report(table_data)
assert isinstance(result, io.BytesIO)