"""T2.5 弱信号采集与关联测试。 测试弱信号采集器的四类信号采集和关联引擎的跨维度关联分析。 """ import pytest from app.services.signal_correlator import correlate_signals from app.services.weak_signal_collector import collect_weak_signals class TestCollectWeakSignals: """弱信号采集测试。""" async def test_collect_returns_four_types(self): """采集返回四类信号。""" signals = await collect_weak_signals("company-1", "测试公司") assert len(signals) == 4 types = {s["signal_type"] for s in signals} assert types == {"technical", "sentiment", "org", "market"} async def test_signal_has_confidence(self): """每个信号包含置信度。""" signals = await collect_weak_signals("company-1", "测试公司") for s in signals: assert "confidence" in s assert 0 <= s["confidence"] <= 1 async def test_signal_has_company_id(self): """信号包含企业 ID。""" signals = await collect_weak_signals("company-abc", "测试公司") for s in signals: assert s["company_id"] == "company-abc" class TestCorrelateSignals: """弱信号关联测试。""" async def test_single_signal_no_correlation(self): """单个信号不产生关联。""" signals = [{"id": "1", "signal_type": "technical", "confidence": 0.8}] result = await correlate_signals(signals) assert result == [] async def test_cross_dimension_correlation(self): """跨维度信号产生关联。""" signals = [ {"id": "1", "signal_type": "technical", "confidence": 0.7}, {"id": "2", "signal_type": "sentiment", "confidence": 0.6}, ] result = await correlate_signals(signals) assert len(result) == 1 assert result[0]["correlation_type"] == "cross_dimension" assert result[0]["risk_probability"] > 0 async def test_same_type_no_cross_dimension(self): """同类型信号不产生跨维度关联。""" signals = [ {"id": "1", "signal_type": "technical", "confidence": 0.7}, {"id": "2", "signal_type": "technical", "confidence": 0.6}, ] result = await correlate_signals(signals) assert len(result) == 0 async def test_empty_signals(self): """空信号列表返回空。""" result = await correlate_signals([]) assert result == []