# ============================================================================= # 企微IT智能服务台 — 置信门控逻辑测试(D3 / P0-3) # ============================================================================= # 说明:测试 confidence < 0.7 门控逻辑、阈值可配置性、source_failed 标记。 # ============================================================================= import pytest from app.schemas.enums import AudienceEnum class TestConfidenceGate: """置信门控逻辑测试。""" @pytest.mark.asyncio async def test_confidence_above_07_passes(self): """验证 confidence >= 0.7 通过门控。""" from app.services.knowledge_iteration_service import KnowledgeIterationService service = KnowledgeIterationService() assert service._apply_confidence_gate(0.86) is True assert service._apply_confidence_gate(0.70) is True # 边界值 assert service._apply_confidence_gate(0.95) is True assert service._apply_confidence_gate(1.0) is True @pytest.mark.asyncio async def test_confidence_below_07_fails(self): """验证 confidence < 0.7 未通过门控。""" from app.services.knowledge_iteration_service import KnowledgeIterationService service = KnowledgeIterationService() assert service._apply_confidence_gate(0.69) is False assert service._apply_confidence_gate(0.5) is False assert service._apply_confidence_gate(0.0) is False @pytest.mark.asyncio async def test_confidence_none_fails(self): """验证 confidence=None 未通过门控。""" from app.services.knowledge_iteration_service import KnowledgeIterationService service = KnowledgeIterationService() assert service._apply_confidence_gate(None) is False @pytest.mark.asyncio async def test_threshold_configurable(self): """验证门控阈值可配置。""" from app.services.knowledge_iteration_service import KnowledgeIterationService # 默认阈值 0.7 service = KnowledgeIterationService() assert service.confidence_gate_threshold == 0.7 # 修改阈值 service.confidence_gate_threshold = 0.8 assert service._apply_confidence_gate(0.75) is False assert service._apply_confidence_gate(0.85) is True @pytest.mark.asyncio async def test_auto_tag_audience_manual(self, db_session): """验证手动录入→engineer_workguide。""" from app.services.knowledge_iteration_service import KnowledgeIterationService service = KnowledgeIterationService() audience = await service._auto_tag_audience( db_session, "manual", ["test_id"] ) assert audience == AudienceEnum.engineer_workguide @pytest.mark.asyncio async def test_auto_tag_audience_document_ragflow(self, db_session): """验证 RAGFlow 文档→engineer_workguide。""" from app.services.knowledge_iteration_service import KnowledgeIterationService service = KnowledgeIterationService() audience = await service._auto_tag_audience( db_session, "document_ragflow", ["test_id"] ) assert audience == AudienceEnum.engineer_workguide @pytest.mark.asyncio async def test_auto_tag_audience_conversation_default(self, db_session): """验证会话来源→默认 employee_quick_reply(保守)。""" from app.services.knowledge_iteration_service import KnowledgeIterationService service = KnowledgeIterationService() audience = await service._auto_tag_audience( db_session, "conversation", ["nonexistent_id"] ) assert audience == AudienceEnum.employee_quick_reply