"""Tests for the audit-trail helper.""" from __future__ import annotations from app.db.audit import record_audit from app.db.models import AuditLog class _FakeSession: def __init__(self) -> None: self.added: list[object] = [] def add(self, obj: object) -> None: self.added.append(obj) def test_record_audit_adds_row_with_fields(): db = _FakeSession() entry = record_audit( db, action="asset.ingest.registered", actor="alice", app_code="qms", entity_type="document", entity_id="doc-1", details={"asset_id": "asset_1"}, ) assert db.added == [entry] assert isinstance(entry, AuditLog) assert entry.action == "asset.ingest.registered" assert entry.actor == "alice" assert entry.app_code == "qms" assert entry.entity_type == "document" assert entry.entity_id == "doc-1" assert entry.details == {"asset_id": "asset_1"} def test_record_audit_redacts_secret_in_details(): db = _FakeSession() entry = record_audit( db, action="x", details={"api_key": "leak", "asset_id": "a1"}, ) assert entry.details["api_key"] == "***" assert entry.details["asset_id"] == "a1" def test_record_audit_defaults_details_to_empty_dict(): db = _FakeSession() entry = record_audit(db, action="x") assert entry.details == {}