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()