Files
DEMO-AGENT/tests/test_platform_ui.py

251 lines
8.9 KiB
Python

from django.urls import reverse
from django.test import override_settings
from django.contrib import admin
from apps.platform_ui.services import get_platform_demo_context
from apps.platform_ui.models import FeishuNotifyConfig, OwnerMapping, WordTemplateMapping
def test_knowledge_base_page_shows_governance_sections(client):
response = client.get(reverse("platform_ui:knowledge-base"))
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "法规规则包" in content
assert "RAG 文档源" in content
assert "RAG 切片" in content
assert "字段 Schema" in content
assert "责任人映射" in content
assert "飞书通知配置" in content
def test_knowledge_base_page_shows_owner_mapping_fields_and_notify_reasons(client):
response = client.get(reverse("platform_ui:knowledge-base"))
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "owner_role" in content
assert "owner_name" in content
assert "department" in content
assert "chapter_scope" in content
assert "risk_scope" in content
assert "feishu_user_id" in content
assert "feishu_open_id" in content
assert "feishu_name" in content
assert "notify_enabled" in content
assert "task_completed" in content
assert "task_failed" in content
@override_settings(GOVERNANCE_CONFIG_PATH="")
def test_get_platform_demo_context_reads_governance_yaml(tmp_path):
config_path = tmp_path / "governance.yaml"
config_path.write_text(
"""
owner_mappings:
- owner_role: 临床注册负责人
owner_name: 王五
department: 临床事务部
chapter_scope: CH3-CH6
risk_scope: 高风险阻断
feishu_user_id: ou_test_owner
feishu_open_id: on_test_owner
feishu_name: 王五
notify_enabled: 是
feishu_configs:
- config_name: Demo 完成通知
notify_reason: task_completed
channel: 群机器人
message_template: 审核完成摘要 + @处理人
status: 启用
template_mappings:
- template_name: 注册证导出模板
output_type: registration_word_export_report
version: V1.0
placeholder_count: 12
status: 启用
field_mapping_summary: 产品名称 / 注册人 / 适用机型
""".strip(),
encoding="utf-8",
)
with override_settings(GOVERNANCE_CONFIG_PATH=config_path):
context = get_platform_demo_context()
assert context["owner_mappings"][0]["owner_name"] == "王五"
assert context["feishu_configs"][0]["notify_reason"] == "task_completed"
assert context["template_mappings"][0]["template_name"] == "注册证导出模板"
assert context["template_mappings"][0]["field_mapping_summary"] == "产品名称 / 注册人 / 适用机型"
@override_settings(GOVERNANCE_CONFIG_PATH="")
def test_knowledge_base_page_shows_template_mappings_from_governance_config(client, tmp_path):
config_path = tmp_path / "governance.yaml"
config_path.write_text(
"""
template_mappings:
- template_name: 风险摘要导出模板
output_type: registration_word_export_report
version: V2.0
placeholder_count: 8
status: 灰度中
field_mapping_summary: 风险等级 / 产品名称 / 责任人
""".strip(),
encoding="utf-8",
)
with override_settings(GOVERNANCE_CONFIG_PATH=config_path):
response = client.get(reverse("platform_ui:knowledge-base"))
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "Word 模板与字段映射" in content
assert "风险摘要导出模板" in content
assert "风险等级 / 产品名称 / 责任人" in content
def test_get_platform_demo_context_prefers_database_governance_entries(db):
OwnerMapping.objects.create(
owner_role="数据库负责人",
owner_name="周八",
department="注册事务部",
chapter_scope="CH5",
risk_scope="数据库覆盖",
feishu_user_id="ou_db_1",
feishu_open_id="on_db_1",
feishu_name="周八",
notify_enabled=True,
is_active=True,
)
FeishuNotifyConfig.objects.create(
config_name="数据库通知配置",
notify_reason="task_failed",
channel="群机器人",
message_template="异常摘要 + @处理人",
status="启用",
is_active=True,
)
WordTemplateMapping.objects.create(
template_name="数据库模板",
output_type="registration_word_export_report",
version="V3.0",
placeholder_count=16,
status="启用",
field_mapping_summary="产品名称 / 规格 / 风险等级",
is_active=True,
)
context = get_platform_demo_context()
assert context["owner_mappings"][0]["owner_name"] == "周八"
assert context["feishu_configs"][0]["config_name"] == "数据库通知配置"
assert context["template_mappings"][0]["template_name"] == "数据库模板"
def test_governance_models_are_registered_in_admin():
assert OwnerMapping in admin.site._registry
assert FeishuNotifyConfig in admin.site._registry
assert WordTemplateMapping in admin.site._registry
def test_knowledge_base_page_shows_governance_object_navigation_and_active_panel(client):
response = client.get(reverse("platform_ui:knowledge-base"), {"view": "owner_mappings"})
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "治理对象导航" in content
assert "法规规则包" in content
assert "RAG 文档源" in content
assert "Word 模板与字段映射" in content
assert "责任人映射详情" in content
assert "当前对象:责任人映射" in content
assert "批量导入映射" in content
def test_knowledge_base_page_exposes_governance_crud_entry_links(client):
response = client.get(reverse("platform_ui:knowledge-base"), {"view": "template_mappings"})
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "上传模板" in content
assert "编辑占位符映射" in content
assert "预览模板" in content
assert reverse("admin:platform_ui_wordtemplatemapping_changelist") in content
def test_knowledge_base_page_shows_governance_action_hub_and_fixed_notify_policy(client):
response = client.get(reverse("platform_ui:knowledge-base"), {"view": "feishu_configs"})
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "治理动作总览" in content
assert "当前治理对象" in content
assert "进入审核智能体" in content
assert "查看资料包" in content
assert "查看处理历史" in content
assert "固定通知策略" in content
assert "task_completed" in content
assert "task_failed" in content
assert reverse("audit:list") in content
assert reverse("documents:list") in content
def test_command_center_v2_renders_and_links_to_chat_index(client):
response = client.get(reverse("platform_ui:command-center-v2"))
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "试剂盒临床注册文件准备与审核智能体平台" in content
assert reverse("chat:index") in content
def test_command_center_v2_uses_unified_four_entry_labels(client):
response = client.get(reverse("platform_ui:command-center-v2"))
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "审核智能体" in content
assert "资料包" in content
assert "知识库" in content
assert "处理历史" in content
assert "资料包管理" not in content
assert "法规库" not in content
assert "智能审核" not in content
assert "统计分析" not in content
def test_command_center_v2_uses_four_product_entries_as_primary_navigation(client):
response = client.get(reverse("platform_ui:command-center-v2"))
content = response.content.decode("utf-8")
assert response.status_code == 200
assert 'aria-label="一级产品入口"' in content
assert "一级产品" in content
assert "协同治理" in content
assert "审核指挥台" in content
assert "场景配置参考" in content
assert "任务中心" not in content
assert "工作台</span>" not in content
def test_platform_demo_context_uses_agent_product_labels_for_quick_links():
context = get_platform_demo_context()
quick_links = context["quick_links"]
titles = [item["title"] for item in quick_links]
assert "审核智能体" in titles
assert "审核指挥台" in titles
assert "审核工作台" not in titles
assert "工作台大屏" not in titles
assert any(
item["title"] == "审核指挥台" and item["url_name"] == "platform_ui:command-center-v2"
for item in quick_links
)
def test_command_center_legacy_route_redirects_to_v2(client):
response = client.get(reverse("platform_ui:command-center"))
assert response.status_code == 302
assert response.url == reverse("platform_ui:command-center-v2")