Merge branch 'RM2_develop' into qyqy_develop
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from datetime import datetime
|
||||
from types import MappingProxyType
|
||||
from types import MappingProxyType, SimpleNamespace
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -30,6 +30,26 @@ class FakeRepository:
|
||||
return self.snapshot
|
||||
|
||||
|
||||
class FailingEndpointResolver:
|
||||
async def resolve(self, **_kwargs):
|
||||
raise RuntimeError("模型端点不可用")
|
||||
|
||||
|
||||
class FailingModelService:
|
||||
async def generate(self, *_args, **_kwargs):
|
||||
raise AssertionError("端点解析失败后不应调用模型")
|
||||
|
||||
|
||||
class StubEndpointResolver:
|
||||
async def resolve(self, **_kwargs):
|
||||
return [object()]
|
||||
|
||||
|
||||
class StubModelService:
|
||||
async def generate(self, *_args, **_kwargs):
|
||||
return SimpleNamespace(text="1. 根据模型生成日报建议")
|
||||
|
||||
|
||||
def record(
|
||||
alert_no: str,
|
||||
*,
|
||||
@@ -97,6 +117,8 @@ async def test_daily_report_contains_nine_sections_and_historical_items() -> Non
|
||||
service = RiskDailyReportService(
|
||||
session,
|
||||
repository=FakeRepository(snapshot),
|
||||
model_service=FailingModelService(),
|
||||
endpoint_resolver=FailingEndpointResolver(),
|
||||
)
|
||||
|
||||
report = await service.generate(
|
||||
@@ -108,12 +130,46 @@ async def test_daily_report_contains_nine_sections_and_historical_items() -> Non
|
||||
assert report["unresolved_items"]["total"] == 2
|
||||
assert report["unresolved_items"]["historical"] == 1
|
||||
assert report["unresolved_items"]["overdue"] == 1
|
||||
assert report["generated_at"] == "2026-09-10 18:00:00"
|
||||
assert report["unresolved_items"]["items"][0]["created_at"] == "2026-09-10 16:00:00"
|
||||
assert report["source"] == "规则化模板"
|
||||
assert all(f"{index}." in report["content"] for index in range(1, 10))
|
||||
assert session.committed is True
|
||||
assert session.added[0].action_type == "risk_daily_report_generated"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_daily_report_lazily_initializes_model_service(monkeypatch) -> None:
|
||||
current = record("ALERT-MODEL")
|
||||
snapshot = RiskReportSnapshot(
|
||||
daily=(current,),
|
||||
unresolved=(current,),
|
||||
false_positive=(),
|
||||
dispositions=(current,),
|
||||
)
|
||||
session = FakeSession()
|
||||
monkeypatch.setattr(
|
||||
"app.service.agent.bootstrap.get_model_service",
|
||||
lambda: StubModelService(),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.service.model_gateway.DatabaseModelEndpointResolver",
|
||||
StubEndpointResolver,
|
||||
)
|
||||
service = RiskDailyReportService(
|
||||
session,
|
||||
repository=FakeRepository(snapshot),
|
||||
)
|
||||
|
||||
report = await service.generate(
|
||||
context(),
|
||||
now=datetime(2026, 9, 10, 10, 0),
|
||||
)
|
||||
|
||||
assert report["source"] == "模型"
|
||||
assert report["optimization_suggestions"] == "1. 根据模型生成日报建议"
|
||||
|
||||
|
||||
def test_mail_service_is_disabled_by_default() -> None:
|
||||
result = RiskDailyReportMailService(environment={}).send(
|
||||
["risk@example.com"],
|
||||
|
||||
Reference in New Issue
Block a user