feat(dashboard): 增加首页工作台并调整聊天入口
This commit is contained in:
@@ -31,7 +31,7 @@ def test_workspace_renders_application_form_fill_workflow_card(client, django_us
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
assert "AFF-CARD" in content
|
||||
|
||||
@@ -17,7 +17,7 @@ def test_workspace_renders_summary_panel(client, django_user_model):
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
assert response.status_code == 200
|
||||
content = response.content.decode("utf-8")
|
||||
@@ -37,7 +37,7 @@ def test_workspace_links_to_attachment_manager(client, django_user_model):
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
assert response.status_code == 200
|
||||
content = response.content.decode("utf-8")
|
||||
@@ -85,7 +85,7 @@ def test_attachment_manager_selects_conversation_and_lists_attachments(client, d
|
||||
assert "编辑" in content
|
||||
assert "删除" in content
|
||||
assert "attachment-manager-split" in content
|
||||
assert reverse("home") + f"?conversation={conversation.pk}" in content
|
||||
assert reverse("chat") + f"?conversation={conversation.pk}" in content
|
||||
|
||||
|
||||
def test_attachment_manager_uses_compact_admin_layout(client, django_user_model):
|
||||
@@ -142,7 +142,7 @@ def test_workspace_renders_workflow_history_as_batch_carousel(client, django_use
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
assert response.status_code == 200
|
||||
content = response.content.decode("utf-8")
|
||||
@@ -265,7 +265,7 @@ def test_workspace_tool_buttons_fill_default_prompts(client, django_user_model):
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
script = open("static/js/app.js", encoding="utf-8").read()
|
||||
|
||||
146
tests/test_home_dashboard.py
Normal file
146
tests/test_home_dashboard.py
Normal file
@@ -0,0 +1,146 @@
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
|
||||
from review_agent.models import (
|
||||
ApplicationFormFillBatch,
|
||||
Conversation,
|
||||
FileAttachment,
|
||||
FileSummaryBatch,
|
||||
KnowledgeBaseDocument,
|
||||
RegulatoryReviewBatch,
|
||||
)
|
||||
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def test_home_dashboard_renders_current_user_metrics(client, django_user_model):
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
other = django_user_model.objects.create_user(username="other", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="注册资料会话")
|
||||
other_conversation = Conversation.objects.create(user=other, title="其他用户会话")
|
||||
FileAttachment.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
original_name="active.docx",
|
||||
storage_path="x/active.docx",
|
||||
file_size=128,
|
||||
is_active=True,
|
||||
)
|
||||
FileAttachment.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
original_name="deleted.docx",
|
||||
storage_path="x/deleted.docx",
|
||||
file_size=128,
|
||||
is_active=False,
|
||||
upload_status=FileAttachment.UploadStatus.DELETED,
|
||||
)
|
||||
FileAttachment.objects.create(
|
||||
conversation=other_conversation,
|
||||
user=other,
|
||||
original_name="other.docx",
|
||||
storage_path="x/other.docx",
|
||||
file_size=128,
|
||||
)
|
||||
KnowledgeBaseDocument.objects.create(
|
||||
user=user,
|
||||
display_name="法规资料",
|
||||
original_name="rule.md",
|
||||
storage_path="kb/rule.md",
|
||||
file_size=64,
|
||||
is_active=True,
|
||||
indexed_chunk_count=3,
|
||||
)
|
||||
KnowledgeBaseDocument.objects.create(
|
||||
user=user,
|
||||
display_name="删除资料",
|
||||
original_name="deleted.md",
|
||||
storage_path="kb/deleted.md",
|
||||
file_size=64,
|
||||
status=KnowledgeBaseDocument.Status.DELETED,
|
||||
is_active=False,
|
||||
indexed_chunk_count=5,
|
||||
)
|
||||
KnowledgeBaseDocument.objects.create(
|
||||
user=other,
|
||||
display_name="其他资料",
|
||||
original_name="other.md",
|
||||
storage_path="kb/other.md",
|
||||
file_size=64,
|
||||
indexed_chunk_count=9,
|
||||
)
|
||||
summary = FileSummaryBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
batch_no="FS-RUN",
|
||||
status=FileSummaryBatch.Status.RUNNING,
|
||||
)
|
||||
RegulatoryReviewBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
source_summary_batch=summary,
|
||||
batch_no="RR-WAIT",
|
||||
status=RegulatoryReviewBatch.Status.WAITING_USER,
|
||||
risk_summary={"high": 2},
|
||||
)
|
||||
ApplicationFormFillBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
source_summary_batch=summary,
|
||||
batch_no="AFF-OK",
|
||||
status=ApplicationFormFillBatch.Status.SUCCESS,
|
||||
)
|
||||
FileSummaryBatch.objects.create(
|
||||
conversation=other_conversation,
|
||||
user=other,
|
||||
batch_no="FS-OTHER",
|
||||
status=FileSummaryBatch.Status.FAILED,
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(reverse("home"))
|
||||
|
||||
assert response.status_code == 200
|
||||
content = response.content.decode("utf-8")
|
||||
assert "注册资料审核工作台" in content
|
||||
assert "当前账号资料、知识库、附件与审核处理数据总览" in content
|
||||
assert "工作流流程" not in content
|
||||
assert "对话总数" in content
|
||||
assert "附件总数" in content
|
||||
assert "知识库材料" in content
|
||||
assert "内置材料" in content
|
||||
assert f"管理 {1} · 内置" in content
|
||||
assert "向量片段" in content
|
||||
assert "FS-RUN" in content
|
||||
assert "RR-WAIT" in content
|
||||
assert "AFF-OK" in content
|
||||
assert "FS-OTHER" not in content
|
||||
assert "其他用户会话" not in content
|
||||
assert f'href="{reverse("chat")}?conversation={conversation.pk}"' in content
|
||||
|
||||
|
||||
def test_chat_route_renders_review_agent_workspace(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('chat')}?conversation={conversation.pk}")
|
||||
|
||||
assert response.status_code == 200
|
||||
content = response.content.decode("utf-8")
|
||||
assert "审核智能体" in content
|
||||
assert 'id="summaryPanel"' in content
|
||||
assert f'action="{reverse("chat")}"' in content
|
||||
assert f'href="{reverse("chat")}?conversation={conversation.pk}"' in content
|
||||
|
||||
|
||||
def test_legacy_home_conversation_redirects_to_chat(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 == 302
|
||||
assert response["Location"] == f"{reverse('chat')}?conversation={conversation.pk}"
|
||||
@@ -44,7 +44,7 @@ def test_workspace_renders_regulatory_workflow_card(client, django_user_model):
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
assert "RR-CARD" in content
|
||||
@@ -97,7 +97,7 @@ def test_workspace_renders_condition_confirmation_form(client, django_user_model
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
assert "适用条件确认" in content
|
||||
@@ -152,7 +152,7 @@ def test_workspace_refreshes_incomplete_condition_confirmation_candidates(client
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
assert "体外诊断试剂" in content
|
||||
@@ -193,7 +193,7 @@ def test_workspace_renders_rectification_actions_and_summaries(client, tmp_path,
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"{reverse('home')}?conversation={conversation.pk}")
|
||||
response = client.get(f"{reverse('chat')}?conversation={conversation.pk}")
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
assert "data-rectification-action=\"full-review\"" in content
|
||||
|
||||
Reference in New Issue
Block a user