79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
"""Tests for schemas and serialize_finding."""
|
|
|
|
import datetime
|
|
from unittest.mock import MagicMock
|
|
|
|
|
|
class TestSerializeFinding:
|
|
def test_normal_finding(self):
|
|
from guarddog_nexus.schemas import serialize_finding
|
|
|
|
finding = MagicMock()
|
|
finding.id = 42
|
|
finding.scan_id = 7
|
|
finding.report = {"verdict": "safe"}
|
|
finding.created_at = datetime.datetime(2026, 1, 1, tzinfo=datetime.timezone.utc)
|
|
finding.data = {
|
|
"rule": "shady-links",
|
|
"severity": "WARNING",
|
|
"message": "Suspicious URL",
|
|
"location": "setup.py:15",
|
|
"code": "url = 'http://evil.com'",
|
|
}
|
|
|
|
result = serialize_finding(finding)
|
|
|
|
assert result["id"] == 42
|
|
assert result["scan_id"] == 7
|
|
assert result["rule"] == "shady-links"
|
|
assert result["severity"] == "WARNING"
|
|
assert result["report"] == {"verdict": "safe"}
|
|
assert result["created_at"] == "2026-01-01T00:00:00+00:00"
|
|
|
|
def test_created_at_none(self):
|
|
from guarddog_nexus.schemas import serialize_finding
|
|
|
|
finding = MagicMock()
|
|
finding.id = 1
|
|
finding.scan_id = 1
|
|
finding.report = None
|
|
finding.created_at = None
|
|
finding.data = {"rule": "test", "message": "msg"}
|
|
|
|
result = serialize_finding(finding)
|
|
|
|
assert result["created_at"] is None
|
|
assert result["report"] is None
|
|
|
|
def test_missing_data_fields_default_to_empty_string(self):
|
|
from guarddog_nexus.schemas import serialize_finding
|
|
|
|
finding = MagicMock()
|
|
finding.id = 1
|
|
finding.scan_id = 1
|
|
finding.report = None
|
|
finding.created_at = None
|
|
finding.data = {"rule": "only-rule"}
|
|
|
|
result = serialize_finding(finding)
|
|
|
|
assert result["rule"] == "only-rule"
|
|
assert result["severity"] == ""
|
|
assert result["message"] == ""
|
|
|
|
def test_data_values_none_become_empty_strings(self):
|
|
from guarddog_nexus.schemas import serialize_finding
|
|
|
|
finding = MagicMock()
|
|
finding.id = 1
|
|
finding.scan_id = 1
|
|
finding.report = None
|
|
finding.created_at = None
|
|
finding.data = {"rule": None, "severity": None, "message": None}
|
|
|
|
result = serialize_finding(finding)
|
|
|
|
assert result["rule"] == ""
|
|
assert result["severity"] == ""
|
|
assert result["message"] == ""
|