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.
76 lines
2.6 KiB
Python
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() |