feat(attachments): 新增附件管理页面

This commit is contained in:
2026-06-06 22:45:48 +08:00
parent 0fca20756b
commit df3f393dd2
7 changed files with 660 additions and 6 deletions

View File

@@ -1,7 +1,7 @@
import pytest
from django.urls import reverse
from review_agent.models import Conversation, FileSummaryBatch, Message, WorkflowNodeRun
from review_agent.models import Conversation, FileAttachment, FileSummaryBatch, Message, WorkflowNodeRun
pytestmark = pytest.mark.django_db
@@ -32,6 +32,82 @@ def test_workspace_renders_summary_panel(client, django_user_model):
assert "自动汇总文件目录与页数" in content
def test_workspace_links_to_attachment_manager(client, django_user_model):
user = django_user_model.objects.create_user(username="owner", password="pass")
conversation = Conversation.objects.create(user=user, title="会话")
client.force_login(user)
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
assert response.status_code == 200
content = response.content.decode("utf-8")
assert "附件管理" in content
assert "视频实时监测" not in content
assert f'href="{reverse("attachment_manager")}?conversation={conversation.pk}"' in content
assert 'class="attachment-manager-link"' in content
def test_attachment_manager_requires_conversation_selection(client, django_user_model):
user = django_user_model.objects.create_user(username="owner", password="pass")
Conversation.objects.create(user=user, title="待选择会话")
client.force_login(user)
response = client.get(reverse("attachment_manager"))
assert response.status_code == 200
content = response.content.decode("utf-8")
assert "附件管理" in content
assert "请选择一个对话查看附件" in content
assert "待选择会话" in content
assert 'id="attachmentConversationSelect"' in content
def test_attachment_manager_selects_conversation_and_lists_attachments(client, django_user_model):
user = django_user_model.objects.create_user(username="owner", password="pass")
conversation = Conversation.objects.create(user=user, title="资料会话")
FileAttachment.objects.create(
conversation=conversation,
user=user,
original_name="a.docx",
storage_path="x/a.docx",
file_size=128,
is_active=True,
)
client.force_login(user)
response = client.get(f"{reverse('attachment_manager')}?conversation={conversation.pk}")
assert response.status_code == 200
content = response.content.decode("utf-8")
assert "资料会话" in content
assert "a.docx" in content
assert "下载" in content
assert "编辑" in content
assert "删除" in content
assert "attachment-manager-split" in content
assert reverse("home") + f"?conversation={conversation.pk}" in content
def test_attachment_manager_uses_compact_admin_layout(client, django_user_model):
user = django_user_model.objects.create_user(username="owner", password="pass")
Conversation.objects.create(user=user, title="紧凑会话")
client.force_login(user)
response = client.get(reverse("attachment_manager"))
assert response.status_code == 200
content = response.content.decode("utf-8")
css = open("static/css/login.css", encoding="utf-8").read()
assert "attachment-manager-toolbar" in content
assert "attachment-manager-content" in content
assert "attachment-manager-select-control" in content
assert ".attachment-manager-page" in css
assert "align-content: start" in css
assert ".attachment-manager-toolbar" in css
assert ".attachment-manager-select-control" in css
assert ".attachment-manager-split" in css
def test_workspace_renders_workflow_history_as_batch_carousel(client, django_user_model):
user = django_user_model.objects.create_user(username="owner", password="pass")
conversation = Conversation.objects.create(user=user, title="会话")