"""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"] == ""