"""风险检测引擎测试。""" from app.services.risk_engine import detect_risks class TestDetectRisks: """风险自动检测。""" def test_empty_data(self): """空数据不应检测到风险。""" risks = detect_risks({}, "company-1") assert len(risks) == 0 def test_low_runway_critical(self): """跑道 < 3 月应触发 critical 风险。""" data = {"cash_balance": {"runway_months": 2}} risks = detect_risks(data, "company-1") assert any(r["severity"] == "critical" for r in risks) assert any("3 个月" in r["title"] for r in risks) def test_low_runway_warning(self): """跑道 3-6 月应触发 high 风险。""" data = {"cash_balance": {"runway_months": 4}} risks = detect_risks(data, "company-1") assert any(r["severity"] == "high" and "6 个月" in r["title"] for r in risks) def test_burn_rate_up(self): """烧钱率上升应触发 medium 风险。""" data = {"burn_rate": {"trend": "up"}} risks = detect_risks(data, "company-1") assert any(r["severity"] == "medium" and "烧钱率" in r["title"] for r in risks) def test_revenue_decline(self): """营收下滑应触发 high 风险。""" data = {"revenue": {"yoy_change": "-15"}} risks = detect_risks(data, "company-1") assert any(r["severity"] == "high" and "营收" in r["title"] for r in risks) def test_high_departures(self): """高离职率应触发 medium 风险。""" data = {"headcount": {"new_hires": 2, "departures": 8}} risks = detect_risks(data, "company-1") assert any(r["severity"] == "medium" and "流失" in r["title"] for r in risks) def test_healthy_company_no_risks(self): """健康企业不应检测到风险。""" data = { "revenue": {"yoy_change": "20"}, "cash_balance": {"runway_months": 18}, "burn_rate": {"trend": "down"}, "headcount": {"new_hires": 5, "departures": 1}, } risks = detect_risks(data, "company-1") assert len(risks) == 0 def test_company_id_in_risks(self): """风险事件应包含 company_id。""" data = {"cash_balance": {"runway_months": 2}} risks = detect_risks(data, "test-company-id") for r in risks: assert r["company_id"] == "test-company-id"