Files
TJWaterServerBinary/tests/unit/test_audit_repository.py
T

80 lines
2.2 KiB
Python

import asyncio
from datetime import datetime, timezone
from uuid import uuid4
from app.infra.db.metadb.repositories.audit_repository import AuditRepository
from tests.conftest import FakeAsyncSession, FakeExecuteResult, make_audit_log
def test_create_log_adds_commits_and_refreshes(monkeypatch):
class FakeAuditLog:
def __init__(self, **kwargs):
self.id = uuid4()
for key, value in kwargs.items():
setattr(self, key, value)
session = FakeAsyncSession()
repo = AuditRepository(session)
monkeypatch.setattr(
"app.infra.db.metadb.repositories.audit_repository.models.AuditLog",
FakeAuditLog,
)
result = asyncio.run(
repo.create_log(
action="LOGIN",
request_method="POST",
request_path="/auth/login",
response_status=200,
)
)
assert result.action == "LOGIN"
assert result.request_method == "POST"
assert session.commit_count == 1
assert len(session.added) == 1
assert len(session.refreshed) == 1
def test_get_logs_builds_filtered_query_and_returns_models():
log = make_audit_log(action="UPDATE_USER", resource_type="user")
session = FakeAsyncSession(
execute_results=[FakeExecuteResult(rows=[log])],
)
repo = AuditRepository(session)
user_id = uuid4()
project_id = uuid4()
start_time = datetime(2025, 1, 1, tzinfo=timezone.utc)
results = asyncio.run(
repo.get_logs(
user_id=user_id,
project_id=project_id,
action="UPDATE_USER",
resource_type="user",
start_time=start_time,
skip=5,
limit=10,
)
)
assert len(results) == 1
assert results[0].action == "UPDATE_USER"
stmt = session.executed[0]
assert len(stmt._where_criteria) == 5
assert stmt._offset == 5
assert stmt._limit == 10
def test_get_log_count_returns_zero_when_scalar_none():
session = FakeAsyncSession(
execute_results=[FakeExecuteResult(scalar_value=None)],
)
repo = AuditRepository(session)
result = asyncio.run(repo.get_log_count(action="DELETE_USER"))
assert result == 0
stmt = session.executed[0]
assert len(stmt._where_criteria) == 1