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