perf: paginate admin audit lists
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from app.api.admin_agent_records import attention_list, retrieval_logs
|
||||
from app.api.admin_records import ai_logs
|
||||
from app.api.admin_users import list_users
|
||||
from app.models import Base
|
||||
from app.models.knowledge import HumanAttentionRecord, KnowledgeRetrievalLog
|
||||
from app.models.logs import AiRequestLog
|
||||
from app.models.user import User
|
||||
|
||||
|
||||
def _database() -> Session:
|
||||
engine = create_engine("sqlite:///:memory:", connect_args={"check_same_thread": False}, poolclass=StaticPool)
|
||||
Base.metadata.create_all(engine)
|
||||
return Session(engine)
|
||||
|
||||
|
||||
def test_user_list_uses_database_pagination():
|
||||
with _database() as db:
|
||||
db.add_all([
|
||||
User(id=i + 1, phone=f"1380000{i:04d}", name=f"学员{i}", daily_chat_limit=10)
|
||||
for i in range(25)
|
||||
])
|
||||
db.commit()
|
||||
response = list_users(keyword="", page=2, pageSize=10, db=db, current_admin=object())
|
||||
assert response["data"]["total"] == 25
|
||||
assert response["data"]["page"] == 2
|
||||
assert len(response["data"]["items"]) == 10
|
||||
|
||||
|
||||
def test_ai_log_page_does_not_load_large_detail_fields():
|
||||
with _database() as db:
|
||||
db.add_all([
|
||||
AiRequestLog(status="success", prompt="p" * 5000, retrieved_chunks='[{"content":"large"}]')
|
||||
for _ in range(23)
|
||||
])
|
||||
db.commit()
|
||||
response = ai_logs(sessionId=None, userId=None, status="", page=2, pageSize=10, db=db, current_admin=object())
|
||||
assert response["data"]["total"] == 23
|
||||
assert len(response["data"]["items"]) == 10
|
||||
assert all(item["retrievedChunks"] == [] for item in response["data"]["items"])
|
||||
|
||||
|
||||
def test_retrieval_and_attention_lists_are_paginated():
|
||||
with _database() as db:
|
||||
for index in range(21):
|
||||
db.add(KnowledgeRetrievalLog(
|
||||
question=f"q{index}", catalog_snapshot="[]", catalog_hash=str(index),
|
||||
safety_rule_version="v1", status="success",
|
||||
))
|
||||
db.add(HumanAttentionRecord(
|
||||
session_id=index + 1, message_id=index + 1, user_id=index + 1,
|
||||
trigger_message="test", problem_summary="test", trigger_reason="test",
|
||||
priority="normal", status="pending",
|
||||
))
|
||||
db.commit()
|
||||
retrieval = retrieval_logs(
|
||||
sessionId=None, knowledgeId=None, knowledgeCalled=None, statusValue="", attentionCreated=None,
|
||||
page=3, pageSize=10, db=db, current_admin=object(),
|
||||
)["data"]
|
||||
attention = attention_list(priority="", statusValue="", page=3, pageSize=10, db=db, current_admin=object())["data"]
|
||||
assert retrieval["total"] == attention["total"] == 21
|
||||
assert len(retrieval["items"]) == len(attention["items"]) == 1
|
||||
Reference in New Issue
Block a user