You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/tests/test_admin_audit_service.py

76 lines
2.6 KiB
Python

import unittest
from admin_app.db.models import AuditLog
from admin_app.services import AuditService
class _FakeAuditLogRepository:
def __init__(self):
self.entries: list[AuditLog] = []
self._next_id = 1
def create(self, **kwargs) -> AuditLog:
audit_log = AuditLog(id=self._next_id, **kwargs)
self.entries.append(audit_log)
self._next_id += 1
return audit_log
def list_recent(self, limit: int = 50) -> list[AuditLog]:
return list(reversed(self.entries))[:limit]
class AdminAuditServiceTests(unittest.TestCase):
def setUp(self):
self.repository = _FakeAuditLogRepository()
self.service = AuditService(self.repository)
def test_record_tool_approval_keeps_actor_and_version_metadata(self):
audit_entry = self.service.record_tool_approval(
actor_staff_account_id=7,
tool_name="consultar_clientes_vip",
tool_version=3,
ip_address="127.0.0.1",
user_agent="pytest",
)
self.assertEqual(audit_entry.event_type, "tool.approval.recorded")
self.assertEqual(audit_entry.resource_id, "consultar_clientes_vip")
self.assertEqual(audit_entry.payload_json["tool_version"], 3)
self.assertEqual(audit_entry.actor_staff_account_id, 7)
def test_record_tool_publication_keeps_actor_and_version_metadata(self):
audit_entry = self.service.record_tool_publication(
actor_staff_account_id=9,
tool_name="emitir_relatorio_receita",
tool_version=5,
ip_address="127.0.0.1",
user_agent="pytest",
)
self.assertEqual(audit_entry.event_type, "tool.publication.recorded")
self.assertEqual(audit_entry.resource_id, "emitir_relatorio_receita")
self.assertEqual(audit_entry.payload_json["tool_version"], 5)
self.assertEqual(audit_entry.actor_staff_account_id, 9)
def test_list_recent_returns_newest_first(self):
self.service.record_login_failed(
email="viewer@empresa.com",
ip_address="127.0.0.1",
user_agent="pytest",
)
self.service.record_tool_publication(
actor_staff_account_id=1,
tool_name="publicar_x",
tool_version=1,
ip_address="127.0.0.1",
user_agent="pytest",
)
recent = self.service.list_recent(limit=2)
self.assertEqual(recent[0].event_type, "tool.publication.recorded")
self.assertEqual(recent[1].event_type, "staff.login.failed")
if __name__ == "__main__":
unittest.main()