merge qyqy_develop and retain risk review updates

This commit is contained in:
张胜宇
2026-09-14 01:41:02 +08:00
parent 295be972d2
commit f5d1b24618
15 changed files with 345 additions and 25 deletions
@@ -114,6 +114,49 @@ def test_score_bands_are_deterministic_and_server_only() -> None:
assert (high.total, high.risk_level) == (57, "C5")
@pytest.mark.asyncio
async def test_completed_questionnaire_can_be_requested_for_retake(
monkeypatch: pytest.MonkeyPatch,
) -> None:
class SessionContext:
async def __aenter__(self) -> object:
return object()
async def __aexit__(self, *_args: object) -> None:
return None
async def not_required(_self: object, _context: RequestContext) -> bool:
return False
async def no_pending_review(
_self: object, _customer_id: int, *, lock: bool = False
) -> None:
del lock
return None
monkeypatch.setattr(
RiskQuestionnaireService, "is_required", not_required
)
monkeypatch.setattr(
"app.service.risk_questionnaire_service.SessionFactory",
lambda: SessionContext(),
)
monkeypatch.setattr(
"app.service.risk_questionnaire_service.RiskQuestionnaireRepository.pending_drift_review",
no_pending_review,
)
service = RiskQuestionnaireService()
regular = await service.questionnaire(context())
assert regular["data"]["questionnaire"] is None # type: ignore[index]
retake = await service.questionnaire(context(), retake=True)
questionnaire = retake["data"]["questionnaire"] # type: ignore[index]
assert isinstance(questionnaire, dict)
assert questionnaire["version"] == "opening-risk-v1"
assert len(questionnaire["questions"]) == 13
@pytest.mark.asyncio
async def test_submission_persists_assessment_and_profile_without_exposing_them(
monkeypatch: pytest.MonkeyPatch,
@@ -139,8 +182,9 @@ async def test_submission_persists_assessment_and_profile_without_exposing_them(
)
data = cast(dict[str, object], response["data"])
assert set(data) == {"completed", "questionnaire_version", "valid_until"}
assert set(data) == {"completed", "status", "questionnaire_version", "valid_until"}
assert data["completed"] is True
assert data["status"] == "active"
assert not {"total_score", "risk_level", "risk_profile", "profile"}.intersection(data)
assert any(isinstance(item, RiskAssessment) for item in session.items)
assert any(isinstance(item, ProfileSnapshot) for item in session.items)