feat: improve chat feedback navigation
This commit is contained in:
@@ -99,6 +99,7 @@ def test_chat_detail_messages_are_paginated():
|
||||
ChatMessage(id=index + 1, session_id=1, user_id=1, role="user", content=f"消息{index + 1}")
|
||||
for index in range(25)
|
||||
])
|
||||
db.add(AiRequestLog(session_id=1, status="success", prompt="p" * 100_000, retrieved_chunks='[{"content":"large"}]'))
|
||||
db.commit()
|
||||
|
||||
response = chat_detail(
|
||||
@@ -116,6 +117,7 @@ def test_chat_detail_messages_are_paginated():
|
||||
assert data["messagesPage"]["page"] == 2
|
||||
assert len(data["messages"]) == 10
|
||||
assert data["messages"][0]["content"] == "消息11"
|
||||
assert data["aiLogs"] == []
|
||||
|
||||
|
||||
def test_chat_detail_focus_message_opens_its_page_in_chronological_order():
|
||||
@@ -164,7 +166,7 @@ def test_chat_messages_endpoint_returns_only_message_page():
|
||||
db.add(AiRequestLog(session_id=1, status="success", prompt="p" * 5000, retrieved_chunks='[{"content":"large"}]'))
|
||||
db.commit()
|
||||
|
||||
response = chat_messages(1, page=2, pageSize=10, db=db, current_admin=object())
|
||||
response = chat_messages(1, keyword="", page=2, pageSize=10, db=db, current_admin=object())
|
||||
|
||||
data = response["data"]
|
||||
assert data["total"] == 12
|
||||
@@ -173,6 +175,32 @@ def test_chat_messages_endpoint_returns_only_message_page():
|
||||
assert "aiLogs" not in data
|
||||
|
||||
|
||||
def test_chat_messages_keyword_search_is_scoped_and_paginated():
|
||||
with _database() as db:
|
||||
user = User(id=1, phone="13800000000", name="学员", daily_chat_limit=10)
|
||||
session = ChatSession(id=1, user_id=1, title="搜索会话", message_count=24)
|
||||
other_session = ChatSession(id=2, user_id=1, title="其他会话", message_count=1)
|
||||
db.add_all([user, session, other_session])
|
||||
db.add_all([
|
||||
ChatMessage(
|
||||
id=index,
|
||||
session_id=1,
|
||||
user_id=1,
|
||||
role="user",
|
||||
content=f"第{index}条 关键字" if index % 2 == 0 else f"第{index}条普通内容",
|
||||
)
|
||||
for index in range(1, 25)
|
||||
])
|
||||
db.add(ChatMessage(id=100, session_id=2, user_id=1, role="user", content="其他会话关键字"))
|
||||
db.commit()
|
||||
|
||||
response = chat_messages(1, keyword="关键字", page=2, pageSize=10, db=db, current_admin=object())
|
||||
|
||||
data = response["data"]
|
||||
assert data["total"] == 12
|
||||
assert [item["id"] for item in data["items"]] == [22, 24]
|
||||
|
||||
|
||||
def test_retrieval_and_attention_lists_are_paginated():
|
||||
with _database() as db:
|
||||
for index in range(21):
|
||||
|
||||
@@ -55,3 +55,47 @@ def test_feedback_export_workbook_is_formatted_and_formula_safe() -> None:
|
||||
assert "AI生成内容,请结合实际情况核对后使用。" in sheet["H2"].value
|
||||
assert sheet["I2"].value == created_at + timedelta(hours=8)
|
||||
assert sheet.tables["FeedbackRecords"].ref == "A1:J2"
|
||||
|
||||
|
||||
def test_feedback_detail_locates_target_beyond_first_two_hundred_messages() -> None:
|
||||
engine = create_engine("sqlite:///:memory:", connect_args={"check_same_thread": False}, poolclass=StaticPool)
|
||||
Base.metadata.create_all(engine)
|
||||
with Session(engine) as db:
|
||||
user = User(id=1, phone="13800000000", name="测试用户")
|
||||
admin = Admin(id=1, username="admin", password="hash", name="管理员", is_super_admin=1, must_change_password=0)
|
||||
session = ChatSession(id=1, user_id=1, title="超长会话", message_count=250)
|
||||
created_at = datetime(2026, 8, 29, 9, 0)
|
||||
db.add_all([user, admin, session])
|
||||
db.add_all([
|
||||
ChatMessage(
|
||||
id=index,
|
||||
session_id=1,
|
||||
user_id=1,
|
||||
role="assistant" if index % 2 == 0 else "user",
|
||||
content=f"消息{index}",
|
||||
message_status="FINISHED",
|
||||
created_at=created_at,
|
||||
)
|
||||
for index in range(1, 251)
|
||||
])
|
||||
db.commit()
|
||||
|
||||
feedback_id = create_feedback(
|
||||
FeedbackCreate(messageId=230, content="这条回答有问题"),
|
||||
db=db,
|
||||
user=user,
|
||||
)["data"]["id"]
|
||||
detail = feedback_detail(
|
||||
feedback_id,
|
||||
messagePage=None,
|
||||
messagePageSize=20,
|
||||
db=db,
|
||||
admin=admin,
|
||||
)["data"]
|
||||
|
||||
assert detail["messagesPage"]["page"] == 12
|
||||
assert detail["messagesPage"]["total"] == 250
|
||||
assert [item["id"] for item in detail["messages"]] == list(range(221, 241))
|
||||
target = next(item for item in detail["messages"] if item["isTarget"])
|
||||
assert target["id"] == 230
|
||||
assert target["createdAt"] == "2026-08-29T09:00:00.000Z"
|
||||
|
||||
Reference in New Issue
Block a user