feat: improve async feedback and export workflow
This commit is contained in:
@@ -12,6 +12,7 @@ from app.services.admin_permission_service import ALL_PERMISSION_CODES, permissi
|
||||
def test_super_admin_has_all_permissions() -> None:
|
||||
admin = Admin(id=1, username="root", password="unused", name="root", status=1, is_super_admin=1)
|
||||
assert permissions_for(admin) == ALL_PERMISSION_CODES
|
||||
assert {"feedback.view", "feedback.detail", "feedback.export", "feedback.delete"} <= ALL_PERMISSION_CODES
|
||||
|
||||
|
||||
def test_role_permissions_are_restricted_to_catalog() -> None:
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from types import SimpleNamespace
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from app.api.feedback import FeedbackCreate, create_feedback, delete_feedback, feedback_detail, feedback_list
|
||||
from app.api.feedback import FeedbackCreate, _feedback_workbook, create_feedback, delete_feedback, feedback_detail, feedback_list
|
||||
from app.models import Base
|
||||
from app.models.admin import Admin
|
||||
from app.models.chat import ChatMessage, ChatSession
|
||||
@@ -33,3 +36,20 @@ def test_feedback_binds_target_answer_and_exposes_context() -> None:
|
||||
assert detail["messages"][-1]["isTarget"] is True
|
||||
delete_feedback(created["id"], db=db, admin=admin)
|
||||
assert feedback_list(readStatus="all", page=1, pageSize=20, db=db, _admin=admin)["data"]["total"] == 0
|
||||
|
||||
|
||||
def test_feedback_export_workbook_is_formatted_and_formula_safe() -> None:
|
||||
created_at = datetime(2026, 8, 11, 12, 30)
|
||||
row = (
|
||||
SimpleNamespace(is_read=0, content="=HYPERLINK(\"bad\")", created_at=created_at, read_at=None),
|
||||
SimpleNamespace(name="测试用户", phone="13800000000"),
|
||||
SimpleNamespace(id=9, content="AI 回答"),
|
||||
SimpleNamespace(title="测试会话"),
|
||||
)
|
||||
workbook = _feedback_workbook([row])
|
||||
sheet = workbook["反馈记录"]
|
||||
assert sheet.freeze_panes == "A2"
|
||||
assert sheet["E2"].data_type == "s"
|
||||
assert sheet["E2"].value.startswith("'=")
|
||||
assert sheet["I2"].value == created_at
|
||||
assert sheet.tables["FeedbackRecords"].ref == "A1:J2"
|
||||
|
||||
Reference in New Issue
Block a user